仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2065|回复: 20
打印 上一主题 下一主题

[学习教程] JAVA网站制作之JDBC 进门

[复制链接]
透明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:55:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
一旦你有了思想,那你编的程序就有了灵魂,不管是什么语言到了你的手里都会是你的工具而已,他们的价值是能尽快帮助你实现你想要的目标。但是如果你没有了思想,那就像是海里的帆船失去了船帆,是很难到打海的另一边的。JDBC进门--创建连接
教程:JDBC进门MaydeneFisher翻译:comer
  你必要做的第一事变是你与想要利用的DBMS创建一个毗连。这包括2个步骤:装载驱动程序并创建毗连。

装载驱动程序
  装载驱动程序只必要十分复杂的一行代码。比方,你想要利用JDBC-ODBC桥驱动程序,能够用以下代码装载它:

    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

  你的驱动程叙文档将告知你应当利用的类名。比方,假如类名是jdbc.DriverXYZ,你将用代码以下的代码装载驱动程序:

    Class.forName("jdbc.DriverXYZ");

  你不必要创立一个驱动程序类的实例而且用DriverManager挂号它,由于挪用Class.forName将主动将加载驱动程序类。假如你曾本人创立实例,你将创立一个不用要的正本,但它不会带来甚么害处。

  加载Driver类后,它们便可用来与数据库创建毗连。

创建毗连
  第二步就是用得当的驱动程序类与DBMS创建一个毗连。以下代码是一样平常的做法:

    Connectioncon=DriverManager.getConnection(url,"myLogin","myPassword");

  这个步骤也十分复杂,最难的是怎样供应url。假如你正在利用JDBC-ODBC桥,JDBCURL将以jdbc:odbc入手下手:余下URL一般是你的数据源名字或数据库体系。因而,假定你正在利用ODBC存取一个叫"Fred"的ODBC数据源,你的JDBCURL是jdbc:odbc:Fred。把"myLogin"及"myPassword"交换为你上岸DBMS的用户名及口令。假如你上岸数据库体系的用户名为"Fernanda"口令为"J8",只需上面的2行代码就能够创建一个毗连:

Stringurl="jdbc:odbc:Fred";
Connectioncon=DriverManager.getConnection(url,"Fernanda","J8");
  假如你利用的是第三方开辟了的JDBC驱动程序,文档将告知你该利用甚么subprotocol,就是在JDBCURL中放在jdbc前面的部分。比方,假如驱动程序开辟者注册了acme作为subprotocol,JDBCURL的第一和第二部分将是jdbc:acme。驱动程叙文档也会告知你余下JDBCURL的格局。JDBCURL最初一部分供应了定位数据库的信息。

  假如你装载的驱动程序辨认了供应给DriverManager.getConnection的JDBCURL,谁人驱动程序将依据JDBCURL创建一个到指定DBMS的毗连。正如称号所示,DriverManager类在幕后为你办理创建毗连的一切细节。除非你是正在写驱动程序,你大概无需利用此类的别的任何办法,一样平常程序员必要在此类中间接利用的独一办法是DriverManager.getConnection。

  DriverManager.getConnection办法前往一个翻开的毗连,你可使用此毗连创立JDBCstatements并发送SQL语句到数据库。在后面的例子里,con对象是一个翻开的毗连,而且我们要在今后的例子里利用它。

JDBC进门--设置表
创立表
  起首,我们在我们的示例数据库创立个中一张表COFFEES,包括在咖啡店所卖咖啡的需要的信息,包含咖啡名字,他们的代价,本礼拜卖了几磅及迄今为止卖的数量。关于COFFEES表我们今后会具体形貌,以下:

COF_NAMESUP_IDPRICESALESTOTAL
Colombian1017.9900
French_Roast498.9900
Espresso1509.9900
Colombian_Decaf1018.9900
French_Roast_Decaf499.9900

  存储咖啡名的列是COF_NAME,它的SQL数据范例是VARCHAR,最年夜的长度为32个字符。由于我们所卖的每品种型咖啡都利用分歧的名字,名字可用于作为独一辨认咖啡的标识,因而可用于作主键。第二个列叫SUP_ID,用于保留咖啡供给商标识;其SQL数据范例为INTEGER。第3列叫PRICE,由于它必要保留带小数的十进制数,因而它的SQL范例为FLOAT。(注重,一般钱的SQL范例为DECIMAL或NUMERIC,但在分歧DBMSs间存在差别,为了不于老版本的JDBC的不兼容性在本教程我们接纳更尺度的FLOAT范例)SALES列的SQL范例为INTEGER,其值为本礼拜所卖咖啡的磅数。最初一列,TOTAL的SQL范例为INTEGER,保留了迄今为止所卖咖啡的总磅数。

  数据库里的第二个表SUPPLIERS,保留了每一个供给商的信息:

