生活随笔
收集整理的這篇文章主要介紹了
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
) {
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
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
); st
.setInt(1,4); st
.setString(2,"qinjiang");st
.setString(3,"1232112");st
.setString(4,"24734673@qq.com");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
);}}
}
總結
以上是生活随笔為你收集整理的JDBC(二)——使用IDEA连接数据库、数据库连接池的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。