Oracle>Java代码中获取连接 配置工作完成后,最后一步就是在Java代码中通过JNDI查找来获取数据库连接,这会在Servlet、DAO(Data Access Object)层或一个专门的工具类中完成。
以下是一个在Servlet中获取并使用数据库连接的示例:
import javax.naming.InitialContext;import javax.naming.NamingException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.sql.DataSource;import java.io.IOException;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;@WebServlet("/testConnection")public class TestConnectionServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {// 1. 获取JNDI初始上下文InitialContext ctx = new InitialContext();// 2. 查找数据源// "java:comp/env" 是JNDI的标准环境命名上下文前缀DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/MyOracleDS");// 3. 从数据源获取连接conn = ds.getconnection();// 4. 执行数据库操作ps = conn.prepareStatement("SELECT 'Hello from Oracle!' AS message FROM DUAL");rs = ps.executeQuery();if (rs.next()) {response.getWriter().println("数据库连接成功!消息: " + rs.getString("message"));}} catch (NamingException e) {response.getWriter().println("JNDI查找失败: " + e.getMessage());e.printStackTrace();} catch (SQLException e) {response.getWriter().println("SQL执行失败: " + e.getMessage());e.printStackTrace();} finally {// 5. 关闭资源,将连接返还给连接池// 使用try-with-resources语句可以更优雅地处理资源关闭if (rs != null) { try { rs.close(); } catch (SQLException e) {} }if (ps != null) { try { ps.close(); } catch (SQLException e) {} }if (conn != null) { try { conn.close(); } catch (SQLException e) {} }}}}注意:在块中关闭
Connection、PreparedStatement和是至关重要的,调用conn.close()并非真正关闭物理连接,而是将其“归还”给连接池,供其他请求复用,忘记关闭连接是导致连接泄漏最常见的原因。连接池参数详解与优化
合理设置连接池参数是发挥其最大效能的关键。
相关问答FAQs
Q1: tomcat自带的连接池与其他第三方连接池(如HikariCP、Druid)相比有何优劣?
Tomcat自带的连接池(Tomcat JDBC Pool)是基于Apache Commons DBCP优化而来的,性能和稳定性都相当不错,并且与Tomcat容器无缝集成,配置简单,无需引入额外的依赖库,对于大多数中小型应用,它已经完全足够,像HikariCP这样的“零开销”高性能连接池,在极端高并发场景下通常能提供更低的延迟和更高的吞吐量,被誉为目前最快的JDBC连接池,Druid则以其强大的监控功能著称,如果你的应用对数据库连接性能有极致要求,或者需要非常详细的监控统计,可以考虑替换为HikariCP或Druid,替换方式通常是移除Tomcat默认的连接池配置,将第三方连接池的JAR包放入目录,并修改的属性为对应的实现类。
Q2: 如何判断我的连接池配置是否合理,或者是否存在连接泄漏?
判断连接池配置和诊断连接泄漏可以从以下几个方面入手:
如何正确配置Tomcat的Oracle-JNDI连接池
本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。















发表评论