一、導入相關jar包
ojdbc14.jar(Oracle用的) 或 mysql-connector-java-5.1.17.jar(mysql用的)、jsonplugin-0.34.jar(業務中封裝數據用到,可生成json格式的數據)、commons-pool-1.5.5.jar、commons-dbcp-1.4.jar、額外的幾個jar包:commons-logging-1.1.3.jar、commons-io-2.4.jar、commons-fileupload-1.3.1.jar、log4j-1.2.17.jar
二、數據庫配置文件 dbconfig.properties
url=jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=utf-8
driverClassName=com.mysql.jdbc.Driver
username=root
password=dap1234$
#連接池啟動時創建的初始化連接數
initialSize=10
#連接池在同一時間能夠分配的最大活動連接的數量
maxActive=30
#最大空閒連接,超過的將被釋放
maxIdle=10
#最小空閒連接,低於之將創建新的連接
minIdle=5
#當沒有可用連接時,連接池等待連接被歸還的最大時間,超時則拋異常
#(比如debug時佔着連接不放,正常情況下業務處理完後即會釋放當前使用的連接)
maxWait=10000
#用來驗證從連接池中取出的連接
validationQuery=select current_date()
#當下面兩個參數都為true時表示會在每次請求之前和之後進行連接池測試,如果
#連接失效(比如mysql默認8小時後服務器自動斷開該連接)就會銷燬之並創建一個新的連接對象,
#但此次的數據庫操作也就失敗了,可能會對寫操作有影響
#使用時一定要配置validationQuery參數纔有效
testOnBorrow=false
testOnReturn=false
#指明連接是否被空閒連接回收器進行檢驗,如果檢測失效則連接將被從池中去除
testWhileIdle=true
#超過180秒後,是否進行沒用連接(廢棄)的回收(默認爲false)
removeAbandoned=true
#超過時間限制,回收沒有用(廢棄)的連接(默認爲 300秒)
removeAbandonedTimeout=180
#標記當Statement或連接被泄露時是否打印程序的stack traces日誌
logAbandoned=false
#每過30000毫秒對連接池進行一次檢測,將對象閒置時間超過1800000毫秒的對象進行銷燬,
#並創建新的對象來替代。這樣就能保證時刻都有正常的連接池對象存在
timeBetweenEvictionRunsMillis=300000
#回收線程(空閒連接回收器線程)運行時檢查的連接數量
numTestsPerEvictionRun=5
#連接在池中保持空閒而不被回收的最小時間值
minEvictableIdelTimeMillis=3600000
三、創建工具類供創建並獲取連接,關閉連接
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
public class BaseDao {
private static DataSource ds = null;
static{
try {
InputStream is = BaseDao.class.getClassLoader().getResourceAsStream("dbconfig.properties");
Properties prop = new Properties();
prop.load(is);
ds = BasicDataSourceFactory.createDataSource(prop);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Connection getConn() throws SQLException{
return ds.getConnection();
}
public void closeAll(Connection conn,Statement state,ResultSet set){
try {
if(set!=null){
set.close();
}
if(state!=null){
state.close();
}
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
附上不用連接池單個連接樣例:
import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; public class BaseDao { /*public static final String DRIVER="oracle.jdbc.driver.OracleDriver"; public static final String URL="jdbc:oracle:thin:@10.43.139.205:1521:senti"; public static final String USERNAME="owluser"; public static final String PWD="owl1qaz";*/ public static final String DRIVER="com.mysql.jdbc.Driver"; public static final String URL="jdbc:mysql://10.43.165.151:3306/ontylogy?useUnicode=true&characterEncoding=utf-8"; public static final String USERNAME="root"; public static final String PWD="mysql180"; public Connection getConn() throws ClassNotFoundException, SQLException{ Class.forName(DRIVER); Connection conn=DriverManager.getConnection(URL, USERNAME, PWD); return conn; } public void clossAll(Connection conn,Statement state,ResultSet rs){ try { if(rs!=null){ rs.close(); } if(state!=null){ state.close(); } if(conn!=null){ conn.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
四、服務層創建服務類需要繼承上面的工具類,以便調用連接池中的連接,並查詢結果
Connection conn=null;
Statement state=null;
ResultSet rs=null;
Map<String, Object> map=new HashMap<String, Object>();
try {
conn=getConn();
state=conn.createStatement();
rs=state.executeQuery(sql);
if (rs.next()) {
map.put("pwd", rs.getString("upassword"));
map.put("right", rs.getInt("uright"));
//result=JSONUtil.serialize(map);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
closeAll(conn, state, rs);
}