我试着编写一个下面的代码,其中两个数据库连接正在打开和关闭,所以在TOO MANY CONNECTION问题方面会出现任何问题吗?我没有收到任何错误,只是想确认下面的代码是否存在任何问题。
<%
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(connectionURL, username, password);
statement = connection.createStatement();
try {
rs1 = statement.executeQuery("SELECT QUERY");
if (rs1.next()) {
try {
PreparedStatement ps1 = DriverManager.getConnection(connectionURL, username, password).prepareStatement("UPDATE QUERY);
ps1.execute();
ps1.close();
} catch (Exception e) {
out.println(e);
}
} else {
rs1 = statement.executeQuery("SELECT QUERY");
if (rs1.next()) {
CONDITION.....
}
}
rs1.close();
}
}
finally {
if (!connection.isClosed() && connection != null) {
connection.close();
}
}
%>
Some HTML CODE.....HERE
<%
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(connectionURL, username, password);
statement = connection.createStatement();
try {
rs1 = statement.executeQuery("SELECT QUERY");
if (rs1.next()) {
try {
PreparedStatement ps1 = DriverManager.getConnection(connectionURL, username, password).prepareStatement("UPDATE QUERY);
ps1.execute();
ps1.close();
} catch (Exception e) {
out.println(e);
}
} else {
rs1 = statement.executeQuery("SELECT QUERY");
if (rs1.next()) {
CONDITION.....
}
}
rs1.close();
}
}
finally {
if (!connection.isClosed() && connection != null) {
connection.close();
}
}
%>
答案 0 :(得分:1)
首先处理JSP中的数据库逻辑是一种不好的做法...尽可能避免使用scriptlet。因为JSP默认情况下不是线程安全的,所以你可能会遇到并发问题。我会把DAO实用程序类编写到处理数据库逻辑,它将为动作控制器返回适当的数据。控制器将以请求/会话属性的形式设置该数据,您可以在问题中将其转发给JSP。