JDBC資料庫編程,jdbc編程書籍
***********************************************聲明******************************************************
原創作品,出自 “曉風殘月xj” 部落格,歡迎轉載,轉載時請務必註明出處(http://blog.csdn.net/xiaofengcanyuexj)。
由於各種原因,可能存在諸多不足,歡迎斧正!
*********************************************************************************************************
最近在自學MySQL資料庫,同時將來職場上的開發語言為Java,所以就嘗試在eclipse環境下寫個小的交易處理的資料庫程式。在這裡談談Java MySQL資料庫應用程式的開發。首先應該在本地機器上安裝MySQL資料庫,具體安裝過程見新手上路中提供的連結;然後最好安裝輔助的視覺化檢視:HeidiSQL,具體過程見HeidiSQL文中提供的連結。然互就是MySQL JDBC驅動的安裝了,在這裡提供一個連結:MySQL JDBC驅動 。
按照上述的步驟,剩下的就是應用程式的編寫,JDBC編程中相關流程是通用的,應該著重看看,在此我談談我的理解。
JDBC: Java database connection。JDBC是一組編程介面,資料庫系統的底層開發人員實現介面,Java開發人員調用JDBC提供的介面進行與資料庫的建立、連結、更新等操作。JDBC提供兩種API,分別是面向開發人員的API和面向底層的JDBC驅動程式API,底層主要通過直接的JDBC驅動和JDBC-ODBC橋驅動實現與資料庫的串連。
1)、載入資料庫驅動程式;
Class.forName(driver)//此處driver指驅動的路徑
2)、建立資料庫連接;
Connection con = DriverManager.getConnection(url, user, password);//以特定的使用者訪問指定的資料庫
3)、操作資料庫,執行SQL語句;
4)、斷開資料庫連接。
下面轉一段介紹, 完整java開發中JDBC串連資料庫代碼和步驟,在此表示感謝:
1、載入JDBC驅動程式:
在串連資料庫之前,首先要載入想要串連的資料庫的驅動到JVM(Java虛擬機器),這通過java.lang.Class類的靜態方法forName(String className)實現。
例如:
try{ //載入MySql的驅動類 Class.forName("com.mysql.jdbc.Driver") ; }catch(ClassNotFoundException e){ System.out.println("找不到驅動程式類 ,載入驅動失敗!"); e.printStackTrace() ; }
成功載入後,會將Driver類的執行個體註冊到DriverManager類中。
2、提供JDBC串連的URL
串連URL定義了串連資料庫時的協議、子協議、資料來源標識。書寫形式:協議:子協議:資料來源標識;協議:在JDBC中總是以jdbc開始;子協議:是橋串連的驅動程式或是資料庫管理系統名稱;資料來源標識:標記找到資料庫來源的地址與串連連接埠。
例如:(MySql的串連URL)
jdbc:mysql: //localhost:3306/test?useUnicode=true&characterEncoding=gbk ; useUnicode=true:表示使用Unicode字元集。如果characterEncoding設定為 gb2312或GBK,本參數必須設定為true 。characterEncoding=gbk:字元編碼方式。
3、建立資料庫的串連
要串連資料庫,需要向java.sql.DriverManager請求並獲得Connection對象,該對象就代表一個資料庫的串連。使用DriverManager的getConnectin(String url,String username,String password )方法傳入指定的欲串連的資料庫的路徑、資料庫的使用者名稱和密碼來獲得。
例如:
//串連MySql資料庫,使用者名稱和密碼都是root String url = "jdbc:mysql://localhost:3306/test" ; String username = "root" ; String password = "root" ; try{ Connection con = DriverManager.getConnection(url , username , password ) ; }catch(SQLException se){ System.out.println("資料庫連接失敗!"); se.printStackTrace() ; }
4、建立一個Statement
要執行SQL語句,必須獲得java.sql.Statement執行個體,Statement執行個體分為以下3種類型:
1)、執行靜態SQL語句。通常通過Statement執行個體實現。
2)、執行動態SQL語句。通常通過PreparedStatement執行個體實現。
3)、執行資料庫預存程序。通常通過CallableStatement執行個體實現。
具體的實現方式:
Statement stmt = con.createStatement() ; PreparedStatement pstmt = con.prepareStatement(sql) ; CallableStatement cstmt = con.prepareCall("{CALL demoSp(? , ?)}") ;
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)、execute(sqlString):用於執行返回多個結果集、多個更新計數或二者組合的語句。
具體實現的代碼:
ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ; int rows = stmt.executeUpdate("INSERT INTO ...") ; boolean flag = stmt.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)、關閉連線物件-資料庫
if(rs != null){ // 關閉記錄集 try{ rs.close() ; }catch(SQLException e){ e.printStackTrace() ; } } if(stmt != null){ // 關閉聲明 try{ stmt.close() ; }catch(SQLException e){ e.printStackTrace() ; } } if(conn != null){ // 關閉連線物件 try{ conn.close() ; }catch(SQLException e){ e.printStackTrace() ; } }
上面那段文字介紹的挺好的,還有我自己也是初學,就直接轉載了,在此表示感謝!下面貼上我的一段入門級代碼,要畢業了,馬上要工作了,想多接觸一點工作上可能用得到的JDBC資料庫開發,有沒有時間寫個很大的項目,所以就只是描述一下大致流程,見笑了!
import java.sql.*;public class JDBCDemo {public static void main(String[] args) {String user = "root";String password = "199203211410xfcy";String url = "jdbc:mysql://localhost:3306/studentdb";//建立資料庫伺服器的地址String tableName = "student_information";String driver = "com.mysql.jdbc.Driver";String sqlSentence;Connection con = null;//連線物件Statement stmt = null;//操作對象ResultSet rs = null;//查詢結果try {Class.forName(driver);//載入資料庫驅動程式Driver類con = DriverManager.getConnection(url, user, password);//資料庫連接,以特定的使用者訪問指定的資料庫stmt = con.createStatement();sqlSentence = "insert into " + tableName + " values (9,'honey',21)";stmt.executeUpdate(sqlSentence);sqlSentence = "select * from " + tableName;rs = stmt.executeQuery(sqlSentence);ResultSetMetaData rsmd = rs.getMetaData();int j = 0;j = rsmd.getColumnCount();for (int k = 0; k < j; k++) {System.out.print(rsmd.getColumnName(k + 1));System.out.print("\t");}System.out.println();while (rs.next()) {for (int i = 0; i < j; i++) {System.out.print(rs.getString(i + 1));System.out.print("\t");}System.out.println();}} catch (ClassNotFoundException e1) {System.out.println("資料庫驅動不存在!");System.out.println(e1.toString());} catch (SQLException e2) {System.out.println("資料庫存在異常!");System.out.println(e2.toString());} finally {try {if (rs != null)rs.close();if (stmt != null)stmt.close();if (con != null)con.close();} catch (SQLException e) {System.out.println(e.toString());}}}}
前提是要有一個studentdb的資料庫,和一張屬性一致的student_information表。
由於時間有限,在寫博文的過程中參考過一些文獻,在此表示感謝;同時鑒於水平原因,你難免有不足之處,歡迎斧正!