一个Statement不能同时打开两个ResultSet?为了同时打开两个,可以考虑建立两个Statement?甚至两个Connection?

时间:2022-03-08 02:58:28
我用resin+sql2000

我想实现一个两级菜单和csdn差不多,只不过要读数据库

Rst=Stmt.executeQuery("select A from B");
                while (Rst.next())
                {  
                  Rstchild=Stmt.executeQuery("select C from D where pid="+Rst(A));
                  while (Rstchild.next())
                    {
                      }
                }
这个提示Rstchild没有定义和初始化
于是想用两个connection

<%@ page language="java" import="java.sql.*" contentType="text/html;charset=gb2312"%>
<%
java.sql.Connection Conn;
java.sql.Connection connn;
java.sql.Statement Stmt;
java.sql.Statement Stmtt;
java.sql.ResultSet Rst;
java.sql.ResultSet Rstt;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Conn=DriverManager.getConnection("jdbc:odbc:wangzhan","zijian","zijian");
Connn=DriverManager.getConnection("jdbc:odbc:wangzhan","zijian","zijian");
Stmt=Conn.createStatement();
Stmtt=connn.createStatement();
%>

可是也不行,提示connn没有初始化,在一个connection上建两个statement我也试了也不行......

到底可不可以两个Statement?甚至两个Connection?

听说菜单还有一种就是用jsp读出数据(可是怎么读呀?能读出来直接输出了就是菜单了哦?要同时读父表和子表怎么读?????)然后用javasctipt实现菜单


12 个解决方案

#1


一个connection,两个statement,就可以同时打开两个ResultSet
我想是jdbc-odbc这种连接方式的问题,换jdbc吧
你做的东西越复杂,jdbc-odbc的麻烦越多

#2


可是怎么换呀,我数据库一窍不通,这个连接还是抄书的,我用resin2.02+sql2000+win2000server,能用jdbc吗?帮忙,谢谢!

一个connection,两个statement,就可以同时打开两个ResultSet我试了不行

#3


java.sql.Connection Conn;是一个
定义两个
java.sql.Statement Stmt1;
java.sql.Statement Stmt2;

Rst=Stmt1.executeQuery("select A from B");
                while (Rst.next())
                {  
                  Rstchild=Stmt2.executeQuery("select C from D where pid="+Rst(A));
                  while (Rstchild.next())
                    {
                    }
                }


#4


pid=Rst(A)是什么意思?我要从A中读出他的id和name然后
那个where是不是要写成where pid="+Rst.getInt(id));?
                  

#5


另外jdbc-odbc能不能实现这个呀?

#6


老兄试了不行呀提示:
java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]连接占线导致另一个 hstmt 

#7


data.jsp

<%@ page language="java" import="java.sql.*" contentType="text/html;charset=gb2312"%>
<%
java.sql.Connection Conn;

java.sql.Statement Stmt1;
java.sql.Statement Stmt2;
java.sql.ResultSet Rst;
java.sql.ResultSet Rstchild;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Conn=DriverManager.getConnection("jdbc:odbc:wangzhan","zijian","zijian");
Stmt1=Conn.createStatement();
Stmt2=Conn.createStatement();
%>

a.jsp

<%@ include file="data.jsp"%>

<%@ page import="java.util.Date"contentType="text/html;charset=gb2312"%>
<%
Rst=Stmt1.executeQuery("select * from teach_subject");
                while (Rst.next())
                {      
 try{ Rstchild=Stmt2.executeQuery("select unit_name from teach_unit ");}
                 catch(SQLException e){
      out.print(e);}
}
%>

catch到错误:

java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]连接占线导致另一个 hstmt 

#8


很遗憾,用ODBC连接是有这个问题,我用ms的驱动连接
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Conn=DriverManager.getConnection("jdbc:sqlserver://myServer:1433;user=sa;password=sa;DatabaseName=mzg");
接没问提,
我连接oracle的时候也没问题,
看来你只有在连接个Conn2了
或者不使用ODBC连接

#9


怎么才能不使用odbc,我用sql2000+resin2.02告诉我怎么连接,另外连两个conn也不行,我试了!
告诉我怎么连接,谢谢!!!!

#10


是不是可以这样
1 定义一个Vector v
2 将Rst的内容放到v 
3 关闭Rst
4 for(int i=0;i<v.size();i++) 来取得Rstchild

是不是比开两个连接要好

#11


你要使用jdbc,应该先下载一个sql server 2000的jdbc驱动,在这里搜索一下就可以找到下载地址

#12


菜单的事情已经搞定了!

#1


一个connection,两个statement,就可以同时打开两个ResultSet
我想是jdbc-odbc这种连接方式的问题,换jdbc吧
你做的东西越复杂,jdbc-odbc的麻烦越多

#2


可是怎么换呀,我数据库一窍不通,这个连接还是抄书的,我用resin2.02+sql2000+win2000server,能用jdbc吗?帮忙,谢谢!

一个connection,两个statement,就可以同时打开两个ResultSet我试了不行

#3


java.sql.Connection Conn;是一个
定义两个
java.sql.Statement Stmt1;
java.sql.Statement Stmt2;

Rst=Stmt1.executeQuery("select A from B");
                while (Rst.next())
                {  
                  Rstchild=Stmt2.executeQuery("select C from D where pid="+Rst(A));
                  while (Rstchild.next())
                    {
                    }
                }


#4


pid=Rst(A)是什么意思?我要从A中读出他的id和name然后
那个where是不是要写成where pid="+Rst.getInt(id));?
                  

#5


另外jdbc-odbc能不能实现这个呀?

#6


老兄试了不行呀提示:
java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]连接占线导致另一个 hstmt 

#7


data.jsp

<%@ page language="java" import="java.sql.*" contentType="text/html;charset=gb2312"%>
<%
java.sql.Connection Conn;

java.sql.Statement Stmt1;
java.sql.Statement Stmt2;
java.sql.ResultSet Rst;
java.sql.ResultSet Rstchild;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Conn=DriverManager.getConnection("jdbc:odbc:wangzhan","zijian","zijian");
Stmt1=Conn.createStatement();
Stmt2=Conn.createStatement();
%>

a.jsp

<%@ include file="data.jsp"%>

<%@ page import="java.util.Date"contentType="text/html;charset=gb2312"%>
<%
Rst=Stmt1.executeQuery("select * from teach_subject");
                while (Rst.next())
                {      
 try{ Rstchild=Stmt2.executeQuery("select unit_name from teach_unit ");}
                 catch(SQLException e){
      out.print(e);}
}
%>

catch到错误:

java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]连接占线导致另一个 hstmt 

#8


很遗憾,用ODBC连接是有这个问题,我用ms的驱动连接
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Conn=DriverManager.getConnection("jdbc:sqlserver://myServer:1433;user=sa;password=sa;DatabaseName=mzg");
接没问提,
我连接oracle的时候也没问题,
看来你只有在连接个Conn2了
或者不使用ODBC连接

#9


怎么才能不使用odbc,我用sql2000+resin2.02告诉我怎么连接,另外连两个conn也不行,我试了!
告诉我怎么连接,谢谢!!!!

#10


是不是可以这样
1 定义一个Vector v
2 将Rst的内容放到v 
3 关闭Rst
4 for(int i=0;i<v.size();i++) 来取得Rstchild

是不是比开两个连接要好

#11


你要使用jdbc,应该先下载一个sql server 2000的jdbc驱动,在这里搜索一下就可以找到下载地址

#12


菜单的事情已经搞定了!