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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

JDBC(二)——使用IDEA连接数据库、数据库连接池

發布時間:2025/3/13 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDBC(二)——使用IDEA连接数据库、数据库连接池 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 1. 使用IDEA連接數據庫
  • 2. 事務
  • 3. 數據庫連接池

1. 使用IDEA連接數據庫

(1)點擊IDEA界面右側的Database

(2)點擊 + ,再點擊Data Source ,最后點擊 MySQL

(3)填寫用戶名和密碼,測試連接

(4)連接成功后顯示的界面

(5)選擇要來連接的數據庫,以連接 jdbcstudy為例


(6)數據庫jdbcstudy連接成功后的界面

(7)雙擊表名users,打開表

(8)更新修改數據

(9)編寫SQL代碼

(10)連接失敗,查看原因

2. 事務

要么都成功,要么都失敗

  • 代碼實現
    ①開啟事務 setAutoCommit(false)
    ②一組業務執行完畢,提交事務 commit()
    ③如果在事務處理過程中發生異常則通過 rollback() 進行事務回滾
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException;public class TestTransaction2 {public static void main(String[] args) {Connection conn = null;PreparedStatement st = null;ResultSet rs = null;try {conn = JdbcUtils.getConnection();// 關閉數據庫的自動提交,自動會開啟事務conn.setAutoCommit(false); // 開啟事務String sql1 = "update account set money = money-100 where name = 'A'";st = conn.prepareStatement(sql1);st.executeUpdate();int x = 1/0; // 報錯String sql2 = "update account set money = money+100 where name = 'B'";st = conn.prepareStatement(sql2);st.executeUpdate();//業務完畢,提交事務conn.commit();System.out.println("成功!");} catch (SQLException e) {// 若果失敗,則默認回滾 // try { // conn.rollback(); // 如果失敗則回滾事務 // } catch (SQLException e1) { // e1.printStackTrace(); // }e.printStackTrace();} finally {JdbcUtils.release(conn,st,rs);}} }

3. 數據庫連接池

數據庫連接 — 執行完畢 — 釋放
連接 – 釋放 十分浪費系統資源
池化技術:準備一些預先的資源,過來就連接預先準備好的

  • 開源數據源實現 ( 拿來即用 )
    DBCP
    C3P0
    Druid:阿里巴巴

使用了這些數據庫連接池之后,我們在項目開發中就不需要編寫連接數據庫的代碼了!

  • 以DBCP為例
    需要用到的 jar 包:commons-dbcp-1.4 、commons-pool-1.6

將lib目錄Ass a library,在工程下編寫dbcpconfig.properties文件

  • 使用連接池時,要配置一下參數

最小連接數:是連接池一直保持的數據庫連接,所以如果應用程序對數據庫連接的使用量不大,將會有大量的數據庫連接資源被浪費。
最大連接數:是連接池能申請的最大連接數,如果數據庫連接請求超過次數,后面的數據庫連接請求將被加入到等待隊列中,這會影響以后的數據庫操作
最大空閑時間
獲取連接超時時間
超時重試連接次數

#連接設置 這里面的名字,是DBCP數據源中定義好的 driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/jdbcStudy?useUnicode=true&characterEncoding=utf8&useSSL=true username=root password=123456#<!-- 初始化連接 --> initialSize=10#最大連接數量 maxActive=50#<!-- 最大空閑連接 --> maxIdle=20#<!-- 最小空閑連接 --> minIdle=5#<!-- 超時等待時間以毫秒為單位 6000毫秒/1000等于60--> maxWait=60000#JDBC驅動建立連接時附帶的連接屬性屬性的格式必須為這樣:[屬性名=property;] #注意:"user""password" 兩個屬性會被明確地傳遞,因此這里不需要包含他們。 connectionProperties=useUnicode=true;characterEncoding=UTF8#指定由連接池所創建的連接的自動提交(auto-commit)狀態。 defaultAutoCommit=true#driver default 指定由連接池所創建的連接的只讀(read-only)狀態。 #如果沒有設置該值,則“setReadOnly”方法將不被調用。(某些驅動并不支持只讀模式,如:Informix) defaultReadOnly=#driver default 指定由連接池所創建的連接的事務級別(TransactionIsolation)。 #可用值為下列之一:(詳情可見javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE defaultTransactionIsolation=READ_UNCOMMITTED
  • 再編寫一個DBCP工具類
import javax.sql.DataSource; import java.io.InputStream; import java.sql.*; import java.util.Properties;public class JdbcUtils_DBCP {private static DataSource dataSource = null;static {try{InputStream in = JdbcUtils_DBCP.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");Properties properties = new Properties();properties.load(in);//創建數據源 工廠模式 --> 創建dataSource = BasicDataSourceFactory.createDataSource(properties);} catch (Exception e) {e.printStackTrace();}}//獲取連接public static Connection getConnection() throws SQLException {return dataSource.getConnection(); //從數據源中獲取連接}//釋放連接資源public static void release(Connection conn, Statement st, ResultSet rs){if (rs!=null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if (st!=null){try {st.close();} catch (SQLException e) {e.printStackTrace();}}if (conn!=null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}} }
  • 進行測試
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Date;public class TestDBCP {public static void main(String[] args) {Connection conn = null;PreparedStatement st = null;try {conn = JdbcUtils_DBCP.getConnection();// 區別// 使用? 占位符代替參數String sql = "insert into users(id,`NAME`,`PASSWORD`,`email`,`birthday`) values(?,?,?,?,?)";st = conn.prepareStatement(sql); //預編譯SQL,先寫sql,然后不執行// 手動給參數賦值st.setInt(1,4); //idst.setString(2,"qinjiang");st.setString(3,"1232112");st.setString(4,"24734673@qq.com");// 注意點: sql.Date 數據庫 java.sql.Date()// util.Date Java new Date().getTime() 獲得時間戳st.setDate(5,new java.sql.Date(new Date().getTime()));//執行int i = st.executeUpdate();if (i>0){System.out.println("插入成功!");}} catch (SQLException e) {e.printStackTrace();} finally {JdbcUtils_DBCP.release(conn,st,null);}} }
  • C3P0的使用與DBCP方法類似,需要的jar包:c3p0-0.9.5.5、mchange-commons-java-0.2.19

  • 結論
    無論使用什么數據源,本質還是一樣的,DataSource接口不會變,方法就不會變

總結

以上是生活随笔為你收集整理的JDBC(二)——使用IDEA连接数据库、数据库连接池的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。