例子如下
<%@ page language="java" import="java.sql.*" %><%
    Connection conn = null;    String url="jdbc:odbc:t2";
    String username="sa";
    String password="shylsz";
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    conn=DriverManager.getConnection(url,username,password); String sql;
 try{
         Statement stmt=conn.createStatement();
         Statement stmt2=conn.createStatement();
         sql="select * from t_nyxx ";
 ResultSet rs3 = null;
 ResultSet rs4 = null;
     rs3=stmt.executeQuery(sql);
 rs3.next();
 out.println(sql + "*********");
sql="select * from t_nydub";
out.println(sql + "*********");
rs4=stmt.executeQuery(sql);
rs4.close();
out.println( "2*********");
rs3.next(); sql="insert into t_jfmxd values()";
out.println(sql + "*********");

         }
 catch(Exception ex)
        {
          System.err.println(ex.getMessage());
        }
%>结果只显示select * from t_nyxx ********* select * from t_nydub********* 2********* 
后面的insert into t_jfmxd values()无法显示

解决方案 »

  1.   

    呵呵,好象不会出现这种问题吧,要么,你变通一下,定义过ResultSet rs1后就直接使用rs1,然后再定义rs2,再使用rs2,Try it!
      

  2.   

    我上面的例子本来是个循环的,简化过了
    原来要实现以下功能的
    rs3=stmt.executeQuery(sql);
    out.println(sql + "*********");
    while  (rs3.next())
     {
             out.println(1 + "*********");
    sql="select * from t_nydub order by read_date Desc";
    out.println(sql + "*********");
    rs4=stmt.executeQuery(sql);
    rs4.close();
    out.println( "2*********"); }sql="insert into t_jfmxd values()";
    out.println(sql + "*********");
    这里就必须2个rs交叉处理的啊
      

  3.   

    别的先不说,提醒你一件事,你与数据库连接最好不要用sa来进行登录,不要把你的sa的密码暴露在程序中,太不安全,你可以另建一个登录。
      

  4.   

    在线等待!
    也可QQ联系2854401或msn:[email protected]
    找出原因马上发分
      

  5.   

    to  fantasyfire(幻火) :谢谢你的提醒!
      

  6.   

    其实主要的错误是你的两个ResultSet集用了一个Statement对象,一般情况下ResultSet和Statement是一对一的关系,如果当你确信你的结果集在下面的程序中不会再用了,你可以把你的Statement对象用到其他的ResultSet.
      

  7.   

    建议用不同的statementStatement stmt=conn.createStatement();
    Statement stmt2=conn.createStatement();
    rs1=stmt.executeQuery(sql);
    rs2=stmt2.executeQuery(sql);
    rs1.next()这样就没问题了。
      

  8.   

    我用stmt2的时候提示"连接占线导致另一个 hstmt"怎么办?
      

  9.   

    天地良心,第一次见这么毛糙的程序,(楼主别介意)
    发现你在2楼的程序,逻辑好象很有问题,
    String sql;
    try{
    Statement stmt1=conn.createStatement();
    Statement stmt2=conn.createStatement();
    ResultSet rs1 = null;
    ResultSet rs2 = null;
    sql_1="select * from t_aaaa ";
    rs1=stmt1.executeQuery(sql_1);
    while  (rs3.next())
    {
    sql_2="select * from t_cccc";
    out.println("t_cccc" + sql_2 );
    rs2=stmt2.executeQuery(sql_2);
    //你要rs2干什么?
    }
    sql="insert into t_dddd values()";
    out.println(sql + "*********");
    }catch()
      

  10.   

    to:zdx1026(天外来客)
             我这么粘出来是想让大家好找原因啊。
      rs1=stmt1.executeQuery(sql_1);
    while  (rs3.next())
    {
    sql_2="select * from t_cccc";
    out.println("t_cccc" + sql_2 );
    rs2=stmt2.executeQuery(sql_2);
    /*
                      分类求和、统计
                       */
     

    }
    sql="insert into t_dddd values()";
    out.println(sql + "*********");
      

  11.   

    像你第一个那样写出错是一定的呀,因为你用的是同一个stmt,当第二个执行时就相当于把第一个关掉了,如果你想两个都要,那么要另外再声明一个:PreparedStatement stmt2=null;
    然后rs2=stmt2.executeQuery(sql);这样就可以了