完整java開發中JDBC連接數據庫代碼和步驟




    JDBC (Java Data Base Connectivity, java數據庫連接) 是一種用於執行SQL語句的Java API,可以爲多種關係數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準,據此可以構建更高級的工具和接口,使數據庫開發人員能夠編寫數據庫應用程序。

    儘管JDBC在JAVA語言層面實現了統一,但不同數據庫仍舊有許多差異。爲了更好地實現跨數據庫操作,於是誕生了Hibernate項目,Hibernate是對JDBC的再封裝,實現了對數據庫操作更寬泛的統一和更好的可移植性。

    創建一個以JDBC連接數據庫的程序,包含7個步驟:

    1、加載JDBC驅動程序:

          在連接數據庫之前,首先要加載想要連接數據庫的驅動到JVM(Java虛擬機),PostgreSQL數據庫的JDBC庫爲postgresql-(VERSION).jdbc.jar,具體比如postgresql-9.3-1102.jdbc4.jar,在安裝PostgreSQL 9的時候可以選擇下載安裝。

          通過java.lang.Class類的靜態方法 forName(String className) 實現。

          例如:

          Class.forName("org.postgresql.Driver");

          注意,方法裏邊單獨這麼寫Eclipse會提示如下,這是throws和throw的區別,兩種拋出異常方法都可以。

         

          採用throw(也就是Surround with try/catch)的完整語句如下     

try {
			Class.forName("org.postgresql.Driver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

           加載失敗時(比如沒有引入postgresql-(VERSION).jdbc.jar),控制檯報錯如下

<span style="color:#ff0000;">java.lang.ClassNotFoundException</span>: org.postgresql.Driver
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at jijian.test.dao.BaseDao.getConnection(BaseDao.java:10)
	at jijian.test.dao.NewStudentDao.save(NewStudentDao.java:18)
	at jijian.test.dao.test.main(test.java:17)

            成功加載後,會將Driver類的實例註冊到DriverManager類中。

    2、提供JDBC連接的URL

          連接URL定義了連接數據庫時的協議、子協議、數據源標識。

          書寫形式:協議:子協議:數據源標識

          協議:在JDBC中總是以jdbc開始

          子協議:橋連接的驅動程序

          數據源標識:標記找到數據庫來源的地址與連接端口

          例如:(PostgreSQL的連接URL)

          String url = "jdbc:postgresql://10.18.11.234:5432/itnms";

    3、創建數據庫的連接

          要連接數據庫,需要向java.sql.DriverManager請求並獲得Connection對象,該對象就代表一個數據庫的連接。

          使用DriverManager的getConnection(String url, String username, String password)方法傳入指定的欲連接的數據庫的路徑、數據庫的用戶名和密碼來獲得。

          例如:          

     String url = "jdbc:postgresql://10.18.11.234:5432/itnms";
     String username = "itnms";
     String password = "itnms";
     try {
	  Connection con = DriverManager.getConnection(url, username, password);
     } catch (SQLException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
     }

          備註:上邊的創建連接的方法可以寫爲

     public static Connection getConnection() throws ClassNotFoundException, SQLException {
	Class.forName("org.postgresql.Driver");
	String url = "jdbc:postgresql://10.18.11.234:5432/itnms";
	String username = "itnms";
	String password = "itnms";
	Connection con = DriverManager.getConnection(url, username, password);
	return con;
     }

    4、創建一個Statement

          要執行SQL語句,必須獲得java.sql.Statement實例,Statement實例分爲以下3種類型:

          1、執行靜態SQL語句。通過Statement實例實現。

          2、執行動態SQL語句。通過PreparedStatement實例實現。

          3、執行數據庫存儲過程。通過CallableStatement實例實現。

    5、執行SQL語句

          Statement接口提供了三種執行SQL語句的方法:executeQuery、executeUpdate、execute

          1、ResultSet executeQuery(String sqlString):執行查詢數據庫的SQL語句,返回一個結果集(ResultSet)對象。

          2、int executeUpdate(String sqlString):用於執行INSERT、UPDATE或DELETE語句以及SQL DDL語句,如:CREATE TABLE和DROP TABLE等。

          3、boolean execute(String sqlString):用於執行返回多個結果集、多個更新計數或二者組合的語句。

          具體實現的代碼:

     ResultSet rs = st.executeQuery("SELECT * FROM ...");
     int rows = st.executeUpdate("INSERT INTO ...");
     boolean flag = st.execute(String sql);

    6、處理結果

          兩種情況:

          1、執行更新返回的是本次操作影響到的記錄數。

          2、執行查詢返回的是一個ResultSet對象。

          ResultSet包含符合SQL語句中條件的所有行,並且它通過一套get方法提供了對這些行中數據的訪問。

          使用結果集(ResultSet)對象的訪問方法獲取數據:    

     while(rs.next()) {
	String name = rs.getString("name");
	String pass = rs.getString(1); //此方法比較高效
	//列是從左到右編號的,並且從列1開始
     }

    7、關閉JDBC對象

          操作完成以後要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲明順序相反:

          1、關閉記錄集

          2、關閉聲明

          3、關閉連接

          如下:         

     public static void close(ResultSet rs, Statement st, Connection con) throws SQLException {
	if(rs != null) {
		rs.close();
	}
	if(st != null) {
		st.close();			
	}
	if(con != null) {
		con.close();
	}
     }







       






發佈了33 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章