【问题标题】:Tomcat Database connection, am I doing this right?Tomcat数据库连接,我这样做对吗?
【发布时间】:2012-02-11 22:11:33
【问题描述】:

我刚刚开始使用资源共享方法来掌握 Tomcat 和 mySQL。一切正常,但我认为我没有正确处理连接。我习惯使用 JDBC 直接连接 MySQL 而不是在 Tomcat 上。

我的 servlet 在第一次运行时调用 intializeConnection(),以后再也不会。但是我认为我实际上应该在每个语句上打开和关闭连接?有人可以调整下面的代码以显示处理连接的正确方法,我有点困惑。

public Connection con;

    public void intializeConnection() throws SQLException, NamingException{
        connect();
    }

    public void connect() throws SQLException, NamingException{

        Context initCtx = new InitialContext();
        Context envCtx = (Context) initCtx.lookup("java:comp/env");
        DataSource ds = (DataSource) envCtx.lookup("jdbc/TestDB");
        con = ds.getConnection();               

    } 

    public void excuteStatement(String query) throws SQLException{
        con.createStatement().executeUpdate(query);
    }

    public ResultSet getResultSet(String query) throws SQLException{
        //not yet implemented

    }

我的第二个问题是,我不知道如何以这种方式返回结果集?

TIA

【问题讨论】:

    标签: java apache tomcat jdbc


    【解决方案1】:

    我认为更好的设计是为每个请求使用一个连接,并在完成后关闭它。在我看来,它会更好地扩展。

    查看 JDBC 教程。它将向您展示如何获取 ResultSet 等等:

    http://docs.oracle.com/javase/tutorial/jdbc/basics/

    【讨论】:

    • 谢谢 Duffy,这就是我的想法,在每个请求上打开和关闭。
    【解决方案2】:

    如果你使用tomcat的一部分连接池会更好,你所要做的就是在一个名为context.xml的文件中定义一个连接池,如果你使用的话,把它放在你的WebContent\META-INF文件夹中eclipse(它位于war文件根目录的META-INF文件夹中)下面是我使用的示例

    <?xml version="1.0" encoding="UTF-8"?>
    <Context>
        <Resource name="jdbc/theDB" 
            auth="Container"
            type="javax.sql.DataSource" 
            driverClassName="org.postgresql.Driver"
            url="jdbc:postgresql://127.0.0.1:5432/theDB"
            username="theusername" 
            password="thepassword" 
            maxActive="20" maxIdle="10"
            maxWait="-1"
        />
    </Context>
    

    然后您可以在每个请求方法中打开和关闭连接。此外,您上面用于查找的代码不需要两次调用 jndi,如果您查找以下字符串 java:comp/env/jdbc/TestDB

    ,则可以执行一次调用

    此外,您不希望返回 ResultSet,而是应返回表示结果集中数据的对象,因此如果您的查询返回 Customer 对象,则您的 getResultSet 方法应称为 getCustomers,它应返回 List

    JDBC 很难正确使用,特别是对于异常处理和关闭语句、连接、结果集......等等,我强烈建议您使用类似 SpringJDBC 模板的东西来简化您的代码。

    【讨论】:

      猜你喜欢
      • 2015-06-09
      • 1970-01-01
      • 2012-08-13
      • 2023-03-19
      • 1970-01-01
      • 2010-10-31
      • 2015-01-13
      • 1970-01-01
      • 2011-10-17
      相关资源
      最近更新 更多