JDBC連接postgreSQL數據庫的步驟
1.下載PostgreSQL JDBC驅動,通過以下鏈接下載
PostgreSQL JDBC driver : http://jdbc.postgresql.org/download.html2.在工程中導入剛纔下載的驅動類.jar,注意測試是否導入成功,成功導入後運行簡單的JDBC會有通信信息
3.DBWapper類主要用於關聯數據庫,具體實現操作見代碼
import java.sql.*;
import java.io.*;
import java.util.StringTokenizer;
import java.util.Properties;
import java.util.Random;
/**
* Class <b>DBWrapper</b> contains
* wrapper routines for using JDBC
* to access the database.
*
* @author Chenyu Gao
* @version 1.0
*/
public class DBWrapper
{
private static int CONNECTION_RETRIES = 10;
private static int QUERY_RETRIES = 10;
private String dbUrl;
private String username;
private String password;
private String jdbcClassName;
private Connection dbCon;
private boolean hasError = false;
private String errorString = null;
private static DBWrapper myInstance = null;
/**
* DBWrapper constructor
*/
public DBWrapper() {}
/**
* DBWrapper conscrutor
* @param inUrl String url of database
* @param inJdbcClassName String containing name of jdbc driver
* @param inUserName String containing database username
* @param inPassWord String containing database password
*/
public DBWrapper( String inUrl, String inJdbcClassName, String inUserName, String inPassWord )
throws Exception {
dbUrl = inUrl;
jdbcClassName = inJdbcClassName;
username = inUserName;
password = inPassWord;
connect();
}
/**
* connectAsDefaultCteLibrary()
* Create a connection to the CTE library using the default connection parameters.
* @return void
*/
public void connectAsDefaultDatabase()
throws Exception {
myInstance.connect("jdbc:postgresql:Selina_",
"org.postgresql.Driver", "postgres", "2015303199");
}
/**
* closeConnections closes any currently open connections
* @return void
*/
private void closeConnections()
throws Exception {
if (dbCon!=null) {
dbCon.close();
}
}
/**
* DBWrapper Instance()
* Get a singleton instance of the DBWrapper object.
* @return DBWrapper
*/
public static DBWrapper Instance()
throws Exception {
if (myInstance == null) {
myInstance = new DBWrapper();
myInstance.connectAsDefaultDatabase();
}
return myInstance;
}
/**
* boolean connect()
* Connect to a database using the parameters supplied in the constructor.
* @return boolean
*/
private boolean connect()
throws Exception {
boolean opened = false;
Class.forName(jdbcClassName);
dbCon=DriverManager.getConnection(dbUrl,username,password);
opened=true;
// Try to open a connection the database.
return opened;
}
/**
* boolean connect()
* Connect to a JDBC datasource without using the parameters supplied in the constructor.
* @param inUrl String url of database
* @param inJdbcClassName String containing name of jdbc driver
* @param inUserName String containing database username
* @param inPassWord String containing database password
* @return boolean
*/
public boolean connect( String inUrl, String inJdbcClassName, String inUserName, String inPassWord )
throws Exception {
dbUrl = inUrl;
jdbcClassName = inJdbcClassName;
username = inUserName;
password = inPassWord;
closeConnections();
return connect();
}
/**
* ResultSet runQuery()
* Executes a query and returns a resultset.
*
* @param sqlQuery containing a SQL statement
* @return ResultSet
*/
public ResultSet runQuery( String sqlQuery )
throws Exception {
Statement statement=dbCon.createStatement();
ResultSet rs=statement.executeQuery(sqlQuery);
return rs;
}
/**
* boolean runUpdate()
* Executes an update and returns true of successfully executed.
*
* @param sqlQuery containing a SQL statement
* @return boolean
*/
public boolean runUpdate( String sqlQuery )
throws Exception {
Statement ps=dbCon.createStatement();
ps.executeUpdate(sqlQuery);
return true;
}
/**
* ResultSet runChainedQuery()
* Executes a chained mode transaction query.
*
* @param sqlQuery containing a SQL statement
* @param isolationLevel containing the isolation level to run the transaction.
* @return ResultSet
*/
public ResultSet runChainedQuery( String sqlQuery, String isolationLevel )
throws Exception {
int retry = 0;
//Create the resultset and statement object.
ResultSet resultSet = null;
Statement dbStatement = null;
// Connect to the database.
dbStatement = dbCon.createStatement();
// Retry the query until complete or timeout.
while (retry++ < QUERY_RETRIES) {
// Begin a transaction.
dbStatement.executeUpdate( "Begin Transaction" );
// Set the isolation level.
dbStatement.executeUpdate( new String( "Set Transaction Isolation level " + isolationLevel ) );
// Execute the query.
resultSet = dbStatement.executeQuery( sqlQuery );
// Commit the transaction.
dbStatement.executeUpdate( "commit" );
// Close the connection.
dbStatement.close();
break;
}
return resultSet;
}
/**
* boolean runChainedUpdate()
* Executes a chained mode transaction query.
*
* @param sqlQuery containing a series of SQL statments
* @param isolationLevel containing the isolation level to run the transaction.
* @return boolean
*/
public boolean runChainedUpdate( String [] sqlQuery, String isolationLevel )
throws Exception {
int retry = 0;
// Create the statement object.
Statement dbStatement = null;
boolean wasExecuted = false;
// Connect to the database.
dbStatement = dbCon.createStatement();
while (retry++ < QUERY_RETRIES) {
// Begin a new transaction.
try {
dbStatement.executeUpdate( "Begin Transaction" );
// Set the isolation level.
dbStatement.executeUpdate( new String( "Set Transaction Isolation level " + isolationLevel ) );
// For each sql statement, perform the update.
for( int i=0; i<sqlQuery.length; i++ ) {
dbStatement.executeUpdate( sqlQuery[i] );
}
// Commit the transaction and close.
dbStatement.executeUpdate( "commit" );
dbStatement.close();
wasExecuted = true;
} catch (Exception e) {
errorString = new String( "Error executing: " + sqlQuery + "\nCause: " + e.toString() );
hasError = true;
// Rollback if an error has occured.
dbStatement.executeUpdate( "rollback" );
dbStatement.close();
}
}
return wasExecuted;
}
}
4.接下來寫測試類測試類的具體操作一共有六步,具體見代碼註釋,第4步的函數中可以直接輸入String類型的字符串SQL語句,之後在第五步中輸出查詢結果。
注意:如果出現密碼認證失敗的問題的話,是因md5加密的結果,需要在data\pg_hba.conf文件中修改找到“# IPv4 local connections:”(不包括引號,下同)
在它上面添加“local pgsql all trust”,
在它下面的“host alsError = true;
import java.sql.*;
import java.sql.*;
public class DBConnectionTest{
public static void main(String[] args){
String url = "jdbc:postgresql:Selina_";
String username = "postgres";
String password = "2015303199";
String sql = "select sName from student";
try{
System.out.println("Step 01: Registering JDBC Driver");
/*There are three ways to registe driver.*/
//write your code here for Registering JDBC Driver
//先註冊JDBC驅動 org.postgresql.Driver
Class.forName("org.postgresql.Driver");
System.out.println("Step 02: Establishing connection to: \n\t" + url);
//write your code here to get a connection
//從DriverManager中獲得一個連接getConnection(url,username,password);
//注意:url = jdbc:postgresql:database or jdbc:postgresql://host:port/database
Connection conn=DriverManager.getConnection(url, username, password);
System.out.println("Step 03: Creating SQL statement.");
//write your code here to create a SQL statement
Statement state=conn.createStatement();
System.out.println("Step 04: Executing SQL statement.");
//write your code here to execute your SQL statement and recieve the result
ResultSet rs=state.executeQuery(sql);
System.out.println("Step 05: Printing result.");
//write your code here to print the result
while(rs.next()){
System.out.println(rs.getString("sName"));
}
System.out.println("Step 06: Closing JDBC objects.");
//write your code here to close all JDBC objects.
rs.close();
state.close();
conn.close();
System.out.println("End.");
}catch(Exception e){
System.out.println(e);
}
}
}