一个无框架的数据库连接池
来源:互联网 发布:怎么找加入淘宝客推广 编辑:程序博客网 时间:2024/05/09 11:07
最近在做一个项目,突然觉得数据库连接池的重要性,然后在网上各种百度、goolge,好多都是配置,起初我也迷恋上了配置,但我这项目里没用框架,配置也是可以的,但我最后也没有找到能在我项目里用的,有一种配置还是只能用tomcat来解析,意思是只能在jsp里用,对javacompevn的研究后发现不可能,为了这我还加了java交流群,有个人说的挺好,我在main方法里想要用‘com evn’就好比在main里直接调用js一样,最后我不再迷恋配置,还是手写了一下,在这里,我就说一下我的代码解析:
第一步:
在web.xml里的配置:
<listener>
<listener-class>cn.llhc.edu.servlet.MyListener</listener-class>
</listener>
这主要是触发MyListener类
第二步:
MyListener类:
publicclass MyListenerimplementsServletContextListener {
private ServletContextcontext = null;
publicvoidcontextDestroyed(ServletContextEvent event){
//Output asimple message to the server's console
System.out.println("The SimpleWeb App. Has Been Removed");
this.context =null;
}
//这个方法在Web应用服务做好接受请求的时候被调用。
在web项目启动时,调用contextInitialized方法,在这里获取context对象,然后把创建好的连接池放到context对象里来共享
this.context =event.getServletContext();
//Output asimple message to the server's console
DBConnPool dbPool =new DBConnPool();
dbPool.creatDbPool();
System.out.println(dbPool);
context.setAttribute("dbPool", dbPool);
System.out.println("数据库连接池已建好,放了50个连接");
}
}
第三步:
DBConnPool类
publicclass DBConnPool {
这个方法就是来创建连接的,然后把连接放到list里
public DBConnPool(){}
publicvoid creatDbPool(){
try {
Class.forName("com.mysql.jdbc.Driver");
list = newLinkedList<Connection>();
for (int i = 0; i < 50;i++) {
Stringurl ="jdbc:mysql://localhost:3306/zongce?useUnicode=true&characterEncoding=utf-8";
Connectionconn = DriverManager.getConnection(url,"root","123");
list.add(conn);
}
} catch (Exception e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
}
}
这个方法就是来获取连接池里的一个连接
if(list.size()>0){
returnlist.removeFirst();
}else{
return null;
}
}
publicsynchronizedvoidputBackOneConnetion(Connection conn){
list.addLast(conn);
}
这个方法就是来把用完之后的连接放回连接池中
}
以上三步做好了之后,就配置成功,接下来就来告一下怎么用它
在登录里面说一下怎么用它
publicclass LoginServletextends HttpServlet {
先获取application对象,和前面的context是一个对象,然后再从它里面把数据库连接池拿出来。
protectedvoidservice(HttpServletRequest req, HttpServletResponse resp)
throws ServletException,IOException {
//post处理乱码 法1:
req.setCharacterEncoding("utf-8");
//获取session
HttpSessionsession = req.getSession();
ServletContextapplication = (ServletContext) session
.getServletContext();
DBConnPooldbPool = (DBConnPool) application.getAttribute("dbPool");
//dao层的方法
StudentDaosd =newStudentDaoImpl(dbPool);
TeacherDaotd =newTeacherDaoImpl(dbPool);
MenuDaomd =new MenuDaoImpl(dbPool);
在我的每个dao层的方法里都把dbPool给引了进去。
Stringrole = req.getParameter("role");
Stringid = req.getParameter("id");
Stringpassword = req.getParameter("password");
System.out.println(role+".........");
再说说dao层里的类吧:
在这里写了个有参构造方法,把dbPool给引了进来,然后,下面方法里就可以用了。
publicclass StudentDaoImplimplements StudentDao{
private DBConnPooldbPool = null;
public StudentDaoImpl(){
}
publicStudentDaoImpl(DBConnPool pool){
dbPool = pool;
}
@Override
publicList<Student> findStudentsByClas(String clas) {//根据班号查找学生信息
// TODO Auto-generatedmethod stub
List<Student> users =newArrayList<Student>();
Connectionconn =null;
List<Connection>conns=dbPool.list;
try {
clas ="select *from t_student where fk_cla_id="+clas;
if(conns==null||conns.size()==0)
conn= Conn.getConn();//如果连接池里没有的话,创建一个,方便junit单元测试
else
conn=dbPool.getOneConnetion();
ResultSet rs =conn.createStatement().executeQuery(clas);
// ResultSetrs =Conn.getSql().executeQuery(clas);
while(rs.next()){
Studentuser =new Student();
在这里做了一个判断,如果连接池里有连接,就从中取,如果没有我就直接创建一个连接,这样也方便测试。
user.setStudentName(rs.getString("stu_name"));
user.setClasId(rs.getString("fk_cla_id"));
users.add(user);
最后一步大家不要忘了,记得把连接放回去
} catch (SQLException e){
// TODO Auto-generatedcatch block
e.printStackTrace();
}finally{
if(dbPool!=null)
dbPool.putBackOneConnetion(conn);
}
return users;
}
希望对你有帮助
一个未毕业的IT志向男,大虾们可以多多指点,指出我里面不足的地方
- 一个无框架的数据库连接池
- 一个完整的数据库连接池
- 一个不错的数据库连接池
- 数据库连接池编写自己的jdbc框架
- 原生无框架JDBC实现数据库连接和Servlet页面的基本操作
- proxool数据库连接池框架
- 数据库连接池框架:c3p0
- Java框架数据库连接池
- 一个未成熟的数据库连接池(part 1)
- 一个不错的数据库连接池[转]
- 一个完备的数据库连接池类(bczt)
- 一个完备的数据库连接池类(bczt)
- 一个MS SQL2000的数据库连接池问题
- 一个功能十分强大的数据库连接池
- 一个基本成熟的数据库连接池
- 一个完备的数据库连接池类
- 一个基本成熟的数据库连接池
- 一个效果不错的Java数据库连接池
- 【基础常识】什么是main函数及变量的声明和定义
- POJ 3278 解题报告
- 布线问题 分析与理解
- 因信号量问题导致ORA-27154无法启动数据库
- ZOJ 2711 Regular Words (三维Catalan数)
- 一个无框架的数据库连接池
- PHP采集利器:根据开始字符串和结束字符串截取需要的采集内容数据
- poj2393 Yogurt factory(贪心)
- PHP安装Redis扩展教程
- WM_DEVICECHANGE使用方式
- C++ 模板使用
- hadoop入门笔记 (from udacity)
- poj-2431 贪心+优先队列
- Pow(x, n)