JDBC各個類詳解
代碼實現:
//1.導入驅動jar包 //2.注冊驅動 Class.forName("com.mysql.jdbc.Driver"); //3.獲取數據庫連對象 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3","root","password"); //4.定義sql語句 String sql = "update account set balance = 500 where id = 1"; //5.獲取執行sql語句的對象 Statement Statement stmt = conn.createStatement(); //6.執行sql int count = stmt.executeUpdate(sql); //7.處理結果 System.out.println(count); //8.釋放結果 stmt.close(); conn.close();
詳解各個對象
1. DriverManager:驅動管理對象
功能:
1.注冊驅動:告訴程序該使用哪一個數據庫驅動jar
- static void registerDriver(Driver driver):注冊與給定的驅動程序DriverManager
寫代碼使用:Class.forName("com.mysql.jdbc.Driver");
注意:mysql5之后的驅動jar包可以省略注冊驅動的步驟。
2.獲取數據庫連接
*方法:static Connection getConnection(String url, String user, String password)
*參數:
*url:指定連接的路徑
- 語法:jdbc:mysql://ip地址(域名):端口號/數據庫名稱
- 例子:jdbc:mysql://localhost:3306/db3
- 細節:如果連接的是本機mysql服務器,並且mysql服務默認端口是3306,則url可以簡寫為:jdbc:mysql:///數據庫名稱
*user:用戶名
*password:密碼
2. Connection:數據庫連接對象
功能:
1.獲取執行sql語句的對象
Statement createStatement()
PreParedStatement perpareStatement(String sql)
2.管理事務:
- 開啟事務:setAutoCommit(boolean autoCommit):調用該方法設置參數為false,即開啟事務
- 提交事務:commit()
- 回滾事務:rollback()
3. Statement:執行sql的對象
執行sql
1.Boolean execute(String sql ):可以執行任意的sql (了解)
2.int executeUpdate(String sql ):執行DML(insert,update,delete)語句、DDL(create,later,drop)語句
- 返回值:影響的行數,可以通過這個影響的行數判斷DML語句是否執行成功 返回值>0的則執行成功,反之,則失敗
3.ResultSet executeQuery(String sql) :執行DQL(select)語句
4. ResultSet:結果集對象,封裝查詢結果
1.boolean next():游標向下移動一行,判斷當前行是否是最后一行末尾(是否有數據),如果是,則返回false,如果不是則返回true
2.getXxx(參數):獲取數據
- Xxx:代表數據類型 如:int getInt(),String getString()
- 參數:
1.int:代表列的編號,從1開始 如:getString(1) 2.string:代表列名稱。 如:getDouble("balance")\
注意:
使用步驟:
- 游標向下移動一行
- 判斷是否有數據
- 獲取數據
5. PreparedStatement:執行sql的對象
1.SQL注入問題:在拼接sql時,有一些sql的特殊關鍵字參與字符串的拼接。會造成安全性問題
- 1.輸入用戶(隨便),輸入密碼:a' or 'a' = 'a
- 2.sql:select * from user where username = 'shhshdcainiao' and password = ' a' or 'a' = 'a '
2.解決sql注入問題:使用PreparedStatement對象來解決
3.預編譯的SQL:參數使用 ?作為占位符
4.步驟:
- 1.導入驅動jar包 mysql-connector-java-5.1.37-bin.jar
- 2.注入驅動
- 3.獲取數據庫連對象 Connection
- 4.定義sql
- 5.獲取執行sql語句的對象 Statement
- 6.執行sql ,接受返回結果
- 7.處理結果
- 8.釋放資源
5.注意:后期都會使用 PreparedStatement來完成增刪改查的所有操作
- 1.可以防止SQL注入
- 2.效率更高
JDBC控制事物
1.事物:一個包含多個步驟的業務操作。如果這個業務操作被事物管理,則這多個步驟要么同時成功,要么同時失敗
2.操作:
- 1.開啟事務
- 2.提交事務:
- 3.回滾事務:
3.使用Connection對象來管理事務
開啟事務:setAutoCommit(boolean autoCommit):調用該方法設置參數為false,即開啟事務
- 在執行sql之前開啟事務
提交事務:commit()
- 當所有sql的都執行完提交事務
回滾事務:rollback()
- 在catch中回滾事務
抽取JDBC工具類:JDBCUtils
目的:簡化書寫
分析:
- 1.注冊驅動來抽取
- 2.抽取一個方法獲取連接對象
需求:不想傳遞參數(麻煩),還得保證工具類的通用性。
解決:配置文件
jdbc.properties url = user = password =
- 3.抽取一個方法釋放資源