SUP_IDSUP_NAMESTREETCITYSTATEZIP
101Acme,Inc.99MarketStreetGroundsvilleCA95199
49SuperiorCoffee1PartyPlaceMendocinoCA95460
150TheHighGround100CoffeeLaneMeadowsCA93966

  COFFEES跟SUPPLIERS都包括列SUP_ID,它意味着能够用SELECT语句从这两张表中获得有关信息。列SUP_ID是SUPPLIERS表的主键,用于独一辨认每一个咖啡供给商。在COFFEES表中,SUP_ID列被称外键。注重每一个SUP_ID值在SUPPLIERS内外只呈现一次;这对主键是必需的。在COFFEES内外,它作为外键,明显它能够有反复的SUP_ID值,由于统一供给商能够供应良多种的咖啡。在本节的最初,你将瞥见怎样在SELECT语句中利用主键及外键的一个例子。

  上面的SQL语句用于创立COFFEES表。列由列名跟空格跟SQL范例构成。列(包含列名及其SQL范例)跟下一个之间用逗号分开。VARCHAR范例创立界说了最年夜长度,因而它必要有一个参数来暗示最年夜长度。参数必需在范例前面的括号内。SQL语句以下,列COF_NAME的长度被限制为不得凌驾32个字符:

CREATETABLECOFFEES
(COF_NAMEVARCHAR(32),
SUP_IDINTEGER,
PRICEFLOAT,
SALESINTEGER,
TOTALINTEGER)

  这些代码不带DBMS语句停止符,由于每一个DBMS都大概分歧。比方,Oracle利用一个分号(;)作为语句的停止,而Sybase利用go。你所利用的驱动程序会主动供应符合的语句停止符,因而你不必把它包含在你的JDBC代码中。

  别的,我们应当指出的的是SQL语句的格局。在CREATETABLE语句中,关头字接纳年夜写字符,而且每一个项目都另起一行。SQL并没有此请求;仅仅是为了更简单浏览。SQL尺度是不辨别关头词的巨细写的,因而,以下例中的SELECT语句能够有多种写法。因而上面两个分歧写法的语句对SQL来讲是一样的。

SELECTFirst_Name,Last_Name
FROMEmployees
WHERELast_NameLIKE"Washington"

selectFirst_Name,Last_NamefromEmployeeswhere
Last_Namelike"Washington"

  但是,引号里的内容是辨别巨细写的:在名字"Washington"里"W"必需被年夜写,而且余下的字符必需是小写的。

  关于标识,分歧的DBMS有分歧的请求,比方,某些DBMSs请求那些列名及表名必需跟创立时的一样,有些则没有此请求。为平安起见,我们全体利用年夜写标识如COFFEES、SUPPLIERS,由于我们是那样界说他们的。

  到止我们写了创立COFFEES表的SQL语句。如今我们在它表面加上引号(使它成为字符串),而且字符串赋值给变量createTableCoffees,在今后的JDBC代码中我们可使用此变量。正如看到的,DBMS其实不在乎分行,但对Java言语来,String对象分行是通不外编译的。因此,我们能够用加号(+)把每行的串联接。

StringcreateTableCoffees="CREATETABLECOFFEES"+
"(COF_NAMEVARCHAR(32),SUP_IDINTEGER,PRICEFLOAT,"+
"SALESINTEGER,TOTALINTEGER)";

  我们在CREATETABLE语句中利用的数据范例是通用的SQL范例(也称JDBC范例)它们在类java.sql.Types中界说。DBMSs一般利用这些尺度的范例,因而,当你要实验一些JDBC使用程序时,你能够间接利用CreateCoffees.java使用程序,它利用了CREATETABLE语句。假如你的DBMS利用了它的本人的当地的范例名字,我们为你供给别的的使用程序,我们将在前面具体注释。

  在使用任何使用程序前,固然,我们将让你懂得JDBC的基本。

创立JDBCStatements对象
  Statement对象用于把SQL语句发送到DBMS。你只须复杂地创立一个Statement对象而且然后实行它,利用得当的办法实行你发送的SQL语句。对SELECT语句来讲,可使用executeQuery。要创立或修正表的语句,利用的办法是executeUpdate。

  必要一个活泼的毗连的来创立Statement对象的实例。鄙人面的例子中,我们利用我们的Connection对象con创立Statement对象stmt:

