(JavaWeb)IDEA中JDBC的使用
文章目錄
- JDBC
- JDBC的使用
- prepareStatement與Statement的區(qū)別
- 事務(wù)
JDBC
JDBC - java連接數(shù)據(jù)庫的統(tǒng)一驅(qū)動(dòng)
JDBC的使用
jar包的支持:
- java.sql
- javax.sql
- mysql-conneter-java… 連接驅(qū)動(dòng)(必須)
環(huán)境搭建
Mysql創(chuàng)建數(shù)據(jù)庫表
導(dǎo)入數(shù)據(jù)庫依賴
<!--mysql的驅(qū)動(dòng)--> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version> </dependency>IDEA中連接數(shù)據(jù)庫
將時(shí)區(qū)設(shè)置為上海(默認(rèn)UTC全球標(biāo)準(zhǔn)時(shí)間)否則會(huì)報(bào)Server returns invalid timezone錯(cuò)誤
JDBC 固定步驟:
預(yù)編譯SQL
prepareStatement與Statement的區(qū)別
1、Statement用于執(zhí)行靜態(tài)SQL語句,在執(zhí)行時(shí),必須指定一個(gè)事先準(zhǔn)備好的SQL語句。
2、PrepareStatement是預(yù)編譯的SQL語句對(duì)象,sql語句被預(yù)編譯并保存在對(duì)象中。被封裝的sql語句代表某一類操作,語句中可以包含動(dòng)態(tài)參數(shù)“?”,在執(zhí)行時(shí)可以為“?”動(dòng)態(tài)設(shè)置參數(shù)值。
3、使用PrepareStatement對(duì)象執(zhí)行sql時(shí),sql被數(shù)據(jù)庫進(jìn)行解析和編譯,然后被放到命令緩沖區(qū),每當(dāng)執(zhí)行同一個(gè)PrepareStatement對(duì)象時(shí),它就會(huì)被解析一次,但不會(huì)被再次編譯。在緩沖區(qū)可以發(fā)現(xiàn)預(yù)編譯的命令,并且可以重用。
4、PrepareStatement可以減少編譯次數(shù)提高數(shù)據(jù)庫性能。
事務(wù)
要么都成功,要么都失敗!
ACID原則:保證數(shù)據(jù)的安全。
開啟事務(wù)
事務(wù)提交 commit()
事務(wù)回滾 rollback()
關(guān)閉事務(wù)
轉(zhuǎn)賬案例:
A:1000
B:1000
A(900) --100–> B(1100)
如果中間出問題,轉(zhuǎn)賬失敗則回滾事務(wù)。
創(chuàng)建account表
CREATE TABLE ACCOUNT(id INT PRIMARY KEY AUTO_INCREMENT,`name` VARCHAR(40),money FLOAT );INSERT INTO ACCOUNT(`name`,money) VALUES('A',1000); INSERT INTO ACCOUNT(`name`,money) VALUES('B',1000); INSERT INTO ACCOUNT(`name`,money) VALUES('C',1000); import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;public class TestJDBC3 {public static void main(String[] args) {//配置信息//useUnicode=true&characterEncoding=utf-8 解決中文亂碼String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";String username = "root";String password = "123456";Connection connection = null;try {//1.加載驅(qū)動(dòng)Class.forName("com.mysql.jdbc.Driver");//2.連接數(shù)據(jù)庫DriverManager.getConnection(url,username,password);//3.通知數(shù)據(jù)庫開啟事務(wù),false表示開啟connection.setAutoCommit(false);String sql = "update account set money = money-100 where name = 'A'";connection.prepareStatement(sql).executeUpdate();//制造錯(cuò)誤//int i = 1/0;String sql2 = "update account set money = money+100 where name = 'B'";connection.prepareStatement(sql2).executeUpdate();connection.commit();//以上兩條sql語句都執(zhí)行成功就提交事務(wù)}catch (Exception e){//如果出現(xiàn)異常,就通知數(shù)據(jù)庫回滾事務(wù)try {connection.rollback();} catch (SQLException throwables) {throwables.printStackTrace();}e.printStackTrace();}finally {try {connection.close();} catch (SQLException throwables) {throwables.printStackTrace();}}} }在sql和sql2語句中間,出現(xiàn)錯(cuò)誤,則sql2就不執(zhí)行了,那么A的錢少了,B的錢也沒有增多,轉(zhuǎn)賬失敗,這時(shí)候回滾事務(wù),回滾到轉(zhuǎn)賬操作之前。
將int i = 1/0 注釋,不出現(xiàn)錯(cuò)誤。執(zhí)行。
總結(jié)
以上是生活随笔為你收集整理的(JavaWeb)IDEA中JDBC的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (Java)注解和反射
- 下一篇: (数据结构与算法)稀疏数组案例