JDBC

1、jdbc介紹java

  1. jdbc全稱:java數據庫鏈接(Java Database Connectivity),是sun公司定義的一套訪問數據庫的規範(接口和類,由各類數據庫公司進行實現),主要放在java.sql.*和javax.sql.*這兩個包中。
  2. jdbc開發須要引入java.sql.*、javax.sql.*以及相應的JDBC數據庫實現jar包。

2、一個簡單的jdbc程序的實現步驟(分別給出三種數據庫操做例子)mysql

  1. 步驟            

                第一步:引入須要的包;sql

                 如java.sql.*,javax.sql.*;數據庫

                 第二步:加載驅動;安全

                 Class.forName(String className);oracle

                  注:另外一種方法是:DriverManager.registerDriver(new 驅動類名()(如OracleDriver()));在實際開發中不推薦這種方法,這種方法會致使驅動程序加載兩次,效率不高sqlserver

                 第三步:獲得與數據庫的鏈接;this

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

                  注:根據url獲取數據庫的鏈接,user是登錄數據庫的用戶名,password是登錄密碼spa

                  數據庫url詳解:url的寫法爲: localhost能夠用指向本地機的回送地址127.0.0.1代替

                  經常使用數據庫url地址的寫法:

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

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

                               MySQL——jdbc:mysql://localhost:3306/sid

                 第四步:建立發送sql語句的對象;

                  Statement statement=conn.createStatement();

                  注:

                  有三種類可用:

                  ①Statement:這個類是最原始最普通的,能夠實現crud操做,但在查詢操做中可能會出現注入漏洞;

                  ②PrepareStatement:能夠對sql語句進行預處理,能夠使用其提供的set方法防止注入漏洞,安全性和可靠性比較高;

                  ③CallableStatement:用於調用存儲過程;

                  第五步:經過statement向數據庫發送sql語句;

                 statement.executeUpdate(String sql);  //executeUpdate()用於執行INSERT、UPDATE、DELETE語句或DDL語句,會返回一個結果表明該sql語句影響的行數

                 statement.executeQuery(String sql); //executeQuery()用於執行SELECT語句,會返回一個結果集ResultSet,須要對結構進行處理

                  第六步:斷開與數據庫的鏈接,並釋放相關資源(              注:整個數據庫處理語句會拋異常因此用try catch塊包起來,關閉鏈接的語句寫在塊後面的finally塊中

  2.  下面給出幾段簡單的程序例子:

    複製代碼
     1 /**  2  * 演示如何使用jdbc和Oracle數據庫進行鏈接  3 */  4 package com.oracle.demos;  5 import java.sql.*;  6  7 import javax.sql.rowset.JdbcRowSet;  8 public class Demo1 {  9 10 public static void main(String[] args) { 11 12 Connection conn=null; 13 Statement statement=null; 14 try { 15 Class.forName("oracle.jdbc.driver.OracleDriver"); 16 conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger"); 17 statement=conn.createStatement(); 18 String sql=""; 19 int n=statement.executeUpdate(sql); 20 21 } catch (Exception e) { 22  e.printStackTrace(); 23 // TODO: handle exception 24 }finally{ 25 try { 26 if(statement!=null){ 27  statement.close(); 28  } 29 if(conn!=null){ 30  conn.close(); 31  } 32 } catch (Exception e2) { 33  e2.printStackTrace(); 34 // TODO: handle exception 35  } 36  } 37 }
    複製代碼

     

3、重要知識點

  1. Connection接口

    其引用對象用於表明數據庫的鏈接,客戶端與數據庫全部交互都是經過connection對象完成的,這個對象的經常使用方法有:

    ①createStatement();建立向數據庫發送sql語句的statement對象;

    ②prepareStatement(String sql);建立向數據庫發送預編譯sql語句的PrepareStatement對象;

    ③prepareCall(String sql);建立執行存儲過程的callableStatement對象;

    ④setAutoCommit(boolean autoCommit);設置事務是否自動提交,默認爲true;

    ⑤commit();在此鏈接上提交事務;

    ⑥rollback();在此鏈接上回滾事務;

    注:當有多個dml操做同時執行,將這些操做看作一個總體進行提交,這個時候就須要將setAutoCommit設置爲false,在執行commit()語句時進行統一提交,這樣若是出了錯誤能夠總體回滾;

    具體實現代碼:

    複製代碼
     1 package com.oracle.demos;  2 import java.sql.*;  3  4 import javax.sql.rowset.JdbcRowSet;  5 public class Demo1 {  6  7 public static void main(String[] args) {  8  9 Connection conn=null; 10 Statement statement=null; 11 try { 12 Class.forName("oracle.jdbc.driver.OracleDriver"); 13 conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger"); 14 //把事務設爲不自動提交 15 conn.setAutoCommit(false); 16 statement=conn.createStatement(); 17 String sql1=""; 18 String sql2=""; 19  statement.executeUpdate(sql1); 20  statement.executeUpdate(sql2); 21 //提交全部事務 22  conn.commit(); 23 } catch (Exception e) { 24  e.printStackTrace(); 25 try { 26 //任何sql語句出錯,能夠總體回滾 27  conn.rollback(); 28 } catch (SQLException e1) { 29  e1.printStackTrace(); 30  } 31 }finally{ 32 try { 33 if(statement!=null){ 34  statement.close(); 35  } 36 if(conn!=null){ 37  conn.close(); 38  } 39 } catch (Exception e2) { 40  e2.printStackTrace(); 41  } 42  } 43  } 44 45 }
    複製代碼

    System.out.println(接口引用的某個類實例);將輸出類的全名,該方法用於查看某個接口引用指向的真正對象實例的類型是什麼。如上面的程序中執行System.out.println(conn)則輸出對象數據庫公司(Oracle)提供的實現Connection這個接口的類的類名。

     

  2. ResultSet

    用於表明sql語句的執行結果集的數據表,一般經過執行查詢語句生成,ResultSet封裝執行結果時,採用的相似於表格的方式ResultSet對象維護了一個指向表格數據行的遊標,初始的時候,遊標在第一行以前,調用ResultSet接口的next()方法能夠移動遊標循環取出全部數據。

    ResultSet經常使用方法有:
    ①next();移動到下一行
    ②previous();移動到前一行
    ③absolute(int row);移動到指定行[row從1開始計算]
    ④beforeFirst();移動到resultSet的最前面
    ⑤afterLast();移動到resultSet的最後面

    next()方法:將光標從當前位置向前移一行。ResultSet光標最初位於第一行以前;第一次調用next()方法使第一行成爲當前行,第二次調用使第二行成爲當前行,一次類推若是新的當前行有效,則返回true,若是不存在下一行,則返回false。

    獲取數據的get方法:①獲取任意類型的數據,getObject(int index)或getObject(String columnName)
                                    ②獲取指定類型的數據(如String類型),getString(int index)或getString(String columnName)
                                    其中index爲字段(列)的標號從1開始,columnName爲字段名字

    ResultSet類型:默認只能向前讀取;TYPE_SCROLL_INSENSITIVE表示可回滾,但當數據庫數據更新時取到的ResultSet不進行相應的實時更新 ;TYPE_SCROLL_SENSITIVE則表示ResultSet受數據庫數據變更的影響;

    經常使用數據庫數據類型與java數據類型轉換表:
    Oracle

    Sql Server

    MySql

  3. 資源釋放
    Jdbc程序運行完後,切記要釋放程序在運行過程當中建立的那些與數據庫進行交互的對象,這些對象一般是ResultSet, Statement和Connection對象。
    特別是Connection對象,它是很是稀有的資源,用完後必須立刻釋放,若是Connection不能及時、正確的關閉,極易致使系統宕機。Connection的使用原則是儘可能晚建立,儘可能早的釋放。
    爲了確保資源釋放代碼能運行,資源釋放代碼也必定要放在finally語句中。
相關文章
相關標籤/搜索