Statementstmt=con.createStatement();

  到此stmt已存在了,但它还没有把SQL语句传送到DBMS。我们必要供应SQL语句作为参数供应给我们利用的Statement的办法。比方,鄙人面的代码段里,我们利用下面例子中的SQL语句作为executeUpdate的参数:

stmt.executeUpdate("CREATETABLECOFFEES"+
"(COF_NAMEVARCHAR(32),SUP_IDINTEGER,PRICEFLOAT,"+
"SALESINTEGER,TOTALINTEGER)");

  由于我们已把SQL语句赋给了createTableCoffees变量,我们能够以下体例誊写代码:

stmt.executeUpdate(createTableCoffees);

实行语句
  我们利用executeUpdate办法是由于在createTableCoffees中的SQL语句是DDL(数据界说言语)语句。创立表,改动表,删除表都是DDL语句的例子,要用executeUpdate办法来实行。你也能够从它的名字里看出,办法executeUpdate也被用于实行更新表SQL语句。实践上,相对创立表来讲,executeUpdate用于更新表的工夫更多,由于表只必要创立一次,但常常被更新。

  被利用最多的实行SQL语句的办法是executeQuery。这个办法被用来实行SELECT语句,它几近是利用最多的SQL语句。即刻你将看到怎样利用这个办法。

在表中输出数据
  我们已显现了怎样经由过程指定列名、数据范例来创立表COFFEES,可是这仅仅创建表的布局。表还没有任何数据。我们将次输出一行数据到表中,供应每列的信息,注重拔出的数据显现按次跟表创立时分是一样的,既缺省按次。

  以下代码拔出一个行数据,COF_NAME的值为Colombian,SUP_ID为101,PRICE为7.99,SALES0,TOTAL0。就象创立COFFEES表一样,我们创立一Statement对象,并实行executeUpdate办法。

  由于SQL语句一行显现不下,因而我们把它分为两行,并用加号(+)相连。出格要注重的是,在COFFEES和VALUES之间要有空格。这个空格必需在引号以内而且要在COFFEES跟VALUES之间;没有这个空格,SQL语句将被毛病地被读作为"INSERTINTOCOFFEESVALUES...",而且DBMS将寻觅表COFFEESVALUES。还要注重的是在coffeename上我们利用了单引号。

Statementstmt=con.createStatement();
stmt.executeUpdate(
"INSERTINTOCOFFEES"+
"VALUES(Colombian,101,7.99,0,0)");

  上面的代码把第二行拔出到表COFFEES中。我们能够在利用Statement对象而不必为每次实行创立一个新的。

stmt.executeUpdate("INSERTINTOCOFFEES"+
"VALUES(French_Roast,49,8.99,0,0)");

  剩下行的数据以下:

stmt.executeUpdate("INSERTINTOCOFFEES"+
"VALUES(Espresso,150,9.99,0,0)");
stmt.executeUpdate("INSERTINTOCOFFEES"+
"VALUES(Colombian_Decaf,101,8.99,0,0)");
stmt.executeUpdate("INSERTINTOCOFFEES"+
"VALUES(French_Roast_Decaf,49,9.99,0,0)");

从表中获得数据
  既然表COFFEES中已无数据了,我们就能够写一个SELECT语句来获得这些值。上面的SQL语句中星号(*)暗示选择一切的列。由于没有效WHERE子句来限定所选的行,因而上面的SQL语句选择的是全部表。

SELECT*FROMCOFFEES

  了局是全部表的数据,以下:

COF_NAMESUP_IDPRICESALESTOTAL
------------------------------------
Colombian1017.9900
French_Roast498.9900
Espresso1509.9900
Colombian_Decaf1018.9900
French_Roast_Decaf499.9900

  假如你间接在数据库体系里输出SQL查询语句,你将在你的终端上看到如上的了局。当我们经由过程一个Java使用程序存取一个数据库时,正如我们即刻要做的一样,我们必要检索了局以便我们能利用他们。你将鄙人一节看到怎样完成。

这是SELECT语句的另外一个例子,这将失掉咖啡及其各自每磅单价的列表。

SELECTCOF_NAME,PRICEFROMCOFFEES

查询的了局集将具有以下情势:

COF_NAMEPRICE
-----------------------
Colombian7.99
French_Roast8.99
Espresso9.99
Colombian_Decaf8.99
French_Roast_Decaf9.99

下面SELECT语句获得了一切咖啡的名字及代价。而上面的SELECT语句限定那些每磅代价低于$9.00的咖啡才被选择。
SELECTCOF_NAME,PRICE
FROMCOFFEES
WHEREPRICE<9.00

了局集将具有以下情势:

