創建連接池 package com.oraec.jdbcutil; import java.beans.PropertyVetoException;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLExce ...
創建連接池
package com.oraec.jdbcutil;
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
*鏈接池
*/
public class JDBCUtil {
// 驅動
private final static String DRIVER_CLASS = "oracle.jdbc.OracleDriver";
// URL
private final static String URL = "jdbc:oracle:thin:@localhost:1521:orcl";
// 用戶名
private final static String USER = "scott";
// 密碼
private final static String PASSWORD = "oraec";
private static ComboPooledDataSource datasouce;
static {
try {
// 創建類連接池
datasouce = new ComboPooledDataSource();
// 設置載入驅動
datasouce.setDriverClass(DRIVER_CLASS);
// 設置URL
datasouce.setJdbcUrl(URL);
// 設置用戶名
datasouce.setUser(USER);
// 設置密碼
datasouce.setPassword(PASSWORD);
// 設置初始化連接數量
datasouce.setInitialPoolSize(5);
// 設置連接池每次增加連接的數量
datasouce.setAcquireIncrement(3);
// 設置連接池最大連接數量
datasouce.setMaxPoolSize(50);
// 設置連接池最小連接數量
datasouce.setMinPoolSize(3);
// 設置閑置連接最大存活時間 gc
datasouce.setMaxIdleTime(200);
} catch (PropertyVetoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
*得到鏈接
*@return
*/
public static Connection getConnection(){
try {
return datasouce.getConnection();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException();
}
}
public static void main(String[] args) {
System.out.println(getConnection());
}
/**
*關閉資源
*
*@param rs
*@param st
*@param conn
*/
public static void isClose(ResultSet rs,Statement st,Connection conn){
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();
}
}
}
}
package com.oraec.jdbcutil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.*;
public class JDBCTemplate {
//泛型 方法泛型
/**
* 針對同一張表的 不同條件的查詢方法 users
* Object... 作為形參 代表任意個數的任意類型參數
*/
public List<Map<String,Object>> queryForList(String sql,Object...obj){
List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
Connection conn=JDBCUtil.getConnection();
PreparedStatement ps=null;
ResultSet rs=null;
try {
ps = conn.prepareStatement(sql);
//拼接參數
setParameters(ps, obj);
//執行
rs=ps.executeQuery();
//通過結果集得到元數據 相當於得到了資料庫中一個表結構
ResultSetMetaData rsm=rs.getMetaData();
//得到一條數據 一共有多少列
int num=rsm.getColumnCount();
while(rs.next()){
// System.out.println(rs.getInt(1));
// System.out.println(rs.getString(2));
// System.out.println(rs.getString(3));
// System.out.println(rs.getString(4));
// System.out.println(rs.getString(5));
// System.out.println(rs.getString(6));
Map<String, Object> map=new HashMap<String, Object>();
for (int i = 1; i <=num; i++) {
System.out.println(rsm.getColumnLabel(i));
//得到列名作為map的鍵,再通過列名獲取rs結果集中的對應數據作為map的值
map.put(rsm.getColumnLabel(i),rs.getObject(rsm.getColumnLabel(i)));
list.add(map);
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
/**
* 設置預處理參數的方法
* @param ps
* @param obj
*/
public void setParameters(PreparedStatement ps,Object...obj){
if(obj!=null){
for (int i = 0; i < obj.length; i++) {
try {
ps.setObject(i+1,obj[i]);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
實列運用
package com.oraec.jdbctest;
import java.util.List;
import java.util.Map;
import com.oraec.jdbcutil.JDBCTemplate;
public class Test {
public static void main(String[] args) {
String sql = "select * from past where name=?";
JDBCTemplate jt = new JDBCTemplate();
List<Map<String, Object>> list = jt.queryForList(sql, new Object[]{"asd"});
System.out.println(list.size());
}
}