使用C3P0数据库连接池
导入C3P0的开发包和导入配置文件
开发包导入的是这个:c3p0-0.9.2-pre1和mchange-commons-0.2.jar.
C3P0不仅性能好,而且配置文件可以使用XML文档来配置!
类似的配置文件可以在官方文档上找得到!
我们来改造一下:
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<propertyname="driverClass">com.mysql.jdbc.Driver</property>
<propertyname="jdbcUrl">jdbc:mysql://localhost:3306/zhongfucheng</property>
<propertyname="user">root</property>
<propertyname="password">root</property>
<propertyname="acquireIncrement">5</property>
<propertyname="initialPoolSize">10</property>
<propertyname="minPoolSize">5</property>
<propertyname="maxPoolSize">20</property>
</default-config>
<named-configname="mysql">
<propertyname="driverClass">com.mysql.jdbc.Driver</property>
<propertyname="jdbcUrl">jdbc:mysql://localhost:3306/zhongfucheng</property>
<propertyname="user">root</property>
<propertyname="password">root</property>
<propertyname="acquireIncrement">5</property>
<propertyname="initialPoolSize">10</property>
<propertyname="minPoolSize">5</property>
<propertyname="maxPoolSize">20</property>
</named-config>
<named-configname="oracle">
<propertyname="driverClass">oracle.jdbc.driver.OracleDriver</property>
<propertyname="jdbcUrl">jdbc:oracle:thin:@//localhost:1521/事例名...</property>
<propertyname="user">用户名</property>
<propertyname="password">密码</property>
<propertyname="acquireIncrement">5</property>
<propertyname="initialPoolSize">10</property>
<propertyname="minPoolSize">5</property>
<propertyname="maxPoolSize">20</property>
</named-config>
</c3p0-config>
写获取连接的工具类
publicclassDBUtils{
privatestaticComboPooledDataSourcecomboPooledDataSource=null;
static{
//它会自动寻找配置文件,节点为mysql的数据库【如果没有指定,就使用默认的!】
comboPooledDataSource=newComboPooledDataSource("mysql");
}
publicstaticDataSourcegetDataSource(){
returncomboPooledDataSource;
}
publicstaticConnectiongetConnection(){
try{
returncomboPooledDataSource.getConnection();
}catch(SQLExceptione){
e.printStackTrace();
thrownewRuntimeException("数据库初始化失败了!");
}
}
}
设计数据库表
非常简单,根据实体表来设计就好了!
CREATETABLEuser(
id VARCHAR(20)PRIMARYKEY,
usernameVARCHAR(20)UNIQUENOTNULL,
passwordVARCHAR(20) NOTNULL,
email VARCHAR(20),
birthdayDATE
);
写一个操作数据库的Dao实现
publicclassUserImplDataBaseimplementsUserDao{
@Override
publicUserfind(Stringusername,Stringpassword){
returnnull;
}
@Override
publicvoidregister(Useruser){
}
}
下面我们就直接使用DBUtils框架了
- 导入DBUtils的开发包
- 具体的代码如下
@Override
publicUserfind(Stringusername,Stringpassword){
QueryRunnerqueryRunner=newQueryRunner(Utils2DB.getDataSource());
Stringsql="SELECT * FROM user WHERE username=? AND password=?";
try{
Useruser=(User)queryRunner.query(sql,newBeanHandler(User.class),newObject[]{username,password});
returnuser==null?null:user;
}catch(SQLExceptione){
e.printStackTrace();
thrownewRuntimeException("登陆失败了!");
}
}
@Override
publicvoidregister(Useruser){
QueryRunnerqueryRunner=newQueryRunner(Utils2DB.getDataSource());
Stringsql="INSERT INTO user (id, username, password, email,birthday) VALUES (?,?,?,?,?);";
Stringid=user.getId();
Stringusername=user.getUsername();
Stringpassword=user.getPassword();
Stringemail=user.getEmail();
Datedate=user.getBirthday();
try{
queryRunner.update(sql,newObject[]{id,username,password,email,date});
}catch(SQLExceptione){
e.printStackTrace();
thrownewRuntimeException("注册失败了");
}
}
}