上方脑图给出了思路和步骤,现在补全代码部分:
1.c3p0的配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- 我们希望在配置文件中,出现链接的参数信息 -->
<default-config>
<!-- name 属性定义 链接参数的 key 标签的内容 代表值-->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">
jdbc:mysql://localhost:3306/student?useUnicode=true&characterEnconding =utf-8
</property>
<property name="user">root</property>
<property name="password">root</property>
<!-- 连接池参数 -->
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">10</property>
<property name="checkoutTimeout">9000</property>
</default-config>
</c3p0-config>
2.DB类通过懒汉式单例实现数据库连接的优化(数据库连接池):
package dao;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
//导包
public class DB{
Connection con=null;//声明一个连接
PreparedStatement ps=null;//声明一个状态
ResultSet rs=null;//声明一个结果集
private DB(){
}//DB类的私有构造方法
private static DB db=null;//声明一个私有静态对象
public static DB Instance(){
if (db==null){
db=new DB();
}
return db;
}//(懒汉式单例)该类的对象有且只有一个,且静态共享内存,该方法返回一个DB对象
//DB类中的方法可以通过DB.Instance()对象调出;
public Connection getConnect() throws SQLException {
ComboPooledDataSource cpds=new ComboPooledDataSource("c3p0-config.xml");
con=cpds.getConnection();
return con;
}//通过c3p0内置方法ComboPooledDataSource,获取c3p0配置文件中的数据库详细信息,
// 若要换数据库可以通过更改配置文件的方法实现数据库种类和不痛苦的转换,大大提升了可移植性;
// 获取数据库连接的方法;
public void close(Connection con,PreparedStatement ps) throws SQLException {
if (ps!=null){
ps.close();
}
if (con!=null){
con.close();
}
}//数据库的关闭连接,状态的方法
public void close(Connection con,PreparedStatement ps,ResultSet rs) throws SQLException {
if (rs!=null){
rs.close();
}
if (ps!=null){
ps.close();
}
if (con!=null){
con.close();
}
}//数据库的关闭连接,状态,释放资源的方法
}
3.其他的网页部分省略,dao层接口实现类(对数据库的操作),BL层的service(调用dao层实现类作为返回值),controller中的servlet调用service实现类方法等在此省略;更多的在于配置。
2020年7月23日