- 使用连接池连接数据库
首先在一下apache中的conf文件夹中的context.xml文件添加下面这段配置信息
<Resource
name="jdbc/message"
auth="Container"
type="javax.sql.DataSource"
maxActive = "100"
maxIdle="30" maxWait="10000" username="root" password="123456"
driverClassName = "com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/message"
/>
可将上面的配置信息直接在项目中创建一个context.xml文件将信息复制进去
当然也可在项目中的web.xml中写入配置信息(二者选其一)
<resource-ref>
<description>news DateSource</description>
<res-ref-name>jdbc/message</res-ref-name>
<res-type>javax.sql.DateSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
在BaseDao中的连接方法如下
public Connection getConnection(){
Context ctx = null;
try {
ctx = new InitialContext();//初始化上下文
DataSource ds= (DataSource)ctx.lookup("java:comp/env/jdbc/message");//date对象
conn = ds.getConnection();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
记得添加mysql的jar包,这点很重要!
一个动态的网站频繁地从数据库中取得数据来构成html页面。每一次请求一个页面都会发生数据库操作。但连接数据库却是一个需要消耗大量时间的工作,因为请求连接需要建立通讯,分配资源,进行权限认证。这些工作很少能在一两秒内完成。所以,建立一个连接,然后再后续的查询中都使用此连接会大大地提高性能。因为servlet可以在不同的请求间保持状态,因此采用数据库连接池是一个直接的解决方案。
Servlet在服务器的进程空间中驻留,可以方便而持久地维护数据库连接。接下来,我们介绍一个完整的连接池的实现。在实现中,有一个连接池管理器管理连接池对象,其中每一个连接池保持一组数据库连接对象,这些对象可为任何servlet所使用。
一、数据库连接池类 DBConnectionPool,提供如下的方法:
1、从池中取得一个打开的连接;
2、将一个连接返回池中;
3、在关闭时释放所有的资源,并关闭所有的连接。
另外,DBConnectionPool还处理连接失败,比如超时,通讯失败等错误,并且根据预定义的参数限制池中的连接数。
二、管理者类,DBConnetionManager,是一个容器将连接池封装在内,并管理所有的连接池。它的方法有:
1、 调用和注册所有的jdbc驱动程序;
2、 根据参数表创建DBConnectionPool对象;
3、 映射连接池的名字和DBConnectionPool实例;
4、 当所有的连接客户退出后,关闭全部连接池。
Tomcat数据库连接池技术
在其Tomcat的安装目录\conf\Context 文件中,找到Context标签,在Context节点中加入一个子标签Resource,配置如下:
<Resource name="jdbc/mysql" auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/library?characterEncoding=GBK"
username="root"
password="root"
maxActive="200"
maxIdle="50"
maxWait="3000"/>
配置Context.xml效果如下:
2.在你的项目中找到WEB-INF文件夹中的web.xml文件并打开,在web-app节点中加入resource-ref标签,配置如下:
</welcome-file-list>
<!-- 引用数据库连接池 -->
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mysql</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
配置web.xml效果如下:
至此,数据库连接池的配置已经完成。
注意:
若用eclipse编写servlet程序时,仅仅修改Tomcat安装目录中的Context文件是不够的,还需要修改你所编写的项目中的Context文件(打开eclipse中的Project Explorer,在servers文件夹下的Context.xml文件),修改的代码和Tomcat中的context文件代码一致。此举可解决Cannot create JDBC driver of class “for connect URL null”问题。
如果不在项目的WEB-INF中添加context.xml文件,则需要在tomcat\conf\catalina\localhost文件夹中添加.xml(这个代表你的项目的名称),添加代码:
<Context docBase="D:\jee workspace\tomcat11\WebContent" debug="0">
<ResourceLink name="mysqlDataSource" global="jdbc/mysql" type="javax.sql.DataSource"/>
</Context>
配置完后,数据库连接成功。
原文链接:https://blog.csdn.net/pride_xu/article/details/78285326
Servlet实现注册+数据库连接—连接池
本文章只是提供部分源码,一个思路来实现一个简单的数据库注册的功能连接的功能
总体流程:
配置c3p0-config.xml,导入jar包。
创建JDBCUtils类,实现数据库资源连接和释放
创建页面:action指向对应的servlet
创建servlet,获取页面输入参数,连接数据库,进行insert操作
配置web.xml文件
一、 注册页面
自己填写表单,form标签的action填写对应需要处理的servlet类
二、 c3p0-config.xml配置文件(名字不能改位置在src根目录下,数据库名字,用户名,密码根据自己的填写)
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">
com.mysql.jdbc.Driver
</property>
<property name="jdbcUrl">
jdbc:mysql:///user?useUnicode=true&characterEncoding=utf-8//防止乱码
</property>
<property name="user">
root
</property>
<property name="password">
123
</property>
</default-config>
</c3p0-config>
三、 所需jar包
WebContent/WEB-INF/lib目录下
c3p0.jar/mysql-connector.jar
下载地址:https://download.csdn.net/download/qq_36826635/10605648
四、 Web.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>User</display-name>
<welcome-file-list>
<welcome-file>backend/regist.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>自己的servlet名字</display-name>
<servlet-name>自己的servlet名字</servlet-name>
<servlet-class>自己的servlet路径</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>自己的servle名字</servlet-name>
<url-pattern>自己的访问路径</url-pattern>
</servlet-mapping>
</web-app>
五、 JDBCUtils类
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class JDBCUtils {
private static ComboPooledDataSource pool
= new ComboPooledDataSource();
private JDBCUtils() {}
/**3.提供getConn方法, 用于从连接池中获取一个连接对象 */
public static Connection getConn() throws Exception {
try {
return pool.getConnection();
} catch (SQLException e) {
e.printStackTrace();
throw e;
}
}
/**
* 4.提供close方法, 用于释放资源
* @param conn 连接对象
* @param ps 传输器对象
* @param rs 结果集对象
*/
public static void close(Connection conn, Statement stat,
ResultSet rs) {
if(rs != null ){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
rs = null;
}
}
if(stat != null ){
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
stat = null;
}
}
if(conn != null ){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
conn = null;
}
}
}
}
六、 ProdAddServlet类
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 处理商品的添加请求
* @author:KaiLeon
* @time:2018年8月17日 下午3:45:43
*/
public class ProdAddServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
//0.处理请求参数乱码
request.setCharacterEncoding("utf-8");
//0.处理响应乱码
response.setContentType("text/html;charset=utf-8");
//1.获取添加的用户(请求参数)
String name = request.getParameter("name");
String category = request.getParameter("password");
//2.将用户信息添加到数据库保存
addUser(name,password);
//3.提示用户添加成功,3秒跳转到主页面
PrintWriter out = response.getWriter();
out.write("<h1 style='color:green;magin:15px 5px;'>");
out.write("添加成功,"
+ "3秒跳转到商品列表页面");
out.write("</h1>");
//4.定时刷新,3秒跳转商品列表
response.setHeader("Refresh", "3;url="
+request.getContextPath()
+"主页面");
}
/**
* 将用户信息加入到数据库
*/
private void addUser(
String name, String passwoord) {
Connection conn = null;
PreparedStatement ps = null;
try {
//1.获取数据库连接
conn = JDBCUtils.getConn();
//2.声明sql骨架
String sql = "insert into user values(null,?,?)";
//3.获取传输器
ps = conn.prepareStatement(sql);
//4.设置sql参数
ps.setString(1, name);
ps.setString(2, password);
//5.执行sql语句,添加商品信息
ps.executeUpdate();//注意不要传sql
System.out.println("插入成功");
} catch (Exception e) {
e.printStackTrace();//一定将异常信息打印出来
System.out.println("添加失败");
}finally {
//释放资源
JDBCUtils.close(conn, ps, null);
}
}
protected void doPost(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
————————————————
原文链接:https://blog.csdn.net/qq_36826635/article/details/81807073
https://www.cnblogs.com/nuccch/p/8120349.html
https://blog.csdn.net/dzy21/article/details/51952138?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-6.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-6.control
https://blog.csdn.net/tuke_tuke/article/details/51532510?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-2.control
https://blog.csdn.net/Ljj657137723/article/details/45151217?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242
https://www.cnblogs.com/xdp-gacl/p/4002804.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)