在Java Web开发中,Tomcat本身是一个Servlet容器,并不直接提供数据库功能,但可以通过集成JDBC(Java Database Connectivity)来与数据库交互,以下是调用Tomcat中数据库的详细步骤和注意事项,帮助开发者高效实现数据连接与操作。

配置数据库驱动
需要下载对应数据库的JDBC驱动jar包,例如MySQL的mysql-connector-java.jar,将驱动包放入Tomcat的lib目录下,这样所有部署在Tomcat中的应用都能共享该驱动,若使用Maven或Gradle管理项目,可直接在pom.xml或build.gradle中添加依赖,无需手动放置驱动。
创建数据库连接池
直接使用DriverManager获取连接效率较低,推荐通过连接池管理连接,Tomcat内置了Tomcat JDBC Connection Pool,性能优异且易于配置,在应用的META-INF/context.xml中添加连接池配置,示例如下:
<Resource name="jdbc/myDB"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb?useSSL=false"
username="root"
password="password"
maxTotal="100"
maxIdle="30"
maxWaitMillis="10000"/> 配置参数包括驱动类、URL、用户名、密码以及连接池的最大连接数、空闲数等。
在应用中调用连接池
通过JNDI(Java Naming and Directory Interface) lookup获取连接池实例,在Servlet或JSP中,可通过以下代码获取连接:

Context initContext = new InitialContext();
DataSource ds = (DataSource) initContext.lookup("java:comp/env/jdbc/myDB");
Connection conn = ds.getConnection(); 使用完毕后,务必调用conn.close()将连接返回连接池,而非物理关闭。
执行SQL操作
获取连接后,可通过Statement或PreparedStatement执行SQL,推荐使用后者以防止SQL注入,示例:
String sql = "SELECT * FROM users WHERE id = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, userId);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
// 处理结果集
}
rs.close();
pstmt.close(); 异常处理与资源释放
数据库操作需处理SQLException,并确保ResultSet、Statement和Connection等资源通过try-finally或try-with-resources关闭,避免资源泄漏。
相关问答FAQs
Q1: 为什么推荐使用连接池而非直接创建连接?
A1: 连接池通过复用连接减少了频繁创建和销毁连接的开销,提升了系统性能,连接池可管理最大连接数,避免数据库因过多连接而崩溃,适合高并发场景。

Q2: 如何解决Tomcat中连接池配置不生效的问题?
A2: 检查context.xml中的Resource配置是否正确,确保name属性与代码中的JNDI名称一致,若使用Tomcat 9以上版本,需确认驱动类名是否为com.mysql.cj.jdbc.Driver(旧版为com.mysql.jdbc.Driver),确保应用有访问java:comp/env的权限,可通过web.xml中的resource-ref声明资源引用。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复