日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

(JavaWeb)IDEA中JDBC的使用

發(fā)布時(shí)間:2025/3/20 java 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (JavaWeb)IDEA中JDBC的使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 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ù)庫表

CREATE TABLE users(id INT PRIMARY KEY,`name` VARCHAR(40);`password` VARCHAR(40);email VARCHAR(60),birthday DATE ); INSERT INTO users(id,`name`,`password`,email,birthday) VALUES(1,'張三','123456','zs@qq.com','2020-01-01'); INSERT INTO users(id,`name`,`password`,email,birthday) VALUES(2,'李四','123456','ls@qq.com','2020-01-01'); INSERT INTO users(id,`name`,`password`,email,birthday) VALUES(3,'王五','123456','ww@qq.com','2020-01-01'); SELECT * FROM users;

導(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 固定步驟:

  • 加載驅(qū)動(dòng)
  • 連接數(shù)據(jù)庫,代表數(shù)據(jù)庫
  • 向數(shù)據(jù)庫發(fā)送SQL的對(duì)象Statement : CRUD
  • 編寫SQL (根據(jù)業(yè)務(wù),不同的SQL)
  • 執(zhí)行SQL
  • 關(guān)閉連接
  • import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement;public class TestJdbc {public static void main(String[] args) throws Exception {//配置信息//useUnicode=true&characterEncoding=utf-8 解決中文亂碼String url = "jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";String username = "root";String password = "123456";//1.加載驅(qū)動(dòng)Class.forName("com.mysql.jdbc.Driver");//2.連接數(shù)據(jù)庫connection對(duì)象代表數(shù)據(jù)庫Connection connection = DriverManager.getConnection(url, username, password);//3.向向數(shù)據(jù)庫發(fā)送SQL的對(duì)象Statement,PreparedStatement : CRUDStatement statement = connection.createStatement();//4.編寫sql語句String sql = "select * from users";//5.執(zhí)行語句ResultSet resultSet = statement.executeQuery(sql);while (resultSet.next()){System.out.println("id="+resultSet.getObject("id"));System.out.println("name="+resultSet.getObject("name"));System.out.println("password="+resultSet.getObject("password"));System.out.println("email="+resultSet.getObject("email"));System.out.println("birthday="+resultSet.getObject("birthday"));}//6.關(guān)閉連接,釋放資源(一定要做) 先開后關(guān)resultSet.close();statement.close();connection.close();} }


    預(yù)編譯SQL

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement;public class TestJdbc2 {public static void main(String[] args) throws Exception {//配置信息//useUnicode=true&characterEncoding=utf-8 解決中文亂碼String url = "jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";String username = "root";String password = "123456";//1.加載驅(qū)動(dòng)Class.forName("com.mysql.jdbc.Driver");//2.連接數(shù)據(jù)庫Connection connection = DriverManager.getConnection(url, username, password);//3.編寫sqlString sql = "insert into jdbc.users (id, name, password, email, birthday) values (?,?,?,?,?);";//4.預(yù)編譯PreparedStatement preparedStatement = connection.prepareStatement(sql);preparedStatement.setInt(1,4);//給第一個(gè)占位符,賦值為4preparedStatement.setString(2,"伊澤瑞爾");preparedStatement.setString(3,"123456");preparedStatement.setString(4,"ez@qq.com");preparedStatement.setString(5,"2020-06-22");//5.執(zhí)行sqlint i = preparedStatement.executeUpdate();if (i>0){System.out.println("插入成功");}//6.關(guān)閉資源preparedStatement.close();connection.close();}}


    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í)行。

    《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的(JavaWeb)IDEA中JDBC的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲一区二区黄片 | 777四色| 久久理论视频 | 国产不卡一二三 | 黑人100部av解禁片 | 91中文视频| 欧美福利网站 | 久久综合激的五月天 | 视频国产一区 | 亚洲人午夜精品 | 欧美精品久久久久 | 911毛片| 欧美大片大全 | 麻豆射区 | 日韩中文字幕在线播放 | 免费在线一区二区三区 | 久久久久青草 | 国产aⅴ爽av久久久久成人 | 国产成人精品视频ⅴa片软件竹菊 | 一区免费观看 | 日韩精品一区二区三区在线视频 | 小色瓷导航 | 在线观看日韩视频 | 亚洲区欧美 | 日韩伦理一区 | 99爱精品视频 | 欧美四虎| 哪个网站可以看毛片 | 青青草国产成人av片免费 | 欧美精品综合 | 国产蜜臀av一区二区 | 国产女教师一区二区三区 | 久久久国产成人 | 国内精品毛片 | 国产成人综合一区二区三区 | 激情av小说 | 国产精品99久久久久久久久久久久 | 麻豆一区二区三区四区 | 亚洲精品传媒 | 色综合91| 欧美涩色| 国产一区亚洲一区 | 无码人妻丰满熟妇啪啪 | 日本一区二区三区视频在线播放 | 日韩精品中文字幕一区二区 | 中国黄色网址 | 国产美女作爱视频 | 日韩精品成人一区二区在线 | 好色999| 国产第一亚洲 | 狠狠鲁影院 | 极品女神无套呻吟啪啪 | 操小妞 | 狠狠干综合网 | 亚洲一区二区麻豆 | 99er热精品视频 | 成人免费毛片片v | 男女啪啪在线观看 | 西西人体44www大胆无码 | 热久久中文| 欧美日韩一区三区 | 中出av在线| 亚洲av永久中文无码精品综合 | 天堂网色 | 午夜啪视频 | 欧美生活一级片 | av三级 | 超碰人人网 | 热九九精品 | 日韩插 | 青青青操| 夜夜操天天射 | 东北少妇bbbb搡bbb搡 | 国产极品美女高潮无套嗷嗷叫酒店 | 欧美三级视频在线播放 | 精品国产AV色欲天媒传媒 | 香蕉久久夜色精品国产使用方法 | 高清亚洲| 国产福利视频一区二区三区 | 大学生av| 99国产精品久久久久久久成人 | 男女又爽又黄 | 国产日韩欧美视频在线 | 天天干夜夜撸 | www.sesehu.com | 精品久久久久久一区二区里番 | 好吊在线视频 | 涩涩999| www.av在线免费观看 | heyzo亚洲| 欧美操操操 | 自拍偷拍一区 | 亚洲天堂中文字幕在线观看 | 欧美 国产 日本 | 日韩欧美国产电影 | 97在线免费视频 | 亚洲天堂高清 | 国产欧美精品一区二区在线播放 | 欧美美女网站 |