当前位置: 技术问答>java相关
为什么在一个网页中写JSP代码,不能对同一张数据表进行两次查询
来源: 互联网 发布时间:2015-11-17
本文导语: 我在一个网页中需要对同一张数据表进行两次查询。 ResultSet rs1=st.executeQuery(sql1); while(rs1.next()) { String a1=rs1.getString("name"); ... ... } rs1.close(); 这个可以成功查询,并且对变量赋值;但是接着第二次查询 ResultSet rs2=st.exe...
我在一个网页中需要对同一张数据表进行两次查询。
ResultSet rs1=st.executeQuery(sql1);
while(rs1.next())
{
String a1=rs1.getString("name");
...
...
}
rs1.close();
这个可以成功查询,并且对变量赋值;但是接着第二次查询
ResultSet rs2=st.executeQuery(sql2);
while(rs2.next())
{
String a2=rs1.getString("name");
...
}
rs2.close();
这个如果去掉while中的内容,是不会报错的,但是只要对while里面的变量进行赋值就会出现[Microsoft][ODBC 驱动程序 管理器] 非法的游标状态 的错误提示,为什么?有谁碰到这种情况过吗?
ResultSet rs1=st.executeQuery(sql1);
while(rs1.next())
{
String a1=rs1.getString("name");
...
...
}
rs1.close();
这个可以成功查询,并且对变量赋值;但是接着第二次查询
ResultSet rs2=st.executeQuery(sql2);
while(rs2.next())
{
String a2=rs1.getString("name");
...
}
rs2.close();
这个如果去掉while中的内容,是不会报错的,但是只要对while里面的变量进行赋值就会出现[Microsoft][ODBC 驱动程序 管理器] 非法的游标状态 的错误提示,为什么?有谁碰到这种情况过吗?
|
可能是正在操作数据库的同时,另一个程序也在运行中,也在对数据库进修操作,所以出现这个问题。
两次加载驱动程序与数据库进行连接和关闭,应该没有问题的。只要有先后的顺序就可以了。
其实你完全可采用下面的方法:
stmt.execute(sql1+";"+sql2);
ResultSet rs=stmt.getResultSet();
while(rs.next())
System.out.println(rs.getString(1));
stmt.getMoreResults();
rs=stmt.getResultSet();
while(rs.next())
System.out.println(rs.getString(1));
两次加载驱动程序与数据库进行连接和关闭,应该没有问题的。只要有先后的顺序就可以了。
其实你完全可采用下面的方法:
stmt.execute(sql1+";"+sql2);
ResultSet rs=stmt.getResultSet();
while(rs.next())
System.out.println(rs.getString(1));
stmt.getMoreResults();
rs=stmt.getResultSet();
while(rs.next())
System.out.println(rs.getString(1));
|
这毫无疑问是:
peppi(一凡) 的看法
killwin(海龙) :
再创建一个statement,是在ResultSet嵌套的情况下!
peppi(一凡) 的看法
killwin(海龙) :
再创建一个statement,是在ResultSet嵌套的情况下!
|
你查询第一次后,不用关闭rs1啊。
用rs1.beforeFirst()把游标提到第一条记录之前。
再用while(rs1.next()){...}来做
试试
用rs1.beforeFirst()把游标提到第一条记录之前。
再用while(rs1.next()){...}来做
试试
|
因为你前面已经rs1.close();
你再看看这:
ResultSet rs2=st.executeQuery(sql2);
while(rs2.next())
{
String a2=rs1.getString("name"); //怎么是rs1呢????所以会错
...
}
你再看看这:
ResultSet rs2=st.executeQuery(sql2);
while(rs2.next())
{
String a2=rs1.getString("name"); //怎么是rs1呢????所以会错
...
}