本节描述如何在你的程序里装载和初始化 JDBC 驱动。
任何使用 JDBC 的源程序 都需要输入 java.sql 包,用:
import java.sql.*;
注意: 不要输入 org.postgresql 包。如果这样做,你的源码将不能编译, 因为 javac 会被你搞糊涂。
在你试图与数据库连接之前,你需要装载驱动。 有两种方法,那种更好取决于你使用的代码。
在第一种方法里,你的代码用 Class.forName() 方法明确地装载驱动。对于 PostgreSQL,你要用:
Class.forName("org.postgresql.Driver");
这样将装载驱动,并且在装载时,驱动将自动与 JDBC 注册自己。
注意: forName() 方法可能抛出一个 ClassNotFoundException,所以如果驱动不可获得时你需要捕获它。
这是最常用的方法,但是把你的代码限制于 PostgreSQL 专用。 如果你的代码以后还要访问其他数据库,并且你不想使用任何 PostgreSQL 相关的扩展, 那么还有第二种方法可用。
第二种方法把驱动做为参数在 JVM 启动时传递给它,使用 -D参数。比如:
java -Djdbc.drivers=org.postgresql.Driver example.ImageViewer
在这个例子里,JVM 将试图把驱动作为它的初始化的一部分装载。 一旦完成,启动ImageViewer。
现在这个方法更好一点,因为它允许你的代码用于其他数据库, 而不用重新编译代码。唯一要修改的东西是 URL,我们下面要提到。
最后一件事情。当你的代码试图打开一个Connection, 而你收到一个抛出的 No driver available SQLException 例外, 这可能是因为驱动不在类路径里,或者参数值不正确。
在 JDBC 里,数据库是用URL (Uniform Resource Locator)(统一资源定位器)表示的。 在 PostgreSQL里,这可以由下面几种格式之一表示:
jdbc:postgresql:database
jdbc:postgresql://host/database
jdbc:postgresql://host:port/database
参数的含义如下:
服务器的主机名。缺省是 localhost。要想声明一个 IPv6 的地址,你必须把 host 参数用方括弧包围起来,像这样:
jdbc:postgresql://[::1]:5740/accounting
服务器监听的端口号。 缺省时是PostgreSQL标准的端口号(5432)。
数据库名。
要联接(数据库),你需要从 JDBC 获取一个 Connection 实例。 要做这些,你用 DriverManager.getConnection() 方法:
Connection db = DriverManager.getConnection(url, username, password);