
点击“蓝字”关注我们

前言
JDBC(Java Database Connectivity) 是 java 编程语言应用程序接口,该 API 定义了客户端如何去访问数据库。同时,该 API 也是 JavaSE 提供在数据库中查询和更新数据的组成部分,主要面向关系型数据库。
PostgreSQL JDBC Driver 允许 Java 程序使用标准,独立的数据库 Java 代码来连接到 PostgreSQL 数据库。JDBC 驱动是用纯Java编写的开源程序,并使用 PostgreSQL 本地网络协议进行通信。因此,JDBC Driver 独立于平台,只要对 Java 代码进行编译,驱动程序可以在任何操作系统使用,符合 Java 一次编译,到处运行的特点。JDBC Driver for PostgreSQL 可以通过 https://jdbc.postgresql.org/download/postgresql-42.2.14.jar 网站下载。
一、JDBC for PostgreSQL 介绍
由于 Java 不支持使用 Unix 套接字通信,因此 PostgreSQL 服务器必须配置允许 TCP/IP 协议进行连接。PostgreSQL 8.0 版本开始,Jdbc 允许本地 localhost 进行TCP/IP 连接。如果需要连接到回环接口以外的其它接口,必须要修改 postgresql.conf 文件中的 listen_addresses 参数。
PostgreSQL 8.0 以前的版本默认不监听任何接口,需要设置 tcpip_socket = true 即可。
只要确认服务器进行 TCP/IP 监听配置,接下来需要配置 pg_hba.conf 文件来验证用户可以连接的数据库。客户端认证通过 pg_hba.conf 文件进行配置。关于 pg_hba.conf 的配置,请参考 PostgreSQL 文档。JDBC Driver 支持 trust ,ident,password,md5,gss 和 crypt 认证方式。
当使用 JDBC 来访问数据库,选择合适的编码非常重要。许多其它客户端接口不关心用户来回发送的数据编码,但是Java需要确认编码正确。不要使用数据库中采用 SQL_ASCII 编码的数据库。SQL_ASCII 并不是一个真正的编码,因为在该编码模式下,当用户存储不适合 7 位 ASCII 字符集的数据时,将会引发问题。建议使用 UTF-8 编码。
二、初始化驱动程序
这里为了方便开发,以 Eclipse 为加载 JDBC Driver。
2.1 在 Eclipse 中配置 JDBC Driver for PostgreSQL
打开 Eclipse,选中菜单 File ——> New ——> Project

之后会弹出选择向导,找到 java ,选择 Java Project,完成后选择 Next。

点击 Next 后,会弹出创建 java 工程向导,自己命名一个 project name,此处示例命名为 sungsasong.com,JRE 默认使用 JavaSE-1.8,Project layout 默认将源代码和 class 文件分离。

点击 Finish 将会完成一个 java project 创建。
2.2 创建一个存放 java code 和 class 文件的package
在完成 java project 创建后,在左侧栏中,点开 sungsasong.com 工程,
src——>New——>Package,然后使用默认名称,点击Finsh。


2.3 创建一个Java 源码代码文件
完成 Package 创建后,在左侧栏列表中会出现创建的Package,如果没有创建 Package,Packge 将会使用 default 名称。

然后再弹出的界面命名一个 Java Class Name,此处命名为 Pgconn,点击Finsh 即可。

2.4 加载 JDBC Driver for PostgreSQL
在Eclipse 左侧栏选中 java project sungsasong.com ,右键将会弹出如下图示,选择 Build Path——> Configure Build Path

在弹出界面选择 Java Build Path——> Add External JARS,选择已下载好的 postgresql-42.2.14 jar 驱动


之后,选择 Apply and Close 即可。

以上过程就完成了对 PostgreSQL JDBC Driver 驱动的配置。
三 、导入 JDBC
3.1 导入 java.sql.*
使用JDBC的任何源代码都需要导入 java.sql 包,用法为
package sungsasong.com;import java.sql.*;public class Pgconn {}
Java.sql.* 导入所有的 java.sql 中的方法,在实际中,根据需要来进行导入。
3.2 在代码中加载驱动
应用程序不需要显式加载 org.postgresql.Driver 类,因为 pgjdbc 驱动jar 支持 JSP(Java Service Provider)机制。当应用程序连接到 PostgreSQL(只要驱动 jar 文件在 classpath 路径上) 时,JVM 将会自动加载驱动。
不过需要注意的是,如果Java SE的版本是 1.6 之前的版本,必须要使用如下代码对驱动进行加载
java -Djdbc.drivers=org.postgresql.Driver
或者通过将驱动类名作为 JVM 参数进行传递。
java -Djdbc.drivers=org.postgresql.Driver
3.3 连接到数据库
使用 JDBC,一个 URL 代表一个数据库。在 PostgreSQL,采用如下格式:
jdbc:postgresql:databasejdbc:postgresql:/jdbc:postgresql://host/databasejdbc:postgresql://host/jdbc:postgresql://host:port/databasejdbc:postgresql://host:port/
host: 代表数据库服务器所在主机,默认host 为 localhost。如果使用IPv6 地址,需要在URL中使用闭合的方括号。如下:
jdbc:postgresql://[::1]:10001/database
port: 数据库服务器监听端口,PostgreSQL 默认 5432
database: 指定需要连接的数据库
连接到数据库,需要通过驱动管理器的DriverManager.getConnection() 方法。如下:
Connection db = DriverManager.getConnection(url, username, password);
3.4 完整代码示例
package sungsasong.com;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.sql.CallableStatement;public class Pgconn {//创建数据库连接public static Connection GetConnection(String username,String password) {String driver = "org.postgresql.Driver";String srcURL = "jdbc:postgresql://10.10.20.50:10001/postgres";Connection conn = null;try {//加载驱动Class.forName(driver).newInstance();}catch(Exception e) {e.printStackTrace();return null;}try {//创建数据库连接conn = DriverManager.getConnection(srcURL,username,password);System.out.println("连接数据库成功");}catch(Exception e) {e.printStackTrace();return null;}return conn;}//执行普通SQL语句public static void getResult(Connection conn) {Statement stmt = null;try {stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT id,name FROM tab_test;");while(rs.next()) {System.out.println(rs.getString(1).toString() + ' ' + rs.getString(2).toString());}stmt.close();}catch(Exception e) {if (stmt != null) {try {stmt.close();}catch(Exception e1) {e1.printStackTrace();}}}}//main 方法public static void main(String[] args) {Connection conn = GetConnection("postgres","postgres");getResult(conn);try {conn.close();}catch(SQLException e) {e.printStackTrace();}}}
执行结果如下:

以上就是使用 JDBC 连接到 PostgreSQL 数据库的配置。
作者:宋少华
PostgreSQL分会培训认证委员会委员、晟数科技首席技术专家、晟数学院金牌讲师、oracle 11g OCM、PostgreSQL首批PGCE。
曾服务于国家电网冀北电力有限公司建设大数据平台,为人社局和北京市卫计委构建IT基础服务,为多家银行和证券公司构建web 服务器,系统及数据库维护;具有对税务局、国家电网、银行等政府行业和民营企业的IT培训经验;为相关安全行业设计DW数据仓库模型,使用PostgreSQL,Greenplum,HUAWEIGaussDB,Vertica和Clickhouse 做数据基础服务,开发TB级数据落地程序及百TB级别数据迁移程序。

推荐阅读

2020-08-28

2020-07-07


点击“阅读原文”




