PostgreSQL JDBC là một Opensource driver phổ biến dùng để kết nối tới PostgreSQL. Khác với các driver khác như psql, psqlODBC, PHP, python của PostgreSQL. JDBC sử dụng protocol mở rộng (Extended Protocol) để trao đổi dữ liệu với server process.
PostgreSQL sử dụng protocol dựa vào messages để trao đổi dữ liệu. Có 2 loại protocol trao đổi dữ liệu giữa client và server. Protocol mở rộng (Extended Protocol) và Protocol giản đơn (Simple Protocol). Khác với Protocol giản đơn, Protocol mở rộng sử dụng nhiều công đoạn trao đổi messages giữa client và server để truyền tải dữ liệu. Việc này giúp PostgreSQL có thể tái sử dụng những thao tác xử lý dữ liệu (ví dụ như thao tác parse query), tăng hiệu năng cho hệ thống.
Hơi khác với PostgreSQL là sử dụng mailing list, PostgreSQL JDBC phát triển hầu hết dựa vào các tính năng của github như pull request, tạo Issues,..
Dưới đây là một tutorial ngắn về cách sử dụng PostgreSQL JDBC Driver.
Chuẩn bị JDK Nếu môi trường của bạn chưa cài đặt JDK, có để download tại: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Môi trường OS mình sử dụng phiên bản JDK 8.
Download PostgreSQL JDBC Driver Download PostgreSQL JDBC Driver phiên bản mới nhất từ: https://jdbc.postgresql.org/download.html.
Ở đây mình sử dụng phiên bản 42.2.2 JDBC 42
Tạo java program Tạo source file java như bên dưới.
Program này đơn giản thực hiện các thao tác như bên dưới.
import java.sql.*;
public class testpg {
public static void main(String[] args) throws SQLException {
String host="localhost";
String port="5432";
String dbname="postgres";
String user="postgres";
String pass="postgres";
String dburl = "jdbc:postgresql://"+host+":"+port+"/"+dbname+"?loggerLevel=OFF";
Connection conn = null;
Statement stmt = null;
PreparedStatement pstmt = null;
ResultSet ret = null;
try{
conn = DriverManager.getConnection(dburl, user, pass);
// prepare query to get oid from relation name
pstmt = conn.prepareStatement("select oid,relname from pg_class where relname = ?;");
stmt = conn.createStatement();
stmt.executeUpdate("drop table if exists testpg_db;");
stmt.executeUpdate("create temp table testpg_db as select generate_series(1,5) as id;");
// test prepareStatement
pstmt.setString(1,"testpg_db");
ret = pstmt.executeQuery();
while(ret.next()){
System.out.println("relation name: "+ret.getString("relname") + ", oid: "+ret.getInt("oid"));
}
ret.close();
// test Statement
ret = stmt.executeQuery("select id from testpg_db");
while(ret.next()) {
System.out.println("value: "+ret.getInt("id"));
}
System.out.println("done.");
}catch(SQLException ex){
ex.printStackTrace();
}finally {
if (ret != null) {
ret.close();
}
if (stmt != null) {
stmt.close();
}
if (pstmt != null) {
pstmt.close();
}
if (conn != null) {
conn.close();
}
}
}
}
> ls
postgresql-42.2.1.jar testpg.java
> set CLASSPATH=.;.\postgresql-42.2.1.jar
> javac testpg.java
> java testpg
relation name: testpg_db, oid: 242713
value: 1
value: 2
value: 3
value: 4
value: 5
done.
Facebook Comments Box