數據庫驅動、JDBC簡介及常用方法

jopen 13年前發布 | 2K 次閱讀 ActionScript

    SUN公司為統一對數據庫的操作,定義了一套Java操作數據庫的規范,稱之為JDBC。
    JDBC全稱為:Java Data Base Connectivity(java數據庫連接),它主要由接口組成。
   
組成JDBC的2個包:
    1、java.sql
 ;
    2、javax.sql

開發JDBC應用需要以上2個包的支持外,還需要導入相應JDBC的數據庫實現(即數據庫驅動)。


編寫一個程序,這個程序從user表中讀取數據,并打印在命令行窗口中。
 
一、搭建實驗環境 : 
    1、在mysql中創建一個庫,并創建user表和插入表的數據。
 
    2、新建一個Java工程,并導入數據驅動。


    二、編寫程序,在程序中加載數據庫驅動
             
Class.forName(“com.mysql.jdbc.Driver”);
 
DriverManager.registerDriver(Driver?driver)
    三、建立連接(Connection)
 

Connection conn = DriverManager.getConnection(url,user,pass);
    四、創建用于向數據庫發送SQL的Statement對象,并發送sql
 
Statement st = conn.createStatement();
 ResultSet rs = st.excuteQuery(sql);
    五、從代表結果集的ResultSet中取出數據,打印到命令行窗口
    六、斷開與數據庫的連接,并釋放相關資源
數據庫URL

URL用于標識數據庫的位置,程序員通過URL地址告訴JDBC程序連接哪個數據庫,URL的寫法為:jdbc:mysql:[]//localhost:3306/test ?參數名:參數值

常用數據庫URL地址的寫法:
Oracle寫法:

    jdbc:oracle:thin:@localhost:1521:sid

    SqlServer—jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=sid
   
MySql—jdbc:mysql://localhost:3306/sid


Mysql的url地址的簡寫形式: jdbc:mysql:///sid
常用屬性:useUnicode=true&characterEncoding=UTF-8

程序詳解—DriverManager:

Jdbc程序中的DriverManager用于加載驅動,并創建與數據庫的鏈接,這個API的常用方法:

    DriverManager.registerDriver(new Driver()),注意:在實際開發中,并不推薦采用這個方法注冊驅動。查看Driver的源代碼可以看到,如果采用此種方式,會導致驅動程序注冊兩 次,也就是在內存中會有兩個Driver對象。

    推薦方式:Class.forName(“com.mysql.jdbc.Driver”);采用此種方式不會導致驅動對象在內存中重復出現,并且采用此 種方式,程序僅僅只需要一個字符串,不需要import驅動的API,這樣可使程序不依賴具體的驅動,使程序的靈活性更高。

    DriverManager.getConnection(url, user, password),根據url獲取數據庫的鏈接。

程序詳解—Connection:

Jdbc程序中的Connection,它用于代表數據庫的鏈接,Collection是數據庫編程中最重要的一個對象,客戶端與數據庫所有交互都是通過connection對象完成的,這個對象的常用方法:
    createStatement():創建向數據庫發送sql的statement對象。

    prepareStatement(sql) :創建向數據庫發送預編譯sql的PrepareSatement對象。
    prepareCall(sql):創建執行存儲過程的callableStatement對象。

    setAutoCommit(boolean?autoCommit):設置事務是否自動提交。
   
commit() :在鏈接上提交事務。

    rollback() :在此鏈接上回滾事務。
程序詳解—Statement:

dbc程序中的Statement對象用于向數據庫發送SQL語句, Statement對象常用方法:

    execute(String sql):用于向數據庫發送任意sql語句
 

    executeQuery(String?sql) :只能向數據發送查詢語句。

    executeUpdate(String?sql):只能向數據庫發送insert、update或delete語句

    addBatch(String?sql) :把多條sql語句放到一個批處理中。

    executeBatch():向數據庫發送一批sql語句執行。

程序詳解—ResultSet:

dbc程序中的ResultSet用于代表Sql語句的執行結果。Resultset封裝執行結果時,采用的類似于表格的方式。ResultSet 對象維護了一個指向表格數據行的游標,初始的時候,游標在第一行之前,調用ResultSet.next() 方法,可以使游標指向具體的數據行,進行調用方法獲取該行的數據。
ResultSet既然用于封裝執行結果的,所以該對象提供的都是用于獲取數據的get方法:

    獲取任意類型的數據
       
getObject(int index)        getObject(string columnName)
    獲取指定類型的數據,例如:
 
getString(int index) 
 
getString(String columnName)
ResultSet還提供了對結果集進行滾動的方法:

    next():移動到下一行
    Previous():移動到前一行

    absolute(int row):移動到指定行    beforeFirst():移動resultSet的最前面。

    afterLast() :移動到resultSet的最后面。

程序詳解—釋放資源:

Jdbc程序運行完后,切記要釋放程序在運行過程中,創建的那些與數據庫進行交互的對象,這些對象通常是ResultSet, Statement和Connection對象。
特別是Connection對象,它是非常稀有的資源,用完后必須馬上釋放,如果Connection不能及時、正確的關閉,極易導致系統宕機。Connection的使用原則是盡量晚創建,盡量早的釋放。
為確保資源釋放代碼能運行,資源釋放代碼也一定要放在finally語句中。


使用JDBC對數據庫進行CRUD:

Jdbc中的statement對象用于向數據庫發送SQL語句,想完成對數據庫的增刪改查,只需要通過這個對象向數據庫發送增刪改查語句即可。
Statement對象的executeUpdate方法,用于向數據庫發送增、刪、改的sql語句,executeUpdate執行完后,將會返回一個整數(即增刪改語句導致了數據庫幾行數據發生了變化)。
Statement.executeQuery方法用于向數據庫發送查詢語句,executeQuery方法返回代表查詢結果的ResultSet對象。

CRUD操作-create

使用executeUpdate(String sql)方法完成數據添加操作,示例操作:
Statement st = conn.createStatement();

 
String sql = "insert into user(….) values(…..) ";

 
int num = st.executeUpdate(sql);

 
if(num>0){
  
System.out.println("插入成功!!!");
 
}

CRUD操作-updata

使用executeUpdate(String sql)方法完成數據修改操作,示例操作:

Statement st = conn.createStatement();

 
String sql = “update user set name=‘’ where name=‘’";

 int num = st.executeUpdate(sql);

 
if(num>0){
  
System.out.println(“修改成功!!!");
 
}

CRUD操作-delete

使用executeUpdate(String sql)方法完成數據刪除操作,示例操作:

Statement st = conn.createStatement();

 
String sql = “delete from user where id=1;

 
int num = st.executeUpdate(sql);

 
if(num>0){
  
System.out.println(“刪除成功!!!");
 
}

CRUD操作-read

使用executeQuery(String sql)方法完成數據查詢操作,示例操作:

Statement st = conn.createStatement();

 
String sql = “select * from user where id=1;

 
ResultSet rs = st.executeQuery(sql);

 
while(rs.next()){
  
//根據獲取列的數據類型,分別調用rs的相應方法
  
//映射到java對象中
 
}

 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!