同意wjmmml(笑着悲伤) 的意见。 而且最后connection也是一定要关闭的。否则运行一段时间connection pool就被占满了。 stmt最好也要关闭。 ResultSet result = null ; Statement stmt = conn.getConnection.createStatement() ; for (i=0; i<20; i++ ){ for (k=0; k<5; k++) for(j=0; j<5; j++){ stmt=null;//初始化stmt对象。 String sSql = "select sum(num) from example " result = stmt.executeQuery(sSqlStr) ; if (result.next()) result.getLong(1) ; result.close();//查询后就把rs关闭 } } stmt.close();//先关stmt conn.close();//conn是一定要关闭的
我觉得把for里面的程序写成一个方法,然后调用会不会好点呢,这样java的回收机制就可能用得更好,而且那段代码java可能先放在内存中,如果不调用才释放,如果经常调用可能就不释放先,这样就不用考虑关闭等问题了,因为它的生存期只在方法中。知道我再说什么吗? public long forselect(){ Statement stmt = conn.getConnection.createStatement() ; String sSql = "select sum(num) from example " result = stmt.executeQuery(sSqlStr) ; if (result.next()) return result.getLong(1); }else{ return ""; } }
这里没有写出来。
ResultSet result = null ;
Statement stmt = conn.getConnection.createStatement() ;
for (i=0; i<20; i++ ){
for (k=0; k<5; k++)
for(j=0; j<5; j++){
stmt=null;//初始化stmt对象。
String sSql = "select sum(num) from example "
result = stmt.executeQuery(sSqlStr) ;
if (result.next())
result.getLong(1) ;
result.close();//查询后就把rs关闭
}
}
按我上面给你的代码处理,就不会有问题了。
而且最后connection也是一定要关闭的。否则运行一段时间connection pool就被占满了。
stmt最好也要关闭。
ResultSet result = null ;
Statement stmt = conn.getConnection.createStatement() ;
for (i=0; i<20; i++ ){
for (k=0; k<5; k++)
for(j=0; j<5; j++){
stmt=null;//初始化stmt对象。
String sSql = "select sum(num) from example "
result = stmt.executeQuery(sSqlStr) ;
if (result.next())
result.getLong(1) ;
result.close();//查询后就把rs关闭
}
}
stmt.close();//先关stmt
conn.close();//conn是一定要关闭的
public long forselect(){
Statement stmt = conn.getConnection.createStatement() ;
String sSql = "select sum(num) from example "
result = stmt.executeQuery(sSqlStr) ;
if (result.next())
return result.getLong(1);
}else{
return "";
}
}
[email protected]
IronPromises(铁诺)一样,就是你的statement和result在查询完之后没有关闭,还有数据库连接也要关闭。不过想请教一下两位,result和stmt一定要初始化嘛?我觉得好象不初始化也没多大影响啊?等待!!!!!!!!!!!!!!!!!!
根本就进不了该系统,而且还出现"关闭的语句"错误。
出错地方因result = stmt.executeQuery(sSqlStr) ;只有在两个同运行时才出这个问题。一个运行是没有问题的。
建议贴出全部程序。
你在/usr中建立java目录,然后在java目录中建立jdbc目录,然后把classes.zip 放到里面我的jdbc和oracle连接是oracle中的classes111.zip 不是classes12.zip
我的没有出现那种现象,你把oracle 中的jdbc中的classes111.zip 放到
classpath中classpath=/usr/java/jdbc/classes111.zip
conn是什么类型的对象?conn取出的Connection对象最后关闭了没有?stmt最后关闭了没有?为什么写那么多嵌套的for循环?
你在/usr中建立java目录,然后在java目录中建立jdbc目录,然后把classes111.zip 放到里面
同意!所谓的关闭就是将Connection释放回connection pool。
帮忙帮忙,如果搞定再给200分。
2、确认jsp中无<jsp:useBean>的scop属性是application的bean实例。
3、确认jsp中无<%! %>定义的变量。另外,你用的数据库driver是JDBC第四类驱动吗?Oracle 的四类驱动包最新版本为:classes12.jar
1、确认连接池运转正常,具有空闲连接。(查看你连接池的log文件)
连接池运转正常,其实在程序运行过程中始终都是用的是一个连接,是
从连接池中取出来的,连接池是我们自己写的。应该还有空闲连接的。
没有log文件,但信息可以从后台输出。2、确认jsp中无<jsp:useBean>的scop属性是application的bean实例。
没有。
3、确认jsp中无<%! %>定义的变量。
没有。另外,你用的数据库driver是JDBC第四类驱动吗?Oracle 的四类驱动包最新版本为:classes12.jar
用的是oracle中自带的classes12.zip。程序代码比较繁琐,其实三个循环是在参数的。不便在此帖出。
等过一断时间,可以帖出错误信自己 。
会不会是你的两个用户用用的是同一个connection实例啊
这样用户A正在用着的connection又被B用了
A这边才会出错,建议仔细检查一下你们的连接池程序
Connection对应。检查一下程序是否有这样的错误,不妨试一下