JDBC開發

jopen 12年前發布 | 1K 次閱讀 CSS框架

JDBC開發

  JDBCSUN公司為統一對數據庫的操作,定義的一套Java操作數據庫的規范。

 

JDBC全稱為:Java DataBase Connectivityjava數據庫連接),它主要由接口組成。

組成JDBC的2個包:

 java.sql

 javax.sql

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

 

jdbc連接數據庫的操作步驟:

    一、搭建實驗環境:

    二、編寫程序,在程序中加載數據庫驅動

    Class.forName(com.mysql.jdbc.Driver);

       DriverManager.registerDriver(Driver driver)

三、建立連接(Connection)

       Connection conn =DriverManager.getConnection(url,user,pass);

四、創建用于向數據庫發送SQLStatement對象,并發送sql

       Statement st =conn.createStatement();

       ResultSet rs = st.excuteQuery(sql);

五、從代表結果集的ResultSet中取出數據,打印到命令行窗口

六、斷開與數據庫的連接,并釋放相關資源

 

 

注意:

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

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

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

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

 

URL用于標識數據庫的位置,程序員通過URL地址告訴JDBC程序連接哪個數據庫

 

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

?        Oracle寫法:jdbc:oracle:thin:@localhost:1521:sid

?        SqlServerjdbc:microsoft:sqlserver://localhost:1433;DatabaseName=sid

?        MySqljdbc:mysql://localhost:3306/sid

Mysqlurl地址的簡寫形式: jdbc:mysql:///sid

 

常用屬性:useUnicode=true&characterEncoding=UTF-8

 

 

 

 

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

?              createStatement():創建向數據庫發送sqlstatement對象。

?              prepareStatement(sql):創建向數據庫發送預編譯sqlPrepareSatement對象。

?              prepareCall(sql):創建執行存儲過程的callableStatement對象。

?              setAutoCommit(boolean autoCommit):設置事務是否自動提交。

?              commit():在鏈接上提交事務。

?                                            rollback():在此鏈接上回滾事務。

 

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

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

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

?        executeUpdate(String sql):只能向數據庫發送insertupdatedelete語句

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

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

 

 

  Jdbc程序中的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, StatementConnection對象。

 

特別是Connection對象,它是非常稀有的資源,用完后必須馬上釋放,如果Connection不能及時、正確的關閉,極易導致系統宕機。Connection的使用原則是盡量晚創建,盡量早的釋放。

 

為確保資源釋放代碼能運行,資源釋放代碼也一定要放在finally語句中。

 

這里,有一個完整的使用JDBC進行數據庫操作的程序以便大家理解使用JDBC操作數據庫的過程:

   package csdn.java.thread;



import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;



public class JDBCDemo {



       /**

        * @param args

        */

       publicstatic void main(String[] args) {

              Connectioncon = null;

              Statementst = null;

              ResultSetrs = null;



              Stringdriver ="com.mysql.jdbc.Driver";

              Stringurl = "jdbc:mysql://localhost:3306/jdbc";

              Stringpassword ="root";

              Stringuser ="root";



              try{

                     //加載驅動

                     Class.forName(driver);



              }catch (ClassNotFoundException e) {

                     //TODO Auto-generated catch block

                     e.printStackTrace();

              }



              try{

                     //創建連接

                     con= DriverManager.getConnection(url, user, password);

                     //創建語句對象



                     st= con.createStatement();

                     //創建sql語句

                     Stringsql = "select _id,name,sex,age from users";

                     //執行語句



                     rs= st.executeQuery(sql);

                     //遍歷結果集

                     while(rs.next()){

                            intid = rs.getInt("_id");

                            Stringname = rs.getString("name");

                            Stringsex = rs.getString("sex");

                            intage = rs.getInt("age");

                            System.out.println(id+"..."+name+"..."+sex+"..."+age);

                     }

              }catch (SQLException e) {

                     //TODO Auto-generated catch block

                     e.printStackTrace();

              }finally{

                     if(!(rs==null)){

                            try{

                                   rs.close();

                            }catch (SQLException e) {

                                   //TODO Auto-generated catch block

                                   e.printStackTrace();

                            }

                     }

                     if(!(st==null)){

                            try{

                                   st.close();

                            }catch (SQLException e) {

                                   //TODO Auto-generated catch block

                                   e.printStackTrace();

                            }

                     }

                     if(!(con==null)){

                            try{

                                   con.close();

                            }catch (SQLException e) {

                                   //TODO Auto-generated catch block

                                   e.printStackTrace();

                            }

                     }



              }



       }



}

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