1.利用c3p0.ComboPooledDataSource 创建数据库连接,和jdbc的没有太大区别
import java.beans.PropertyVetoException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
* 创建数据库连接
* @author amicable
*
*/
public class DBPool {
private static DBPool dbPool;
//数据库连接对象 可以利用该对象获取connection 从而查询数据库信息
private ComboPooledDataSource dataSource;
//数据库连接文件坐在位置
private static final String CONFIG_FILE = "config.properties";
//保存数据信息
private static Map<String, String> cfgMap = new HashMap<String, String>();
//初始哈
static {
try {
//初始化连接信息到cfgMap中
initConfig();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//创建了解类的实例 初始化连接信息
dbPool = new DBPool();
}
public static void initConfig() throws FileNotFoundException, IOException{
String path = DBPool.class.getResource("/").getPath();
String fileName = path + CONFIG_FILE;
File file = new File(fileName);
if(null != file && file.exists()){
Properties p = new Properties();
p.load(new FileInputStream(file));
cfgMap.put("db.driver", p.getProperty("db.driver"));
cfgMap.put("db.url", p.getProperty("db.url"));
cfgMap.put("db.username", p.getProperty("db.username"));
cfgMap.put("db.password", p.getProperty("db.password"));
}else{
cfgMap.put("db.driver", "com.mysql.jdbc.Driver");
cfgMap.put("db.url", "jdbc:mysql://...../数据库名?characterEncoding=utf8");
cfgMap.put("db.username", "用户名");
cfgMap.put("db.password", "密码");
}
}
/**
* 构造方法初始化连接信息
*/
public DBPool() {
try {
dataSource = new ComboPooledDataSource();
dataSource.setUser(cfgMap.get("db.username"));
dataSource.setPassword(cfgMap.get("db.password"));
dataSource.setJdbcUrl(cfgMap.get("db.url"));
dataSource.setDriverClass(cfgMap.get("db.driver"));
// 设置初始连接池的大小!
dataSource.setInitialPoolSize(2);
// 设置连接池的最小值!
dataSource.setMinPoolSize(1);
// 设置连接池的最大值!
dataSource.setMaxPoolSize(10);
// 设置连接池中的最大Statements数量!
dataSource.setMaxStatements(20);
// 设置连接池的最大空闲时间!
dataSource.setMaxIdleTime(30);
} catch (PropertyVetoException e) {
throw new RuntimeException(e);
}
}
/**
* 获得连接类实例
*/
public final static DBPool getInstance() {
return dbPool;
}
/**
* 根基c3p0.ComboPooledDataSource 获得connection 连接对象
* 使用connection可以对数据库进行操作
*/
public final Connection getSaasConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
throw new RuntimeException("无法从数据源获取连接 ", e);
}
}
}
2.利用连接操作数据库
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
//查询的帮助类 有就用 自己写很累的
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
public class BaseDAO {
//创建查询对象
private static QueryRunner qr = new QueryRunner();
/**
* 查询数据
*/
public long getCount(String sql) throws SQLException{
//利用qr的query查询
/**
* 参数1 数据库连接
* 参数2 sql语句
* 参数3 这个是用来处理结果的内部类 ResultSet是该sql返回的数据
*/
Object obj = qr.query(DBPool.getInstance().getSaasConnection(), sql, new ResultSetHandler(){
@Override
public Object handle(ResultSet rs) throws SQLException {
return rs.getInt(0);
}
});
return Long.parseLong(String.valueOf(obj));
}
}