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