一、Druid基本使用
一、使用步驟
pom.xml 添加依賴
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.19</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
//這裡有個小插曲,之前這段是從網上複制到pom.xml,然而會報錯,原因是複制的内容裡有特殊字元之類,但可能是不可見字元,後來,複制原來可用的dependency段,在這上面修改,果然問題解決
定義配置檔案druid.properties:
是properties形式的
可以叫任意名稱,可以放在任意目錄下
加載配置檔案properties
擷取資料庫連接配接對象:通過工廠來擷取DruidDataSourceFactory
擷取連接配接:getConnection
配置檔案内容:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/db3?useSSL=false
username=root
password=123456789
# 初始化連接配接數量
initialSize=5
# 最大連接配接數
maxActive=10
# 最大等待時間
maxWait=3000
minIdle=3
public class DruidDemo01 {
public static void main(String[] args) throws Exception {
Properties properties = new Properties();
InputStream is = DruidDemo01.class.getClassLoader().getResourceAsStream("druid.properties");
properties.load(is);
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
Connection conn = dataSource.getConnection();
System.out.println(conn);
}
}
上面的代碼中 getResourceAsStream取值如果為空,可參考這個解決方法 getResourceAsStream取值為空的問題解決方法
二、定義Druid工具類
定義一個類JDBCUtils
提供靜态代碼塊加載配置檔案,初始化連接配接對象
提供方法
擷取連接配接方法:通過資料庫連接配接池擷取連接配接
釋放資源
擷取連接配接池的方法
示例:
package com.test;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCUtils {
//1.定義成員變量
private static DataSource dataSource;
static {
try {
//1.加載配置檔案
Properties properties = new Properties();
properties.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
//2.擷取DataSource
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 擷取連接配接
*/
public static Connection getConnection() throws Exception {
return dataSource.getConnection();
}
/**
* 釋放資源
*/
public static void close(Statement stmt, Connection conn){
close(null, stmt, conn);
}
/**
* 釋放資源
*/
public static void close(ResultSet rs, Statement stmt, Connection conn){
if (rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 擷取連接配接池
*/
public static DataSource getDataSource(){
return dataSource;
}
}
使用工具類:
package com.test;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args ) {
testdb();
//testload();
}
private static void testload()
{
System.out.println( "Hello World!" );
Properties properties = new Properties();
InputStream is = App.class.getClassLoader().getResourceAsStream("druid.properties");
//InputStream is = App.class.getClassLoader().getResourceAsStream("/com/test/druid.properties");
try {
properties.load(is);
} catch (IOException e) {
e.printStackTrace();
}
DataSource dataSource = null;
try {
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
Connection conn = null;
try {
conn = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println(conn);
}
private static void testdb(){
Connection conn = null;
PreparedStatement pstmt = null;
try {
/**
* 完成添加操作
*/
//1.擷取連接配接
conn = com.test.JDBCUtils.getConnection();
//2.定義sql
String sql = "insert into user values(?, ?, ?)";
//3.擷取pstmt對象
pstmt = conn.prepareStatement(sql);
//4.給?指派
pstmt.setString(1, "5");
pstmt.setString(2, "張三");
pstmt.setDouble(3, 50);
//5.執行sql
int count = pstmt.executeUpdate();
System.out.println(count);
} catch (Exception e) {
e.printStackTrace();
}finally {
com.test.JDBCUtils.close(pstmt, conn);
}
}
}