Tomcat数据库连接,我这样做对吗?

时间:2012-02-11 22:11:33

标签: java apache tomcat jdbc

我正在使用资源共享方法来处理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

    }

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

TIA

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:3)

最好使用属于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,如果查找以下字符串,可以执行一次调用:comp / env / jdbc / TestDB

此外,您不希望返回ResultSet,而应返回表示结果集中数据的对象,因此,如果您的查询返回Customer对象,则getResultSet的方法应该被称为getCustomers,它应返回List&lt ;客户和GT;

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