COF_NAMEPRICE
--------------------
Colombian7.99
French_Roast8.99
ColombianDecaf8.99

JDBC进门--入手下手
你必要做的第一事变是你要准确的安装。这包括以下几个步骤:

在你的盘算机上安装Java和JDBC
  Java数据库毗连(JDBC)是一个尺度SQL(StructuredQueryLanguage,布局化查询言语)数据库会见接口,能够为多种干系数据库供应一致会见。JDBC(JavaDataBaseConnection,Java数据库毗连)也供应一种基准,据此能够构建更初级的工具和接口。今朝的JDK(JavaDevelopmentKit,Java开辟工具包)软件绑缚包含JDBC和JDBC-ODBC(OpenDataBaseConnection,开放式数据库毗连)桥。这些包也可自力失掉,以跟JDK1.0一同利用。应当注重的是,本文的示例利用了JDBC2.0接口,必要JDK2.0来运转,不克不及在JDK1.1下运转。

  你能够从http://java.sun.com/products/JDK/CurrentRelease找到最新版。

安装驱动程序
  你的驱动程序应当有安装办法。为特定的DBMSs写的JDBC驱动程序安装时只需拷贝到你的盘算机上就能够了。其实不必要特别的设置。

  假如你下载的是Solaris或WindowsJDK1.1版本,桥作为包sun.jdbc.odbc与JDK一同主动安装。有关安装和设置ODBC的信息,请征询ODBC驱动程序厂商。桥不必特别设置。有关客户机安装和设置信息,请征询数据库厂商。

假如必要,安装数据库体系
  假如你不克不及确认是不是安装了数据库体系,你必要依照供给商的请求安装数据库。年夜多半用户都已安装了数据库,可持续利用他们安装好的数据库。

设置数据库
  我们假定数据库COFFEEBREAK已存在。(创立一个数据库其实不坚苦,但必要必定的权限并一般是由数据库办理员来做)你还必要在此数据库里创立本教程作为例子利用的表。我们成心限定表的巨细跟及数量,以便于办理。

  假定我们的数据库是在一个咖啡馆里利用,咖啡豆按磅卖,而咖啡则以杯为单元。为了复杂起见,还假定谋划者只必要2张表,分离寄存分歧品种的咖啡及咖啡供给商的有关信息。

  起首我们演示怎样翻开一个DBMS毗连,及JDBC是怎样发送SQL语句到你的DBMS。经由过程这些代码,我们将标明利用JDBC传送SQL语句到你的DBMS并处置前往的了局长短常复杂的。

  一切的代码在次要的几个DBMS产物做了测试。但是,假如你利用JDBC-ODBC桥来毗连旧版本ODBC驱动程序时,大概会碰到一些兼容性成绩。
Java的桌面程序开发在java程序员里通常叫swing开发,主要用的swing包里的类开发的,也就是通常说的c/s架构开发
若相依 该用户已被删除
沙发
发表于 2015-1-21 17:01:21 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
简单生活 该用户已被删除
板凳
发表于 2015-1-26 18:15:53 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
深爱那片海 该用户已被删除
地板
发表于 2015-2-4 17:43:16 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
变相怪杰 该用户已被删除
5#
发表于 2015-2-4 20:22:42 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
冷月葬花魂 该用户已被删除
6#
发表于 2015-2-6 11:58:47 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
第二个灵魂 该用户已被删除
7#
发表于 2015-2-12 10:20:11 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
乐观 该用户已被删除
8#
发表于 2015-2-20 10:08:50 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
灵魂腐蚀 该用户已被删除
9#
发表于 2015-3-6 16:52:48 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
只想知道 该用户已被删除
10#
发表于 2015-3-6 22:32:34 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
admin 该用户已被删除
11#
发表于 2015-3-13 22:07:20 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
海妖 该用户已被删除
12#
发表于 2015-3-15 07:21:42 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
谁可相欹 该用户已被删除
13#
发表于 2015-3-21 19:56:20 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
愤怒的大鸟 该用户已被删除
14#
发表于 2015-4-4 20:07:53 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
飘飘悠悠 该用户已被删除
15#
发表于 2015-4-6 00:11:00 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
柔情似水 该用户已被删除
16#
发表于 2015-4-11 07:16:20 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
因胸联盟 该用户已被删除
17#
发表于 2015-5-4 12:15:37 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
山那边是海 该用户已被删除
18#
发表于 2015-5-11 22:27:22 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
兰色精灵 该用户已被删除
19#
发表于 2015-5-12 09:17:58 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
小魔女 该用户已被删除
20#
发表于 2015-6-8 22:11:21 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 21:33

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表