JDBC 入门 -- 建立联接
你需要做的第一事情是你与想要使用的 DBMS 建立一个连接。这包含 2 个步骤:装载驱动程序并建立连接。 <br /> 装载驱动程序 <br /> 装载驱动程序只需要非常简单的一行代码。例如,你想要使用 JDBC-ODBC 桥驱动程序, 可以用下列代码装载它: <br /> Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); <br /> 你的驱动程序文档将告诉你应该使用的类名。例如, 如果类名是 jdbc.DriverXYZ ,你将用代码以下的代码装载驱动程序: <br /> Class.forName("jdbc.DriverXYZ"); <br /> 你不需要创建一个驱动程序类的实例并且用 DriverManager 登记它,因为调用 Class.forName 将自动将加载驱动程序类。如果你曾自己创建实例,你将创建一个不必要的副本,但它不会带来什么坏处。 <br /> 加载 Driver 类后,它们即可用来与数据库建立连接。 <br /> 建立连接 <br /> 第二步就是用适当的驱动程序类与 DBMS 建立一个连接。下列代码是一般的做法: <br /> Connection con = DriverManager.getConnection(url, "myLogin", "myPassword"); <br /> 这个步骤也非常简单,最难的是怎么提供 url。如果你正在使用 JDBC-ODBC 桥, JDBC URL 将以 jdbc:odbc 开始:余下 URL 通常是你的数据源名字或数据库系统。因此,假设你正在使用 ODBC 存取一个叫 "Fred" 的 ODBC 数据源,你的 JDBC URL 是 jdbc:odbc:Fred 。把 "myLogin" 及 "myPassword" 替换为你登陆 DBMS 的用户名及口令。如果你登陆数据库系统的用户名为 "Fernanda" 口令为 "J8",只需下面的 2 行代码就可以建立一个连接: <br /> String url = "jdbc:odbc:Fred"; <br /> Connection con = DriverManager.getConnection(url,"Fernanda", "J8"); <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 = "CREATE TABLE COFFEES " + <br /> "(COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, " + <br /> "SALES INTEGER, TOTAL INTEGER)"; <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("CREATE TABLE COFFEES " + <br /> "(COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, " + <br /> "SALES INTEGER, TOTAL INTEGER)"); <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 语句将被错误地被读作为 "INSERT INTO COFFEESVALUES ...",并且 DBMS 将寻找表 COFFEESVALUES。还要注意的是在 coffee name 上我们使用了单引号。 <br /> Statement stmt = con.createStatement(); <br /> stmt.executeUpdate( <br /> "INSERT INTO COFFEES " + <br /> "VALUES ('Colombian', 101, 7.99, 0, 0)"); <br /> 下面的代码把第二行插入到表 COFFEES 中。我们可以在使用 Statement 对象而无须为每次执行创建一个新的。 <br /> stmt.executeUpdate("INSERT INTO COFFEES " + <br /> "VALUES ('French_Roast', 49, 8.99, 0, 0)"); <br /> 剩下行的数据如下: <br /> stmt.executeUpdate("INSERT INTO COFFEES " + <br /> "VALUES ('Espresso', 150, 9.99, 0, 0)"); <br /> stmt.executeUpdate("INSERT INTO COFFEES " + <br /> "VALUES ('Colombian_Decaf', 101, 8.99, 0, 0)"); <br /> stmt.executeUpdate("INSERT INTO COFFEES " + <br /> "VALUES ('French_Roast_Decaf', 49, 9.99, 0, 0)"); <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 < 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=54Powered by PHPWind.com</blockquote>
页:
[1]