通过数据库连接池对数据库进行增删改查的操作
c3p0是一个库。它扩展了传统的jdbc数据库连接池,并且支持JDBC3规范和JDBC2的标准扩展。通过数据库池连接数据库比传统的数据库连接要有许多优点 传统数据库需要建立连接,断开连接,而通过数据库连接池则不需要这样进行,数据库连接池在初始化时,就已经建立连接,所以如果要使用数据库,则相当于在数据库池中找一个空闲的连接就行,不需要数据库时,则将连接再放回池子中即可。
完成以后就是这样子的 点击del会删除 点击update可以更新 点击 insert可以增加
通过数据库池连接需要相应的jar包
这里面除了最后一个和倒数第3个应该都是关于数据库连接池的jar包 我每次都会全放进项目里,所以也不是很清楚 将这些jar包拖到
这个位置就可以了。
然后接下来就是配置c3p0-config.xml文件 一定是xml文件
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/class</property> ---最后面的这个class是你建的数据库的名字
<property name="user">root</property> ----这是你的数据库账号的名字 不是表名 也不是数据库名字!!!
<property name="password">fjw010307</property>---这是你数据库的密码
</default-config>
</c3p0-config>
将配置文件放在src下面 不要放在包内
配置完这些 距离成功连接就不晚了
接下来就可以进行配置工具类了
public class ClassDao {
QueryRunner runner=new QueryRunner(new ComboPooledDataSource());//QreryRunner类(org.apache.commons.dbutils.QueryRunner) 是Dbutils的核心类之一,它显著的简化了SQL查询 这个记住就可以了 如果想要更深入的了解 就去查一查
public List findAll() throws SQLException//查询所有信息 返回的集合
{
String sql="select * from Lesson"; //这是你的sql语句
List list=(List) runner.query(sql, new BeanListHandler(Lesson.class));//这一句的意思是执行sql语句 将查询的结果集给list
return list;
}
```
在数据库中删除↓
public boolean del(String classname) throws SQLException
{//通过classname进行删除 这里的classname是我数据库里的自己的一个数据
String sql="delete from Lesson where Classname=?";//sql语句 这是
int num=runner.update(sql,classname);//这里的classname是sql语句里的第一个?
if (num>0)//对返回的进行判断 如果大于0 则是操作成功 返回true
{
return true;
}else {
return false;
}
}
在数据库中插入↓
public boolean insert(Lesson lesson) throws SQLException
{//增加
String sql="insert into lesson(Classname,Teachername,StudentNum) values(?,?,?)";//sql语句
int num=runner.update(sql, lesson.getClassname(),lesson.getTeachername(),lesson.getStudentNum());//这是问号对应的数据
if (num>0)
{
return true;
}else {
return false;
}
}
这里是更新 (个人认为更新应该是这四个里最难的了)
public boolean update(Lesson lesson) throws SQLException
{//更新
String sql="update lesson set Teachername=?,StudentNum=? where Classname=? ";
int num=runner.update(sql, lesson.getTeachername(),lesson.getStudentNum(),lesson.getClassname());
if(num>0)
{
return true;
}else
{
return false;
}
}
以上是增删改查了 下一步就是建立显示页面了
这个只做了表格 没有做其他页面的东西 这个页面会显示出来数据库的东西
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@page import="java.util.List"%><!-- 这里是导包 导进LIist的包 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<table>
<tr>
<td>className</td>
<td>TeacherName</td>
<td>StudentNum</td>
</tr>
<c:forEach items="${sessionScope.alllesson}" var="lesson"><!-- jsp里的遍历集合 items里是要遍历的集合 而var是这个集合里当前遍历的对象 -->
<tr>
<td>${lesson.classname}</td>
<td>${lesson.teachername}</td>
<td>${lesson.studentNum}</td>
<td><a href="Lessonservlet?opre=del&classname=${lesson.classname}">del</td><!-- 点击这里的del就会删除 -->
<td><a href="update.jsp?classname=${lesson.classname}">update</td>
</tr><!-- 点击这里将会更新 先跳转到更新页面 -->
</c:forEach>
</table>
<td><a href="insert.jsp">insert</td><!-- 点击这里会跳转到添加页面 -->
</body>
</html>
点击 insert 后会到这个页面 就是增加页面
增加页面代码如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>增加</title>
</head>
<body>
<form action="Lessonservlet?opre=insert" method="post">
<table>
<tr>
<td>班级名称:</td>
<td><input type="text" name="classname"></td>
</tr>
<br>
<tr>
<td>教师名称:</td>
<td><input type="text" name="teachername"></td>
</tr>
<br>
<tr>
<td>学生数量:</td>
<td><input type="text" name="studentnum"></td>
</tr> 这就是增加页面 要注意这里的name的值 name的值就是servlet里要获取的属性的名字 后面要用的到的
<tr>
<td><input type="submit" value="添加"></td>
</tr>
</form>
</body>
</html>
下面来写servlet类
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//response.getWriter().append("Served at: ").append(request.getContextPath());
String opre=request.getParameter("opre");//这里是得到 opre 的值 将这个值给这里定义的opre
//System.out.println(opre);
ClassDao dao=new ClassDao();
if("select".equals(opre))
{//这里是查询
HttpSession session=request.getSession();//利用session 保存查询出来的集合
try {
List<Lesson> alllesson=dao.findAll();
session.setAttribute("alllesson", alllesson);//如果不大明白这一句 就去查一下session
response.sendRedirect("list.jsp");//跳转
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if("update".equals(opre))//更新
{
HttpSession session = request.getSession();
String classname=(String) session.getAttribute("classname"); //这里也是session的使用
//String classname= (String) request.getAttribute("classname");
System.out.println("classname是"+classname);
String teachername=request.getParameter("teachername");
System.out.println("教师名字是"+teachername);
int studentnum=Integer.parseInt(request.getParameter("studentnum"));//获得的数据是String类型的 这里要转换成int
//System.out.println("学生数量是"+studentnum);
Lesson lesson=new Lesson(classname,teachername,studentnum);
try {
boolean K=dao.update(lesson);
if(K)
{
response.sendRedirect("index.jsp");
}else {
System.out.println("跟新失败");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if("insert".equals(opre))
{
String classname=request.getParameter("classname");
String teachername=request.getParameter("teachername");
int studentnum=Integer.parseInt(request.getParameter("studentnum"));
Lesson lesson=new Lesson(classname,teachername,studentnum);
try {
boolean K=dao.insert(lesson);
if(K)
{
response.sendRedirect("index.jsp");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if("del".equals(opre))
{
String classname=request.getParameter("classname");
System.out.println(classname);
try {
boolean K=dao.del(classname);
if(K)
{
response.sendRedirect("index.jsp");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
最后就是更新了 我这里实现的是点击每一行后面的更新就可以跳转到更新页面 不需要再输入需要更新的classname 也是利用session传值的
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@page import="javax.servlet.http.HttpSession"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>更新</title>
</head>
<body>
<%String classname=request.getParameter("classname");
//获取classname
session.setAttribute("classname",classname);
//set session
%>
<form action="Lessonservlet?opre=update&classname1=<%=classname %> " method="post">
<tr>
<td>班级名字:<%=classname %></td>
</tr>
<br>
<tr>
<td>教师名字:</td>
<td><input type="text" name="teachername"></td>
</tr>
<br>
<tr>
<td>学生数量:</td>
<td><input type="text" name="studentnum"></td>
</tr>
<br>
<tr>
<td><input type="submit" value="update"></td>
</tr>
</form>
</body>
</html>
以上就用j数据库连接池完成了增删改查 虽然页面显示并不是这莫完美
还希望大家多点赞👍