Java學習總結050--JDBC

介紹

SUN公司爲了簡化、統一對數據庫的操作,定義了一套Java操作數據庫的規範(接口),稱之爲JDBC。

  • JDBC全稱爲:Java Data Base Connectivity 【Java數據庫連接】
  • 組成JDBC的2個包: java.sql
    javax.sql
    在這裏插入圖片描述
    注意:開發JDBC應用需要以上2個包的支持外,還需要導入相應JDBC的數據庫實現(即數據庫驅動)。

下載驅動

推薦下載地址 : https://mvnrepository.com/artifact/mysql/mysql-connector-java
在這裏插入圖片描述

搭建實驗環境

新建一個Java工程,並導入數據驅動。
在mysql中創建一個庫,並創建user表和插入表的數據。

使用JDBC

編寫程序從user表中讀取數據,並打印在命令行窗口中。
編寫JDBC代碼固定步驟:
① 加載驅動
② 獲取與數據庫的鏈接
③ 獲取用於向數據庫發送sql語句的statement
④ 向數據庫發sql,並獲取代表結果集的resultset
⑤ 取出結果集的數據
⑥ 關閉鏈接,釋放資源

//測試JDBC的CRUD
public class Demo01 {

    @Test
    public void insert() {
        Connection connection = null;
        Statement statement = null;
        try {
            //1.獲取數據庫連接
            connection = JDBCUtils.getConnection();
            //2.創建statement對象
            statement = connection.createStatement();
            //3.編寫Sql語句
            String sql = "INSERT INTO users(id,NAME,PASSWORD,email,birthday) VALUES(5,'wangwu','123456','[email protected]','1979-12-04');";
            //4.執行sql語句
            int i = statement.executeUpdate(sql); //返回受影響的行數
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //5.釋放資源
            JDBCUtils.closeAll(null,statement,connection);
        }
    }

DriverManager類講解

JDBC程序中的DriverManager用於加載驅動,並創建與數據庫的鏈接,這個API的常用方法:
I. DriverManager.registerDriver(new Driver());
II. DriverManager.getConnection(url, user, password);

注意:在實際開發中並不推薦採用registerDriver方法註冊驅動。
原因有二: I. 查看Driver的源碼可以看到,如果採用此種方式,會導致驅動程序註冊兩次,在內存中會有兩個Driver對象。
II. 程序依賴mysql的api,脫離mysql的jar包,程序將無法編譯,將來程序切換底層數據庫將會非常麻煩。

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

數據庫URL講解

URL用於標識數據庫的位置,通過URL地址告訴JDBC程序連接哪個數據庫,URL的寫法爲:
在這裏插入圖片描述
依次爲 : 協議 + 子協議 + 主機:端口 + 數據庫 + 參數
如果連接的是本地的Mysql數據庫,並且連接使用的端口是3306 那麼的url地址可以簡寫爲: jdbc:mysql:///數據庫

Connection類講解

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

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

Statement類講解

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

  • executeQuery(String sql) :用於向數據發送查詢語句。
  • executeUpdate(String sql):用於向數據庫發送insert、update或delete語句
  • execute(String sql):用於向數據庫發送任意sql語句
  • addBatch(String sql) :把多條sql語句放到一個批處理中。
  • executeBatch():向數據庫發送一批sql語句執行。

ResultSet類講解

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程序運行完後,切記要釋放程序在運行過程中,創建的那些與數據庫進行交互的對象,特別是Connection對象,它是非常稀 有的資源,用完後必須馬上釋放,如果Connection不能及時、正確的關閉,極易導致系統宕機。

  • Connection的使用原則是儘量晚創建,儘量早的釋放。
  • 爲確保資源釋放代碼能運行,資源釋放代碼也一定要放在finally語句中。

statement對象

  • Jdbc中的statement對象用於向數據庫發送SQL語句,想完成對數據庫的增刪改查,只需要通 過這個對象向數據庫發送增刪改查語句即可。
  • Statement對象的executeUpdate方法,用於向數據庫發送增、刪、改的sql語句, executeUpdate執行完後,將會返回一個整數(即增刪改語句導致了數據庫幾行數據發生了變化)。
  • Statement.executeQuery方法用於向數據庫發送查詢語句,executeQuery方法返回代表查詢 結果的ResultSet對象。
    1.CRUD操作-create
Statement st = conn.createStatement(); 
String sql = "insert into user(….) values(…..) "; 
int num = st.executeUpdate(sql);
if(num>0) { 
System.out.println("插入成功!!!"); 
}

2.CRUD操作-update

Statement st = conn.createStatement();
String sql = “update user set name= ' ' where name= ' ' "; 
int num = st.executeUpdate(sql); 
if(num>0) {
System.out.println(“修改成功!!!");
}

3.CRUD操作-delete

Statement st = conn.createStatement();
String sql = “delete from user where id=1”; 
int num = st.executeUpdate(sql); 
if(num>0) { 
System.out.println(“刪除成功!!!");
 }

4.CRUD操作-read

Statement st = conn.createStatement(); 
String sql = “select * from user where id=1; 
ResultSet rs = st.executeQuery(sql); 
while(rs.next()) { 
//根據獲取列的數據類型,分別調用rs的相應方法映射到java對象中
}

PreparedStatement對象

  • PreperedStatement是Statement的子類
  • 它的實例對象可以通過調用Connection.preparedStatement()方法獲得,相對於Statement對象 而言:PreperedStatement可以避免SQL注入的問題。
  • Statement會使數據庫頻繁編譯SQL,可能造成數據庫緩衝區溢出。PreparedStatement可對 SQL進行預編譯,從而提高數據庫的執行效率。並且PreperedStatement對於sql中的參數, 允許使用佔位符的形式進行替換,簡化sql語句的編寫。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章