java 500错误
答案:3 悬赏:40 手机版
解决时间 2021-03-31 16:59
- 提问者网友:雾里闻花香
- 2021-03-31 11:34
java 500错误
最佳答案
- 五星知识达人网友:野味小生
- 2021-03-31 12:29
一个stmt多个rs进行操作.
那么从stmt得到的rs1,必须马上操作此rs1后,才能去得到另外的rs2,再对rs2操作.
不能互相交替使用,会引起rs已经关闭错误.
错误的代码如下:
stmt=conn.createStatement();
rs=stmt.executeQuery("select * from t1");
rst=stmt.executeQuery("select * from t2");
rs.last();//由于执行了rst=stmt.executeQuery(sql_a);rs就会被关闭掉!所以程序执行到此会提示ResultSet已经关闭.错误信息为:java.sql.SQLException: Operation not allowed after ResultSet closed
rst.last();
正确的代码:
stmt=conn.createStatement();
rs=stmt.executeQuery("select * from t1");
rs.last();//对rs的操作应马上操作,操作完后再从数据库得到rst,再对rst操作
rst=stmt.executeQuery("select * from t2");
rst.last();
如果你一定要这么做,可以做如下代码
Statement pstmt = con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
rs = pstmt.executeQuery(sql);
if(rs != null){
if(rs.next()){
System.out.println(rs.getString(1) + "=>" + rs.getString(2));
rs.last();
ResultSet rs2 = pstmt.executeQuery("select * from tyecontrol where id=1");
if(rs2 != null){
while(rs2.next()){
System.out.println("rs2 "+rs2.getString(1));
}
}
rs2.last();
}
}
一个stmt最好对应一个rs, 如果用一个时间内用一个stmt打开两个rs同时操作,会出现这种情况.
所以解决此类问题:1.就多创建几个stmt,一个stmt对应一个rs;2.若用一个stmt对应多个rs的话,那只能得到一个rs后就操作,处理完第一个rs后再处理其他的,如上"正确代码".
多个stmt对应各自的rs.
stmt=conn.createStatement();
stmt2=conn.createStatement();
rs=stmt.executeQuery("select * from t1");
rst=stmt2.executeQuery("select * from t2");
rs.last();
rst.last();
那么从stmt得到的rs1,必须马上操作此rs1后,才能去得到另外的rs2,再对rs2操作.
不能互相交替使用,会引起rs已经关闭错误.
错误的代码如下:
stmt=conn.createStatement();
rs=stmt.executeQuery("select * from t1");
rst=stmt.executeQuery("select * from t2");
rs.last();//由于执行了rst=stmt.executeQuery(sql_a);rs就会被关闭掉!所以程序执行到此会提示ResultSet已经关闭.错误信息为:java.sql.SQLException: Operation not allowed after ResultSet closed
rst.last();
正确的代码:
stmt=conn.createStatement();
rs=stmt.executeQuery("select * from t1");
rs.last();//对rs的操作应马上操作,操作完后再从数据库得到rst,再对rst操作
rst=stmt.executeQuery("select * from t2");
rst.last();
如果你一定要这么做,可以做如下代码
Statement pstmt = con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
rs = pstmt.executeQuery(sql);
if(rs != null){
if(rs.next()){
System.out.println(rs.getString(1) + "=>" + rs.getString(2));
rs.last();
ResultSet rs2 = pstmt.executeQuery("select * from tyecontrol where id=1");
if(rs2 != null){
while(rs2.next()){
System.out.println("rs2 "+rs2.getString(1));
}
}
rs2.last();
}
}
一个stmt最好对应一个rs, 如果用一个时间内用一个stmt打开两个rs同时操作,会出现这种情况.
所以解决此类问题:1.就多创建几个stmt,一个stmt对应一个rs;2.若用一个stmt对应多个rs的话,那只能得到一个rs后就操作,处理完第一个rs后再处理其他的,如上"正确代码".
多个stmt对应各自的rs.
stmt=conn.createStatement();
stmt2=conn.createStatement();
rs=stmt.executeQuery("select * from t1");
rst=stmt2.executeQuery("select * from t2");
rs.last();
rst.last();
全部回答
- 1楼网友:煞尾
- 2021-03-31 13:06
500错误查询数据时报错,你应该检查传参的地方,看不到错误日志 真不知道你错误在哪!追问
这个是错误
这个是错误
- 2楼网友:等灯
- 2021-03-31 12:58
你ResultSet结果集都是空的,空指针异常,当然getString不到任何东西了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