JDBC編程:JDBC原理和基礎編程

什麼是JDBC:

JDBC(Java DataBase Connectivity)就是Java數據庫鏈接,簡單說就是用Java語言來操做數據庫。原來咱們操做數據庫是在控制檯使用SQL語句來操做數據庫,JDBC是用Java語言向數據庫發送SQL語句。java

JDBC

特色:mysql

1)跨平臺運行:這是繼承了Java語言的「一次編譯,處處運行」的特色;sql

2)不受數據庫供應商的限制:巧妙在於JDBC設有兩種接口,一個是面向應用程序層,其做用是使得開發人員經過SQL調用數據庫和處理結果,而不須要考慮數據庫的提供商;另外一個是驅動程序層,處理與具體驅動程序的交互;數據庫

經常使用接口:

1)Driver接口:
Driver接口由數據庫廠家提供,做爲java開發人員,只須要使用Driver接口就能夠了。編程

2)Connection接口:
Connection與特定數據庫的鏈接(會話),在鏈接上下文中執行sql語句並返回結果。oracle

經常使用方法:url

  • createStatement():建立向數據庫發送sql的statement對象。
  • prepareStatement(sql) :建立向數據庫發送預編譯sql的PrepareSatement對象。
  • prepareCall(sql):建立執行存儲過程的callableStatement對象。
  • setAutoCommit(boolean autoCommit):設置事務是否自動提交。
  • commit() :在連接上提交事務。
  • rollback() :在此連接上回滾事務。

3)Statement接口:
用於執行靜態SQL語句並返回它所生成結果的對象。spa

三種Statement類:code

  • Statement:由createStatement建立,用於發送簡單的SQL語句(不帶參數)。
  • PreparedStatement :繼承自Statement接口,由preparedStatement建立,用於發送含有一個或多個參數的SQL語句。
  • CallableStatement:繼承自PreparedStatement接口,由方法prepareCall建立,用於調用存儲過程。

經常使用Statement方法:對象

  • execute(String sql):運行語句,返回是否有結果集
  • executeQuery(String sql):運行select語句,執行查詢操做,返回ResultSet結果集。
  • executeUpdate(String sql):運行insert/update/delete語句,執行更新操做。
  • addBatch(String sql) :把多條sql語句放到一個批處理中。
  • executeBatch():向數據庫發送一批sql語句執行。

4)ResultSet接口:
執行sql查詢語句返回的結果集。

ResultSet提供檢索不一樣類型字段的方法:

  • getString(int index)、getString(String columnName):得到在數據庫裏是varchar、char等類型的數據對象。
  • getFloat(int index)、getFloat(String columnName):得到在數據庫裏是Float類型的數據對象。
  • getDate(int index)、getDate(String columnName):得到在數據庫裏是Date類型的數據。
  • getBoolean(int index)、getBoolean(String columnName):得到在數據庫裏是Boolean類型的數據。
  • getObject(int index)、getObject(String columnName):獲取在數據庫裏任意類型的數據。

ResultSet對結果集進行滾動的方法:

  • next():移動到下一行;
  • Previous():移動到前一行;
  • absolute(int row):移動到指定行;
  • beforeFirst():移動resultSet的最前面;
  • afterLast() :移動到resultSet的最後面;

【使用後依次關閉對象及鏈接:ResultSet → Statement → Connection】

編程步驟:

1)加載驅動程序;

Class.forName(driverClass)
//加載MySql驅動
Class.forName("com.mysql.jdbc.Driver")
//加載Oracle驅動
Class.forName("oracle.jdbc.driver.OracleDriver")

2)獲取數據鏈接:經過DriverManager類建立數據庫鏈接對象Connection;

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

3)建立Statement對象:

Statement stmt = conn.createStatement();

4)調用Statement對象的相關方法執行相對應的 SQL 語句:經過execuUpdate()方法用來數據的更新,包括插入和刪除等操做;

5)關閉數據庫鏈接:使用完數據庫或者不須要訪問數據庫時,經過Connection的close() 方法及時關閉數據鏈接;

例:

獲取鏈接數據庫資源

private static ResourceBundle bundle= ResourceBundle.getBundle("connect");//資源包
private static String driver= bundle.getString("driver");//驅動程序
private static String url=bundle.getString("url"); //數據庫鏈接地址
private static String user=bundle.getString("user");//用戶名稱
private static String password=bundle.getString("password");//用戶密碼</pre>

建立鏈接

public Connection getConn() {
        try {
            Class.forName(driver);//加載驅動
            Connection conn;
            conn=DriverManager.getConnection(url, user, password);//建立鏈接
            return conn;
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

執行方法

public void Update(String sql, ArrayList<String> parameters) {
    Connection connection = getConn();//獲取鏈接
    PreparedStatement ps = null;//初始化陳述清單
    try {
        connection.setAutoCommit(false);// 更改JDBC事務的默認提交方式,默認是true,是自動提交;
        ps = connection.prepareStatement(sql);//設置sql語句    
        
        for (int i = 0; i < parameters.size(); i++) {
        ps.setString(i + 1, parameters.get(i));//設置參數
        }
        ps.executeUpdate();
        connection.commit();//提交JDBC事務,若是沒問題,這時才真正的刪除了;
        connection.setAutoCommit(true);// 恢復JDBC事務的默認提交方式;
                                        
    } catch (SQLException e) {
        try {
             //回滾JDBC事務,出現異常,爲保證數據完整性,這次操做回滾,不刪除;
            connection.rollback();
        } catch (SQLException e1) {
        e1.printStackTrace();
         }
        e.printStackTrace();
    }finally{
                    
        try {                                     
            //關閉資源
            ps.close();connection.close();
        } catch (SQLException e) {e.printStackTrace(); }}}
相關文章
相關標籤/搜索