关于statement关闭的问题 30
我在用tomcat连接池连数据库查询时,发现statement不能被关闭,导致连接池最后没有可用连接,有什么好方法关闭statmenet对象吗?这里只贴出主要代码publ...
我在用tomcat连接池连数据库查询时,发现statement不能被关闭,导致连接池最后没有可用连接,有什么好方法关闭statmenet对象吗?
这里只贴出主要代码
public class Conndb {
private Connection conn=null;
private Context context=null;
private PreparedStatement prestmt=null;
private void open(){
try{
context =new InitialContext();
DataSource ds =(DataSource)context.lookup("java:comp/env/struts/SQL");
conn = ds.getConnection();
}catch (Exception e) {
e.printStackTrace();
}
}
public void close(){
try{
prestmt.close();
conn.close();
context.close();
}catch (Exception e) {
e.printStackTrace();
}
}
public ResultSet Sum(){
try{open();
prestmt=conn.prepareStatement("select count(*) from table1");
ResultSet rs=prestmt.executeQuery();
return rs;
}catch (SQLException e) {
e.printStackTrace();
}return null;
}
public ResultSet primeSum(){
try{
open();
prestmt=conn.prepareStatement("select count(*) from table2");
ResultSet rs=prestmt.executeQuery();
return rs;
}catch (SQLException e) {
e.printStackTrace();
}return null;
}
}
JSP页面
<% try{
Conndb conndb=new Conndb();
ResultSet rs=conndb.postSum();
while(rs.next()){
out.println("总数:"+rs.getInt(1)+" ");
}
ResultSet rs2=conndb.primeSum();
int prime=0;
while(rs2.next()){
out.println(单个:"+rs2.getInt(1)+" ");
}
rs.close();
rs2.close();
conndb.close();
}catch(Exception e){
e.printStackTrace();
}
%>
代码本身是没有书写错误的,请看标题回答,如果有好的答案,我没有多少分了还可以再加点。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
是不是statement没关闭造成的?谁遇到过帮帮忙,DataSource不是自己写的 展开
这里只贴出主要代码
public class Conndb {
private Connection conn=null;
private Context context=null;
private PreparedStatement prestmt=null;
private void open(){
try{
context =new InitialContext();
DataSource ds =(DataSource)context.lookup("java:comp/env/struts/SQL");
conn = ds.getConnection();
}catch (Exception e) {
e.printStackTrace();
}
}
public void close(){
try{
prestmt.close();
conn.close();
context.close();
}catch (Exception e) {
e.printStackTrace();
}
}
public ResultSet Sum(){
try{open();
prestmt=conn.prepareStatement("select count(*) from table1");
ResultSet rs=prestmt.executeQuery();
return rs;
}catch (SQLException e) {
e.printStackTrace();
}return null;
}
public ResultSet primeSum(){
try{
open();
prestmt=conn.prepareStatement("select count(*) from table2");
ResultSet rs=prestmt.executeQuery();
return rs;
}catch (SQLException e) {
e.printStackTrace();
}return null;
}
}
JSP页面
<% try{
Conndb conndb=new Conndb();
ResultSet rs=conndb.postSum();
while(rs.next()){
out.println("总数:"+rs.getInt(1)+" ");
}
ResultSet rs2=conndb.primeSum();
int prime=0;
while(rs2.next()){
out.println(单个:"+rs2.getInt(1)+" ");
}
rs.close();
rs2.close();
conndb.close();
}catch(Exception e){
e.printStackTrace();
}
%>
代码本身是没有书写错误的,请看标题回答,如果有好的答案,我没有多少分了还可以再加点。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
是不是statement没关闭造成的?谁遇到过帮帮忙,DataSource不是自己写的 展开
2个回答
展开全部
DataSource ds =(DataSource)context.lookup("java:comp/env/struts/SQL");
你看看是ds是否有关闭或清除的方法。 按理说这是拿了一个数据源
如果有
你应和其它的一样 ,在外边声明 Open中打开, Close里关闭。
没有你的Import 不知道DataSource是你找的JAR包 还是自己写的。 所以没办法帮你查API进一步证实
你看看是ds是否有关闭或清除的方法。 按理说这是拿了一个数据源
如果有
你应和其它的一样 ,在外边声明 Open中打开, Close里关闭。
没有你的Import 不知道DataSource是你找的JAR包 还是自己写的。 所以没办法帮你查API进一步证实
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询