Java筆記03:MySQL資料庫與JDBC編程01

來源:互聯網
上載者:User

  JDBC是使用Java存取資料庫系統的標準解決方案,它將不同資料庫間各自差異API與標準SQL語句分開看待,實現資料庫無關的Java操作介面。對於開發人員而言,使用JDBC統一的API介面,專註於標準SQL 語句,就可以避免直接處理底層資料庫驅動程式與相關操作介面的差異性,而將主要精力投放於應用開發本身,從而加快開發進度。

 

1.JDBC的API介面

  JDBC規範採用介面和實現分離的思想,設計了Java資料庫編程的架構。JDBC的API提供了一組標準的Java語言中的介面和類,使用這些介面和類,Java用戶端程式可以訪問各種不同類型的資料庫。1所示。

圖1 JDBC工作原理

  其中,JDBC API由sun公司提供,定義與資料庫建立串連、執行SQL語句、處理結果的方法,這些供程式員調用的介面與類,整合在java.sql和javax.sql包中。DriverManager類的作用是載入各種不同的JDBC驅動程式。而各種資料庫的JDBC驅動程式則由不同的資料庫廠商提供,用於針對具體的資料庫產品實現JDBC API中的方法。

  在JDBC的API中主要提供了以下一些介面和類:Connection、DriverManager、Statement、 ResultSet、PreparedStatement、CallableStatement。

  其中,Connection對象代表與資料庫的串連。串連過程包括所執行的SQL語句和在該串連上所返回的結果。一個應用程式可與單個資料庫有一個或多個串連,或者可與許多資料庫有串連。 

  DriverManager類是JDBC 的管理層,作用於使用者和驅動程式之間。它跟蹤可用的驅動程式,並在資料庫和相應驅動程式之間建立串連。 

  Statement對象用於將SQL語句發送到資料庫中。實際上有三種Statement 對象,它們都作為在給定串連上執行SQL語句的包容器:Statement、PreparedStatement和 CallableStatement。 

  ResultSet包含符合SQL語句中條件的所有行,並且它通過一套get方法(這些get方法可以訪問當前行中的不同列)提供了對這些行中資料的訪問。 

  PreparedStatement執行個體包含已編譯的SQL語句。包含於 PreparedStatement 對象中的SQL語句可具有一個或多個參數。 

  CallableStatement對象為所有的DBMS提供了一種以標準形式調用已儲存過程的方法。已儲存過程儲存在資料庫中。對已儲存過程的調用是CallableStatement對象所含的內容。 

  關於JDBC API的詳細敘述可以參見《Java資料庫介面JDBC入門基礎講座 》(http://www.yesky.com/zhuanti/443/1865943.shtml),講解的非常詳細。

 

2.環境搭建

  下面簡單講講如何安裝MySQL資料庫和Navicat for MySQL工具。

  MySQL資料庫的下載和安裝可以參見《MySQL安裝圖解》(http://www.jb51.net/article/23876.htm),這裡就不再贅述了。

  Navicat for MySQL是基於Windows平台,為MySQL資料庫量身訂作的類似於MySQL的使用者管理介面工具。使用了圖形化使用者介面(GUI),可以用一種安全和更為容易的方式快速地建立、組織、存取和共用資料。 

  Navicat for MySQL的為:http://www.cr173.com/soft/26935.html

  Navicat for MySQL的安裝和使用可以參見《Navicat MySQL安裝及使用說明》(http://wenku.baidu.com/view/6938c04b2b160b4e767fcf6b.html),這裡也不再贅述了。

  運行Navicat for MySQL工具,建立一個串連到我們所安裝的MySQL資料庫的串連,這裡我建立的串連名為“myConnection”。開啟該串連,並建立一個資料庫,這裡我建立了一個名為“mydb”的資料庫。在該資料庫中,我們建立了一張名為“userinfo”的表。

  做好這一切之後,我們就可以對這張表進行設計了,設計的目的在於指定資料的儲存結構。這這張表中我們儲存了id、username、password三項內容。設計好的表2所示。

圖2 表的設計

 

3.使用JDBC訪問MySQL資料庫

  使用JDBC訪問資料庫的一般步驟如下:

3.1載入JDBC驅動程式

  不同的資料庫對應著不同的驅動程式,要使用JDBC API訪問MySQL資料庫,需要在工程的libs目錄下匯入MySQL資料庫的驅動包mysql-connector-java-5.1.7-bin。

  不同資料庫廠商的驅動類名不同,具體為:

  Oracle10g:oracle.jdbc.driver.OracleDriver

  MySQL5:com.mysql.jdbc.Driver

  SQLServer2005:com.microsoft.sqlserver.jdbc.SQLServerDriver

3.2提供串連參數

  不同資料庫產品的串連URL不同,具體為:

  Oracle10g:jdbc:oracle:thin:@主機名稱:連接埠:資料庫SID

比如:jdbc:oracle:thin:@localhost:1521:ORCL

  MySQL5:jdbc:mysql://主機名稱:連接埠/資料庫名

比如:jdbc:mysql://localhost:3306/test

  SQLServer2005:jdbc:sqlserver://主機名稱:連接埠:DatabaseName=庫名

比如:jdbc:sqlserver://localhost:1433:DatabaseName=BookDB

  在使用JDBC訪問資料庫時,提供的串連參數除了資料庫的URL之外,還有兩個參數:資料庫的使用者名稱和資料庫的密碼。

3.3建立一個資料庫的串連

  Connection 對象是資料庫連接的具體執行個體,一個Connection 對象就代表一個資料庫連接,可以使用 DriverManager 的getConneciton()方法傳入指定資料庫的串連URL、使用者名稱和密碼。

  從DriverManager中獲得Connection對象,驅動程式會自動通過DriverManager.registerDriver() 方法註冊,這樣DriverManager就可以跟廠商的驅動程式通訊了。

  在串連資料庫時,需要檢測異常對象java.sql.SQLException。

  建立資料庫連接的具體實現方法如下:

 1   private final String USERNAME = "root";                     //定義資料庫的使用者名稱 2     private final String PASSWORD = "******";                 //定義資料庫的密碼 3     private final String DRIVER = "com.mysql.jdbc.Driver";            //定義資料庫的驅動資訊 4     private final String URL = "jdbc:mysql://localhost:3306/mydb";    //定義訪問資料庫的地址 5      6   /* 7      * Function  :    擷取資料庫連接 8      * Author    :    部落格園-依舊淡然 9      */10     public Connection getConnection() {11         try {12             mConnection = DriverManager.getConnection(URL, USERNAME, PASSWORD);13         } catch (Exception e) {14             System.out.println("串連資料庫失敗!");15         }16         return mConnection;17     }

3.4建立一個Statement對象

  PreparedStatement對象用於執行動態SQL語句。SQL中會變動的部分可以使用?作為參數預留位置。

3.5執行SQL語句

  對資料庫的常用操作有添加、刪除以及修改。有時我們還需要對資料庫表中的資訊進行查詢,這時我們可以使用如下方法來實現:

 1   /* 2      * Function  :    查詢返回單條記錄 3      * Author    :    部落格園-依舊淡然 4      */ 5     public Map<String, Object> findSimpleResult(String sql, List<Object> params) 6             throws SQLException { 7         Map<String, Object> map = new HashMap<String, Object>(); 8         int index = 1; 9         mPreparedStatement = mConnection.prepareStatement(sql);10         if((params != null) && (!params.isEmpty())) {11             for(int i = 0; i < params.size(); i++) {12                 mPreparedStatement.setObject(index++, params.get(i));13             }14         }15         mResultSet = mPreparedStatement.executeQuery();            //返回查詢結果16         ResultSetMetaData resultSetMateData = mResultSet.getMetaData();        //獲得列的相關資訊17         int cols_len = resultSetMateData.getColumnCount();            //獲得列的長度18         while(mResultSet.next()) {19             for(int i = 0; i < cols_len; i++) {20                 String cols_name = resultSetMateData.getColumnName(i+1) ;21                 Object cols_value = mResultSet.getObject(cols_name);22                 if(cols_value == null) {23                     cols_value = "";24                 }25                 map.put(cols_name, cols_value);26             }27         }28         return map;29     }

3.6處理結果

  通過以上幾個步驟已經實現了對資料庫的訪問,在這一步就可以對訪問到的資料進行處理了。

3.7關閉串連

  在操作完成後要把所使用的JDBC對象全都關閉,以釋放JDBC資源。具體的實現方法如下:

 1   /* 2      * Function  :    中斷連線 3      * Author    :    部落格園-依舊淡然 4      */ 5     public void releaseConnection() { 6         if(mResultSet != null) {                //關閉ResultSet對象 7             try { 8                 mResultSet.close(); 9             } catch (SQLException e) {10                 e.printStackTrace();11             }12         }13         if(mPreparedStatement != null) {        //關閉PreparedStatement對象14             try {15                 mPreparedStatement.close();16             } catch (SQLException e) {17                 e.printStackTrace();18             }19         }20         if(mConnection != null) {            //關閉Connection對象21             try {22                 mConnection.close();23             } catch (SQLException e) {24                 e.printStackTrace();25             }26         }27     }

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.