PostgreSQL7.0手册-接口-58. JDBC 接口
第五十八章. JDBC 接口
内容
制作 JDBC 接口
为 JDBC准备数据库
使用驱动
装入 JDBC
装载驱动
与数据库联接
发出查询和处理结果
执行更新
关闭联接
使用大对象
Postgres 对 JDBC API的扩展
深入阅读
作者:由 Peter T. Mount 执笔,他是JDBC 驱动的作者.
JDBC 是 Java 1.1 及以后的核心 API.它为 SQL 兼容的数据库提供了一个标准的接口集合.
Postgres 提供了类型 4JDBC 驱动.类型 4 表明该驱动是用纯 Java 书写的,并且与数据库之间使用数据库自己的网络协议通讯.因此,驱动是平台无关的.一旦编译,该驱动可以用于任意平台.
制作 JDBC 接口
编译驱动
驱动的源代码位于源码树的 src/interfaces/jdbc 目录.要编译之,你只需要进入该目录,然后键入:
% make
编译完成后,你将在当前目录发现文件 postgresql.jar.这就是 JDBC 驱动.
注意:你必须使用 make,而不是 javac,因为驱动因为性能原因使用了一些动态联接技巧,这些是 javac 办不到的.Makefile 将生成 jar 归档文件.
安装驱动
要使用驱动,.jar 文件 postgresql.jar 需要被包含在 CLASSPATH 里.
例子
我有一个使用 JDBC 驱动的应用,该应用访问一个包含天文对象的大数据库.我已经有这个应用并且 jdbc 驱动安装在 /usr/local/lib 目录,并且 java jdk 安装在 /usr/local/jdk1.1.6.
要运行应用,我可以用:
export CLASSPATH = /usr/local/lib/finder.jar:/usr/local/lib/postgresql.jar:.
java uk.org.retep.finder.Main
装载驱动在本章后面部分介绍.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
为 JDBC 准备数据库
因为 Java 只能使用 TCP/IP 联接,Postgres 的 postmaster 必须带 -i 参数运行.
同样,必须配置 pg_hba.conf 文件.它放在 PGDATA 目录.缺省安装时,这个文件只允许 UNIX 域套接字访问.对联到同样 localhost 的JDBC 驱动(应用),你需要加一些象:
host all 127.0.0.1 255.255.255.255 password
的东西(到 pg_hba.conf 文件),这里允许从本地 JDBC 对所有数据库的访问.
JDBC 驱动支持 trust,ident,password 和 crypt 认证模式.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
使用驱动
本章并不想作为完整的 JDBC 编程的指导,但应该能帮你走出第一步.更多信息请参考标准 JDBCAPI 文档.同样,读一下包含在源代码里的例子.其中的基本例子在这里使用.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
装入 JDBC
任何使用 JDBC 的程序需要输入 java.sql 包,用:
import java.sql.*;
关键:不要输入 postgresql 包.如果这样做,你的源码将不能编译,因为 javac 会被你搞糊涂。
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
装载驱动
在你试图与数据库连接之前,你需要装载驱动.有两种方法,那种更好取决于你使用的代码.
在第一种方法里,你的代码用 Class.forName() 方法显式装载驱动.对于 Postgres,你要用:
Class.forName("postgresql.Driver");
这样将装载驱动,并且在装载时,驱动将自动与 JDBC 注册自己.
注意:forName() 方法可以抛出一个 ClassNotFoundException,所以如果驱动不可获得时你需要捕获它.
这是最常用的方法,但是把你的代码限制于 Postgres 专用.如果你的代码以后还要访问其他数据库,并且你不想使用我们的扩展,那么第二种方法可用.
第二种方法把驱动做为参数在 JVM 启动时传递给它,使用 -D 参数.
% java -Djdbc.drivers=postgresql.Driver example.ImageViewer
在这个例子里,JVM 将试图把驱动作为它的初始化的一部分装载.一旦完成,启动 ImageViewer。
现在,这个方法是一个更好的手段,因为它允许你的代码用于其他数据库,而不用重新编译代码.唯一要修改的东西是 URL,我们下面要提到.
最后一件事情.当你的代码试图打开一个联接,而且你收到一个抛出的 No driver available SQLException 例外,这可能是因为驱动不在 classpath (类路径)里,或者参数值不正确.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
与数据库联接
在 JDBC 里,数据库是用 URL (Uniform Resource Locator)(统一资源定位器)表示的.在 Postgres 里,这可以由下面几种格式之一表示:
jdbc:postgresql:database
jdbc:postgresql://host/database
jdbc:postgresql://hostport/database
这里:
host
服务器的主机名.缺省是 "localhost".
port
服务器监听的端口号.缺省时是 Postgres 标准的端口号(5432).
database
数据库名.
要联接(数据库),你需要从 JDBC 获取一个联接实例(Connection instance).要做这些,你要使用 DriverManager.getConnection() 方法:
Connection db = DriverManager.getConnection(url,user,pwd);
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
发出查询和处理结果
在任何你想向数据库运行一个 SQL 语句的时候,你都需要一个 Statement (语句)实例.一旦你拥有了一个 Statement (语句),你就可以使用 executeQuery() 方法来运行一个查
内容
制作 JDBC 接口
为 JDBC准备数据库
使用驱动
装入 JDBC
装载驱动
与数据库联接
发出查询和处理结果
执行更新
关闭联接
使用大对象
Postgres 对 JDBC API的扩展
深入阅读
作者:由 Peter T. Mount 执笔,他是JDBC 驱动的作者.
JDBC 是 Java 1.1 及以后的核心 API.它为 SQL 兼容的数据库提供了一个标准的接口集合.
Postgres 提供了类型 4JDBC 驱动.类型 4 表明该驱动是用纯 Java 书写的,并且与数据库之间使用数据库自己的网络协议通讯.因此,驱动是平台无关的.一旦编译,该驱动可以用于任意平台.
制作 JDBC 接口
编译驱动
驱动的源代码位于源码树的 src/interfaces/jdbc 目录.要编译之,你只需要进入该目录,然后键入:
% make
编译完成后,你将在当前目录发现文件 postgresql.jar.这就是 JDBC 驱动.
注意:你必须使用 make,而不是 javac,因为驱动因为性能原因使用了一些动态联接技巧,这些是 javac 办不到的.Makefile 将生成 jar 归档文件.
安装驱动
要使用驱动,.jar 文件 postgresql.jar 需要被包含在 CLASSPATH 里.
例子
我有一个使用 JDBC 驱动的应用,该应用访问一个包含天文对象的大数据库.我已经有这个应用并且 jdbc 驱动安装在 /usr/local/lib 目录,并且 java jdk 安装在 /usr/local/jdk1.1.6.
要运行应用,我可以用:
export CLASSPATH = /usr/local/lib/finder.jar:/usr/local/lib/postgresql.jar:.
java uk.org.retep.finder.Main
装载驱动在本章后面部分介绍.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
为 JDBC 准备数据库
因为 Java 只能使用 TCP/IP 联接,Postgres 的 postmaster 必须带 -i 参数运行.
同样,必须配置 pg_hba.conf 文件.它放在 PGDATA 目录.缺省安装时,这个文件只允许 UNIX 域套接字访问.对联到同样 localhost 的JDBC 驱动(应用),你需要加一些象:
host all 127.0.0.1 255.255.255.255 password
的东西(到 pg_hba.conf 文件),这里允许从本地 JDBC 对所有数据库的访问.
JDBC 驱动支持 trust,ident,password 和 crypt 认证模式.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
使用驱动
本章并不想作为完整的 JDBC 编程的指导,但应该能帮你走出第一步.更多信息请参考标准 JDBCAPI 文档.同样,读一下包含在源代码里的例子.其中的基本例子在这里使用.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
装入 JDBC
任何使用 JDBC 的程序需要输入 java.sql 包,用:
import java.sql.*;
关键:不要输入 postgresql 包.如果这样做,你的源码将不能编译,因为 javac 会被你搞糊涂。
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
装载驱动
在你试图与数据库连接之前,你需要装载驱动.有两种方法,那种更好取决于你使用的代码.
在第一种方法里,你的代码用 Class.forName() 方法显式装载驱动.对于 Postgres,你要用:
Class.forName("postgresql.Driver");
这样将装载驱动,并且在装载时,驱动将自动与 JDBC 注册自己.
注意:forName() 方法可以抛出一个 ClassNotFoundException,所以如果驱动不可获得时你需要捕获它.
这是最常用的方法,但是把你的代码限制于 Postgres 专用.如果你的代码以后还要访问其他数据库,并且你不想使用我们的扩展,那么第二种方法可用.
第二种方法把驱动做为参数在 JVM 启动时传递给它,使用 -D 参数.
% java -Djdbc.drivers=postgresql.Driver example.ImageViewer
在这个例子里,JVM 将试图把驱动作为它的初始化的一部分装载.一旦完成,启动 ImageViewer。
现在,这个方法是一个更好的手段,因为它允许你的代码用于其他数据库,而不用重新编译代码.唯一要修改的东西是 URL,我们下面要提到.
最后一件事情.当你的代码试图打开一个联接,而且你收到一个抛出的 No driver available SQLException 例外,这可能是因为驱动不在 classpath (类路径)里,或者参数值不正确.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
与数据库联接
在 JDBC 里,数据库是用 URL (Uniform Resource Locator)(统一资源定位器)表示的.在 Postgres 里,这可以由下面几种格式之一表示:
jdbc:postgresql:database
jdbc:postgresql://host/database
jdbc:postgresql://hostport/database
这里:
host
服务器的主机名.缺省是 "localhost".
port
服务器监听的端口号.缺省时是 Postgres 标准的端口号(5432).
database
数据库名.
要联接(数据库),你需要从 JDBC 获取一个联接实例(Connection instance).要做这些,你要使用 DriverManager.getConnection() 方法:
Connection db = DriverManager.getConnection(url,user,pwd);
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
发出查询和处理结果
在任何你想向数据库运行一个 SQL 语句的时候,你都需要一个 Statement (语句)实例.一旦你拥有了一个 Statement (语句),你就可以使用 executeQuery() 方法来运行一个查

