(JavaWeb)IDEA中JDBC的使用
文章目錄
- JDBC
- JDBC的使用
- prepareStatement與Statement的區別
- 事務
JDBC
JDBC - java連接數據庫的統一驅動
JDBC的使用
jar包的支持:
- java.sql
- javax.sql
- mysql-conneter-java… 連接驅動(必須)
環境搭建
Mysql創建數據庫表
導入數據庫依賴
<!--mysql的驅動--> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version> </dependency>IDEA中連接數據庫
將時區設置為上海(默認UTC全球標準時間)否則會報Server returns invalid timezone錯誤
JDBC 固定步驟:
預編譯SQL
prepareStatement與Statement的區別
1、Statement用于執行靜態SQL語句,在執行時,必須指定一個事先準備好的SQL語句。
2、PrepareStatement是預編譯的SQL語句對象,sql語句被預編譯并保存在對象中。被封裝的sql語句代表某一類操作,語句中可以包含動態參數“?”,在執行時可以為“?”動態設置參數值。
3、使用PrepareStatement對象執行sql時,sql被數據庫進行解析和編譯,然后被放到命令緩沖區,每當執行同一個PrepareStatement對象時,它就會被解析一次,但不會被再次編譯。在緩沖區可以發現預編譯的命令,并且可以重用。
4、PrepareStatement可以減少編譯次數提高數據庫性能。
事務
要么都成功,要么都失敗!
ACID原則:保證數據的安全。
開啟事務
事務提交 commit()
事務回滾 rollback()
關閉事務
轉賬案例:
A:1000
B:1000
A(900) --100–> B(1100)
如果中間出問題,轉賬失敗則回滾事務。
創建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.加載驅動Class.forName("com.mysql.jdbc.Driver");//2.連接數據庫DriverManager.getConnection(url,username,password);//3.通知數據庫開啟事務,false表示開啟connection.setAutoCommit(false);String sql = "update account set money = money-100 where name = 'A'";connection.prepareStatement(sql).executeUpdate();//制造錯誤//int i = 1/0;String sql2 = "update account set money = money+100 where name = 'B'";connection.prepareStatement(sql2).executeUpdate();connection.commit();//以上兩條sql語句都執行成功就提交事務}catch (Exception e){//如果出現異常,就通知數據庫回滾事務try {connection.rollback();} catch (SQLException throwables) {throwables.printStackTrace();}e.printStackTrace();}finally {try {connection.close();} catch (SQLException throwables) {throwables.printStackTrace();}}} }在sql和sql2語句中間,出現錯誤,則sql2就不執行了,那么A的錢少了,B的錢也沒有增多,轉賬失敗,這時候回滾事務,回滾到轉賬操作之前。
將int i = 1/0 注釋,不出現錯誤。執行。
總結
以上是生活随笔為你收集整理的(JavaWeb)IDEA中JDBC的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (Java)注解和反射
- 下一篇: insert时调用本身字段_「技术篇」E