我正在使用资源共享方法来处理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
答案 0 :(得分:3)
我认为更好的设计是为每个请求使用连接,并在完成后关闭它。在我看来,它会更好地扩展。
查看JDBC教程。它将向您展示如何获取ResultSet等等:
答案 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模板的东西来简化代码。