在IDEA中連線資料庫連線池(SQL server)
阿新 • • 發佈:2022-03-31
配置資料庫連線池時遇到的問題
首先是DBCP檔案的配置問題
dbcpconfig.properties檔案
在這個中每種驅動類都不一樣,注意區分
其他根據區分,自行填寫或者預設即可
#連線設定 driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver url=jdbc:sqlserver://localhost:1433;DatabaseName=stu username=** password=** #<!-- 初始化連線 --> initialSize=10 #最大連線數量 maxActive=50 #<!-- 最大空閒連線 --> maxIdle=20 #<!-- 最小空閒連線 --> minIdle=5 #<!-- 超時等待時間以毫秒為單位 6000毫秒/1000等於60秒 --> maxWait=60000 #JDBC驅動建立連線時附帶的連線屬性屬性的格式必須為這樣:[屬性名=property;] #注意:"user" 與 "password" 兩個屬性會被明確地傳遞,因此這裡不需要包含他們。 connectionProperties=useUnicode=true;characterEncoding=gbk #指定由連線池所建立的連線的自動提交(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
檔案讀取問題
因為IDEA檔案路徑的問題改過好幾次,最終我覺得還是使用相對於專案整體的相對路徑比較穩妥。
資料工廠無引用問題
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
解決方案:Maven匯入依賴即可
<dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging-api</artifactId> <version>1.1</version> </dependency>
全部程式碼及檔案
DBCP屬性配置檔案上面已列出
JdbcUtils_DBCP.java
package com.zyx.lesson_databasepool.utils; import org.apache.commons.dbcp2.BasicDataSourceFactory; import java.io.FileInputStream; import java.sql.ResultSet; import java.sql.SQLException; import javax.sql.DataSource; import java.sql.*; import java.util.Properties; /** * @PROJECT_NAME : database * @PACKAGE_NAME : com.zyx.lesson_databasepool.utils * @NAME : JdbcUtils_DBCP * @SITE : * @DATE : 2022/3/30 * @TIME : 10:14 * @DAY_NAME_FULL : 星期三 * @USER : yaaxi * @AUTHOR : 星垂月流 **/ public class JdbcUtils_DBCP { private static DataSource dataSource = null; static { try{ Properties prop = new Properties(); prop.load(new FileInputStream("src/main/java/com/zyx/lesson_databasepool/utils/dbcpconfig.properties")); Class.forName((String) prop.get("driverClassName")); //建立資料來源 工廠模式 --> 建立 dataSource = BasicDataSourceFactory.createDataSource(prop); } catch (Exception e) { e.printStackTrace(); } } //獲取連線 public static Connection getConnection() throws Exception { 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(); } } } }
Demo.java
package com.zyx.lesson_databasepool;
import com.zyx.lesson_databasepool.utils.JdbcUtils_DBCP;
import java.sql.Connection;
import java.sql.PreparedStatement;
/**
* @PROJECT_NAME : database
* @PACKAGE_NAME : com.zyx.lesson_databasepool
* @NAME : Demo
* @SITE :
* @DATE : 2022/3/30
* @TIME : 9:59
* @DAY_NAME_FULL : 星期三
* @USER : yaaxi
* @AUTHOR : 星垂月流
**/
public class Demo {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement st = null;
try {
conn = JdbcUtils_DBCP.getConnection();
String sql = "use stu; select * from grade";
st = conn.prepareStatement(sql);
boolean execute = st.execute();
System.out.println(execute);
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcUtils_DBCP.release(conn,st,null);
}
}
}