JDBC連接postgreSQL數據庫的步驟

JDBC連接postgreSQL數據庫的步驟

1.下載PostgreSQL JDBC驅動,通過以下鏈接下載
PostgreSQL JDBC driver : http://jdbc.postgresql.org/download.html

2.在工程中導入剛纔下載的驅動類.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);
        }
    }
}
發佈了162 篇原創文章 · 獲贊 40 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章