查看: 1057|回复: 0

JDBC 入门 -- 建立联接

[复制链接]
发表于 2009-5-27 02:07:09 | 显示全部楼层 |阅读模式
你需要做的第一事情是你与想要使用的 DBMS 建立一个连接。这包含 2 个步骤:装载驱动程序并建立连接。 <br />  装载驱动程序 <br />  装载驱动程序只需要非常简单的一行代码。例如,你想要使用 JDBC-ODBC 桥驱动程序, 可以用下列代码装载它: <br />  Class.forName(&quot;sun.jdbc.odbc.JdbcOdbcDriver&quot;); <br />  你的驱动程序文档将告诉你应该使用的类名。例如, 如果类名是 jdbc.DriverXYZ ,你将用代码以下的代码装载驱动程序: <br />  Class.forName(&quot;jdbc.DriverXYZ&quot;); <br />  你不需要创建一个驱动程序类的实例并且用 DriverManager 登记它,因为调用 Class.forName 将自动将加载驱动程序类。如果你曾自己创建实例,你将创建一个不必要的副本,但它不会带来什么坏处。 <br />  加载 Driver 类后,它们即可用来与数据库建立连接。 <br />  建立连接 <br />  第二步就是用适当的驱动程序类与 DBMS 建立一个连接。下列代码是一般的做法: <br />  Connection con = DriverManager.getConnection(url, &quot;myLogin&quot;, &quot;myPassword&quot;); <br />  这个步骤也非常简单,最难的是怎么提供 url。如果你正在使用 JDBC-ODBC 桥, JDBC URL 将以 jdbcdbc 开始:余下 URL 通常是你的数据源名字或数据库系统。因此,假设你正在使用 ODBC 存取一个叫 &quot;Fred&quot; 的 ODBC 数据源,你的 JDBC URL 是 jdbcdbc:Fred 。把 &quot;myLogin&quot; 及 &quot;myPassword&quot; 替换为你登陆 DBMS 的用户名及口令。如果你登陆数据库系统的用户名为 &quot;Fernanda&quot; 口令为 &quot;J8&quot;,只需下面的 2 行代码就可以建立一个连接: <br />  String url = &quot;jdbcdbc:Fred&quot;; <br />  Connection con = DriverManager.getConnection(url,&quot;Fernanda&quot;, &quot;J8&quot;); <br />  如果你使用的是第三方开发了的 JDBC驱动程序,文档将告诉你该使用什么 subprotocol, 就是在 JDBC URL 中放在 jdbc 后面的部分。例如, 如果驱动程序开发者注册了 acme 作为 subprotocol, JDBC URL 的第一和第二部分将是 jdbc:acme。驱动程序文档也会告诉你余下 JDBC URL 的格式。JDBC URL 最后一部分提供了定位数据库的信息。 <br />  如果你装载的驱动程序识别了提供给 DriverManager.getConnection 的 JDBC URL ,那个驱动程序将根据 JDBC URL 建立一个到指定 DBMS 的连接。正如名称所示,DriverManager 类在幕后为你管理建立连接的所有细节。除非你是正在写驱动程序,你可能无需使用此类的其它任何方法,一般程序员需要在此类中直接使用的唯一方法是 DriverManager.getConnection。 <br />  DriverManager.getConnection 方法返回一个打开的连接,你可以使用此连接创建 JDBC statements 并发送 SQL 语句到数据库。在前面的例子里,con 对象是一个打开的连接,并且我们要在以后的例子里使用它。<br /> JDBC 入门 -- 设置表 <br />  创建表 <br />  首先,我们在我们的示例数据库创建其中一张表 COFFEES,包含在咖啡店所卖咖啡的必要的信息,包括咖啡名字,他们的价格,本星期卖了多少磅及迄今为止卖的数目。关于 COFFEES 表我们以后会详细描述,如下: <br />  我们写了创建 COFFEES 表的 SQL 语句。现在我们在它外面加上引号(使它成为字符串),并且字符串赋值给变量 createTableCoffees,在以后的 JDBC 代码中我们可以使用此变量。正如看到的,DBMS 并不在意分行,但对 Java 语言来,String 对象分行是通不过编译的。因而,我们可以用加号 (+) 把每一行的串连接。 <br />  String createTableCoffees = &quot;CREATE TABLE COFFEES &quot; + <br />  &quot;(COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, &quot; + <br />  &quot;SALES INTEGER, TOTAL INTEGER)&quot;; <br />  我们在 CREATE TABLE 语句中使用的数据类型是通用的 SQL 类型(也称 JDBC 类型)它们在类 java.sql.Types 中定义。DBMSs 通常使用这些标准的类型,因此,当你要尝试一些 JDBC 应用程序时,你可以直接使用 CreateCoffees.java 应用程序,它使用了 CREATE TABLE 语句。如果你的 DBMS 使用了它的自己的本地的类型名字,我们为你供应其它的应用程序,我们将在后面详细解释。 <br />  在运用任何应用程序前,当然,我们将让你了解 JDBC 的基础。 <br />  创建 JDBC Statements 对象 <br />  Statement 对象用于把 SQL 语句发送到 DBMS 。你只须简单地创建一个 Statement 对象并且然后执行它,使用适当的方法执行你发送的 SQL 语句。对 SELECT 语句来说,可以使用 executeQuery。要创建或修改表的语句,使用的方法是 executeUpdate。 <br />  需要一个活跃的连接的来创建 Statement 对象的实例。在下面的例子中,我们使用我们的 Connection 对象 con 创建 Statement 对象 stmt: <br />  Statement stmt = con.createStatement(); <br />  到此 stmt 已经存在了,但它还没有把 SQL 语句传递到 DBMS。我们需要提供 SQL 语句作为参数提供给我们使用的 Statement 的方法。例如,在下面的代码段里,我们使用上面例子中的 SQL 语句作为 executeUpdate 的参数: <br />  stmt.executeUpdate(&quot;CREATE TABLE COFFEES &quot; + <br />  &quot;(COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, &quot; + <br />  &quot;SALES INTEGER, TOTAL INTEGER)&quot;); <br />  因为我们已经把 SQL 语句赋给了 createTableCoffees 变量,我们可以如下方式书写代码: <br />  stmt.executeUpdate(createTableCoffees); <br />  执行语句 <br />  我们使用 executeUpdate 方法是因为在 createTableCoffees 中的 SQL 语句是 DDL (数据定义语言)语句。创建表,改变表,删除表都是 DDL 语句的例子,要用 executeUpdate 方法来执行。你也可以从它的名字里看出,方法 executeUpdate 也被用于执行更新表 SQL 语句。实际上,相对于创建表来说,executeUpdate 用于更新表的时间更多,因为表只需要创建一次,但经常被更新。 <br />  被使用最多的执行 SQL 语句的方法是 executeQuery。这个方法被用来执行 SELECT 语句,它几乎是使用最多的 SQL 语句。马上你将看到如何使用这个方法。 <br />  在表中输入数据 <br />  我们已经显示了如何通过指定列名、数据类型来创建表 COFFEES,但是这仅仅建立表的结构。表还没有任何数据。我们将次输入一行数据到表中,提供每列的信息,注意插入的数据显示顺序跟表创建时候是一样的,既缺省顺序。 <br />  下列代码插入一个行数据,COF_NAME 的值为 Colombian,SUP_ID 为 101,PRICE 为 7.99,SALES 0,TOTAL 0。就象创建 COFFEES 表一样,我们创建一 Statement 对象,并执行 executeUpdate 方法。 <br />  因为 SQL 语句一行显示不下,因此我们把它分为两行,并用加号 (+) 相连。特别要注意的是,在 COFFEES 和 VALUES 之间要有空格。这个空格必须在引号之内并且要在 COFFEES 跟 VALUES 之间;没有这个空格,SQL 语句将被错误地被读作为 &quot;INSERT INTO COFFEESVALUES ...&quot;,并且 DBMS 将寻找表 COFFEESVALUES。还要注意的是在 coffee name 上我们使用了单引号。 <br />  Statement stmt = con.createStatement(); <br />  stmt.executeUpdate( <br />  &quot;INSERT INTO COFFEES &quot; + <br />  &quot;VALUES (&#39;Colombian&#39;, 101, 7.99, 0, 0)&quot;); <br />  下面的代码把第二行插入到表 COFFEES 中。我们可以在使用 Statement 对象而无须为每次执行创建一个新的。 <br />  stmt.executeUpdate(&quot;INSERT INTO COFFEES &quot; + <br />  &quot;VALUES (&#39;French_Roast&#39;, 49, 8.99, 0, 0)&quot;); <br />  剩下行的数据如下: <br />  stmt.executeUpdate(&quot;INSERT INTO COFFEES &quot; + <br />  &quot;VALUES (&#39;Espresso&#39;, 150, 9.99, 0, 0)&quot;); <br />  stmt.executeUpdate(&quot;INSERT INTO COFFEES &quot; + <br />  &quot;VALUES (&#39;Colombian_Decaf&#39;, 101, 8.99, 0, 0)&quot;); <br />  stmt.executeUpdate(&quot;INSERT INTO COFFEES &quot; + <br />  &quot;VALUES (&#39;French_Roast_Decaf&#39;, 49, 9.99, 0, 0)&quot;); <br />  从表中取得数据 <br />  既然表 COFFEES 中已经有数据了,我们就可以写一个 SELECT 语句来取得这些值。下面的 SQL 语句中星号 (*) 表示选择所有的列。因为没有用 WHERE 子句来限制所选的行,因此下面的 SQL 语句选择的是整个表。 <br />  SELECT * FROM COFFEES <br />  结果是整个表的数据,如下: <br />  COF_NAME SUP_ID PRICE SALES TOTAL <br />  --------------- ------ ----- ----- ----- <br />  Colombian 101 7.99 0 0 <br />  French_Roast 49 8.99 0 0 <br />  Espresso 150 9.99 0 0 <br />  Colombian_Decaf 101 8.99 0 0 <br />  French_Roast_Decaf 49 9.99 0 0 <br />  如果你直接在数据库系统里输入 SQL 查询语句,你将在你的终端上看到如上的结果。当我们通过一个 Java 应用程序存取一个数据库时,正如我们马上要做的一样,我们需要检索结果以便我们能使用他们。你将在下一节看到如何实现。 <br />  这是 SELECT 语句的另一个例子,这将得到咖啡及其各自每磅单价的列表。 <br />  SELECT COF_NAME, PRICE FROM COFFEES <br />  查询的结果集将具有如下形式: <br />  COF_NAME PRICE <br />  -------- ---------- ----- <br />  Colombian 7.99 <br />  French_Roast 8.99 <br />  Espresso 9.99 <br />  Colombian_Decaf 8.99 <br />  French_Roast_Decaf 9.99 <br />  上面 SELECT 语句取得了所有咖啡的名字及价格。而下面的 SELECT 语句限制那些每磅价格低于 .00 的咖啡才被选择。 <br />  SELECT COF_NAME, PRICE <br />  FROM COFFEES <br />  WHERE PRICE &lt; 9.00 <br />  结果集将具有如下形式: <br />  COF_NAME PRICE <br />  -------- ------- ----- <br />  Colombian 7.99 <br />  French_Roast 8.99 <br />  Colombian Decaf 8.99<br /><br /><blockquote class="blockquote">From: http://www.husc.cn/read.php?tid=54  Powered by PHPWind.com</blockquote>
回复

使用道具 举报

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖
关注公众号
QQ客服返回顶部