如何通过JDBC连接PostgreSQL数据库
通过JDBC连接实例的方式有无需下载SSL证书连接和用户下载SSL证书连接两种,其中使用SSL证书连接通过了加密功能,具有更高的安全性。
前提条件
用户需要具备以下技能:
- 熟悉计算机基础知识。
- 了解java编程语言。
- 了解JDBC基础知识。
驱动获取及使用
- JDBC驱动下载地址:https://jdbc.postgresql.org/download.html
- JDBC接口使用指南请参考:https://jdbc.postgresql.org/documentation/head/index.html
使用SSL证书连接
该方式属于SSL连接模式,需要下载SSL证书,通过证书校验并连接数据库。
您可以在“实例管理”页面,单击实例名称进入“基本信息”页面,单击“数据库信息”模块“SSL”处的,下载根证书或捆绑包。
- 通过JDBC连接PostgreSQL数据库,代码中的JDBC链接格式如下:
jdbc:postgresql://<instance_ip>:<instance_port>/<database_name>?sslmode=verify-full&sslrootcert=<ca.pem>
表1 参数说明 参数
说明
<instance_ip>
如果通过弹性云服务器连接,“instance_ip”是主机IP,即“基本信息”页面该实例的“内网地址”。
如果通过连接了公网的设备访问,“instance_ip”为该实例已绑定的“弹性公网IP”。
<instance_port>
端口,默认5432,当前端口,参考“基本信息”页面该实例的“数据库端口”。
<database_name>
数据库名,即需要连接的数据库名(默认的管理数据库是postgres)。
sslmode
ssl连接模式,默认全认证模式。
sslrootcert
ssl连接CA证书路径,该文件需放在执行该命令的路径下。
连接PostgreSQL数据库的java代码,可参考以下示例:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class MyConnTest { final public static void main(String[] args) { Connection conn = null; // set sslmode here. // with ssl certificate and path. String url = "jdbc:postgresql://192.168.0.225:5432/my_db_test?sslmode=verify-full&sslrootcert=/home/Ruby/ca.pem"; try { Class.forName("org.postgresql.Driver"); conn = DriverManager.getConnection(url, "root", "password"); System.out.println("Database connected"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM mytable WHERE columnfoo = 500"); while (rs.next()) { System.out.println(rs.getString(1)); } rs.close(); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); System.out.println("Test failed"); } finally { // release resource .... } } }
无证书连接
该方式属于SSL连接模式,但不对服务端进行证书校验,用户无需下载SSL证书。
- 通过JDBC连接RDS PostgreSQL数据库实例,代码中的JDBC链接格式如下:
jdbc:postgresql://<instance_ip>:<instance_port>/<database_name>?sslmode=disable
表2 参数说明 参数
说明
<instance_ip>
如果通过弹性云服务器连接,“instance_ip”是主机IP,即“基本信息”页面该实例的“内网地址”。
如果通过连接了公网的设备访问,“instance_ip”为该实例已绑定的“弹性公网IP”。
<instance_port>
端口,默认5432,当前端口,参考“基本信息”页面该实例的“数据库端口”。
<database_name>
数据库名,即需要连接的数据库名(默认的管理数据库是postgres)。
sslmode
ssl连接模式,disable模式表示不进行数据加密。
连接PostgreSQL数据库的java代码,可参考以下示例:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class MyConnTest { final public static void main(String[] args) { Connection conn = null; // set sslmode here. // no ssl certificate, so do not specify path. String url = "jdbc:postgresql://192.168.0.225:5432/my_db_test?sslmode=disable"; try { Class.forName("org.postgresql.Driver"); conn = DriverManager.getConnection(url, "root", "password"); System.out.println("Database connected"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM mytable WHERE columnfoo = 500"); while (rs.next()) { System.out.println(rs.getString(1)); } rs.close(); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); System.out.println("Test failed"); } finally { // release resource .... } } }