JDBC-01-快速入门
生活随笔
收集整理的這篇文章主要介紹了
JDBC-01-快速入门
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 01 JDBC快速入門
- 02 JDBC各個類詳解
- 03 JDBC之CRUD練習
- 04 ResultSet類詳解
- 05 JDBC登錄案例練習
- 抽取JDBC工具類 : JDBCUtils
- 練習
- 06 PreparedStatement類詳解
- 07 JDBC事務管理
目標
1. JDBC基本概念
2. 快速入門
3. 對JDBC中各個接口和類詳解
01 JDBC快速入門
1. 概念:Java DataBase Connectivity Java 數據庫連接, Java語言操作數據庫* JDBC本質:其實是官方(sun公司)定義的一套操作所有關系型數據庫的規則,即接口。各個數據庫廠商去實現這套接口,提供數據庫驅動jar包。我們可以使用這套接口(JDBC)編程,真正執行的代碼是驅動jar包中的實現類。2. 快速入門:* 步驟:1. 導入驅動jar包 mysql-connector-java-5.1.37-bin.jar1.復制mysql-connector-java-5.1.37-bin.jar到項目的libs目錄下2.右鍵-->Add As Library2. 注冊驅動3. 獲取數據庫連接對象 Connection4. 定義sql5. 獲取執行sql語句的對象 Statement6. 執行sql,接受返回結果7. 處理結果8. 釋放資源* 代碼實現://1. 導入驅動jar包//2.注冊驅動Class.forName("com.mysql.jdbc.Driver");//3.獲取數據庫連接對象Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");//4.定義sql語句String sql = "update account set balance = 500 where id = 1";//5.獲取執行sql的對象 StatementStatement stmt = conn.createStatement();//6.執行sqlint count = stmt.executeUpdate(sql);//7.處理結果System.out.println(count);//8.釋放資源stmt.close();conn.close();02 JDBC各個類詳解
sql語句 execute、executeQuery和executeUpdate之間的區別:
03 JDBC之CRUD練習
java基礎總結(二十七)–Statement 和 PreparedStatement之間的關系和區別
2. 練習:1. account表 添加一條記錄2. account表 修改記錄3. account表 刪除一條記錄代碼:Statement stmt = null;Connection conn = null;try {//1. 注冊驅動Class.forName("com.mysql.jdbc.Driver");//2. 定義sqlString sql = "insert into account values(null,'王五',3000)";//3.獲取Connection對象conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");//4.獲取執行sql的對象 Statementstmt = conn.createStatement();//5.執行sqlint count = stmt.executeUpdate(sql);//影響的行數//6.處理結果System.out.println(count);if(count > 0){System.out.println("添加成功!");}else{System.out.println("添加失敗!");}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}finally {//stmt.close();//7. 釋放資源//避免空指針異常if(stmt != null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if(conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}04 ResultSet類詳解
4. ResultSet:結果集對象,封裝查詢結果* boolean next(): 游標向下移動一行,判斷當前行是否是最后一行末尾(是否有數據),如果是,則返回false,如果不是則返回true* getXxx(參數):獲取數據* Xxx:代表數據類型 如: int getInt() , String getString()* 參數:1. int:代表列的編號,從1開始 如: getString(1)2. String:代表列名稱。 如: getDouble("balance")* 注意:* 使用步驟:1. 游標向下移動一行2. 判斷是否有數據3. 獲取數據//循環判斷游標是否是最后一行末尾。while(rs.next()){//獲取數據//6.2 獲取數據int id = rs.getInt(1);String name = rs.getString("name");double balance = rs.getDouble(3);System.out.println(id + "---" + name + "---" + balance);}* 練習:* 定義一個方法,查詢emp表的數據將其封裝為對象,然后裝載集合,返回。1. 定義Emp類2. 定義方法 public List<Emp> findAll(){}3. 實現方法 select * from emp;05 JDBC登錄案例練習
抽取JDBC工具類 : JDBCUtils
- 目的:簡化書寫
- 分析:
- 注冊驅動也抽取
- 抽取一個方法獲取連接對象
- 需求:不想傳遞參數(麻煩),還得保證工具類的通用性。
- 解決:配置文件
jdbc.properties
url=
user=
password=
- 抽取一個方法釋放資源
練習
* 練習:* 需求:1. 通過鍵盤錄入用戶名和密碼2. 判斷用戶是否登錄成功* select * from user where username = "" and password = "";* 如果這個sql有查詢結果,則成功,反之,則失敗* 步驟:1. 創建數據庫表 userCREATE TABLE USER(id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(32),PASSWORD VARCHAR(32));INSERT INTO USER VALUES(NULL,'zhangsan','123');INSERT INTO USER VALUES(NULL,'lisi','234');2. 代碼實現:public class JDBCDemo9 {public static void main(String[] args) {//1.鍵盤錄入,接受用戶名和密碼Scanner sc = new Scanner(System.in);System.out.println("請輸入用戶名:");String username = sc.nextLine();System.out.println("請輸入密碼:");String password = sc.nextLine();//2.調用方法boolean flag = new JDBCDemo9().login(username, password);//3.判斷結果,輸出不同語句if(flag){//登錄成功System.out.println("登錄成功!");}else{System.out.println("用戶名或密碼錯誤!");}}/*** 登錄方法*/public boolean login(String username ,String password){if(username == null || password == null){return false;}//連接數據庫判斷是否登錄成功Connection conn = null;Statement stmt = null;ResultSet rs = null;//1.獲取連接try {conn = JDBCUtils.getConnection();//2.定義sqlString sql = "select * from user where username = '"+username+"' and password = '"+password+"' ";//3.獲取執行sql的對象stmt = conn.createStatement();//4.執行查詢rs = stmt.executeQuery(sql);//5.判斷/* if(rs.next()){//如果有下一行,則返回truereturn true;}else{return false;}*/return rs.next();//如果有下一行,則返回true} catch (SQLException e) {e.printStackTrace();}finally {JDBCUtils.close(rs,stmt,conn);}return false;}}06 PreparedStatement類詳解
PreparedStatement和動態SQL
什么是sql注入?
PreparedStatement:執行sql的對象
SQL注入問題:在拼接sql時,有一些sql的特殊關鍵字參與字符串的拼接。會造成安全性問題
1. 輸入用戶隨便,輸入密碼:a’ or ‘a’ = 'a
2. sql:select * from user where username = ‘fhdsjkf’ and password = ‘a’ or ‘a’ = ‘a’
解決sql注入問題:使用PreparedStatement對象來解決
預編譯的SQL:參數使用?作為占位符
步驟:
- 注意:sql的參數使用?作為占位符。 如:select * from user where username = ? and password = ?;
- 方法: setXxx(參數1,參數2)
- 參數1:?的位置編號 從1 開始
- 參數2:?的值
注意:后期都會使用PreparedStatement來完成增刪改查的所有操作
07 JDBC事務管理
- 開啟事務:setAutoCommit(boolean autoCommit) :調用該方法設置參數為false,即開啟事務
- 在執行sql之前開啟事務
- 提交事務:commit()
- 當所有sql都執行完提交事務
- 回滾事務:rollback()
- 在catch中回滾事務
i = 3/0;
pstmt2.executeUpdate();//提交事務conn.commit();} catch (Exception e) {//事務回滾try {if(conn != null) {conn.rollback();}} catch (SQLException e1) {e1.printStackTrace();}e.printStackTrace();}finally {JDBCUtils.close(pstmt1,conn);JDBCUtils.close(pstmt2,null);}}
}
總結
以上是生活随笔為你收集整理的JDBC-01-快速入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring学习笔记05-IOC常用注解
- 下一篇: 由partition看窗口函数