java中的结果集不符合我的期望

Lun*_*una 1 java mysql jdbc

dbStatement = con.createStatement();
dbResult = dbStatement.executeQuery("SELECT Vendor_Code FROM temp ORDER BY status ASC ");

while (dbResult.next())
{
    VendorCode=dbResult.getString("Vendor_Code");
    System.out.println(VendorCode);

    dbStatement.executeUpdate("INSERT INTO temp1 VALUES ('"+VendorCode+"')");
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我按照状态的升序选择供应商代码列表,如果我不添加,它可以正常工作:

dbStatement.executeUpdate("INSERT INTO temp1 VALUES ('"+VendorCode+"')");  
Run Code Online (Sandbox Code Playgroud)

进入while循环.如果我添加这个,我得到的结果只是排序列表中的第一个值,并且它也被插入到temp1表中...

我在NetBeans中使用Java swing和MySQL.不知道为什么会发生这种情况?

如果我以其他方式执行上述代码,

    dbStatement = con.createStatement();
    dbInsert = con.createStatement();
    dbResult = dbStatement.executeQuery("SELECT Vendor_Code FROM temp ORDER BY               status ASC ");

     while (dbResult.next())
             {
                 VendorCode=dbResult.getString("Vendor_Code");


                dbResult = dbInsert.executeQuery("SELECT Bid_No,Vendor_Name,Vendor_Address,Amount,Tax_Percentage,Amount_Aftertax,Expected_Deliverydate,Vendor_Code FROM purchase_bid    where   PE_Number='"+penumber+"' AND Vendor_Code='"+VendorCode+"'  ");


                 while(dbResult.next())

                    {


                      Bid_Number=dbResult.getString("Bid_No");
                      vendor_name=dbResult.getString("Vendor_Name");
                      vendor_address=dbResult.getString("Vendor_Address");
                      Amount=dbResult.getString("Amount");
                      tax=dbResult.getString("Tax_Percentage");
                      date2=dbResult.getString("Expected_Deliverydate");
                      Amount_Aftertax=dbResult.getString("Amount_Aftertax");
                      venCode=dbResult.getString("Vendor_Code");
                      date3=date2.split("-");
                        String day="";
                        String month="";
                        String year="";
                        day=date3[2];
                        month=date3[1];
                        year=date3[0];

                     date=day+"-"+month+"-"+year;
                      addtoCart();//for displaying it in jTable


                   }


              }
Run Code Online (Sandbox Code Playgroud)

它不需要按升序排序VendorCode,以便从purchase_bid表中检索值.然后它再次获取第一个排序值,并且jTable中不显示任何内容.

Bri*_*new 7

每次只能为每个语句使用一个结果集(用于查询,更新等).看文档:

默认情况下,每个Statement对象只能同时打开一个ResultSet对象

我要么:

  1. 将所有供应商代码加载到集合中,然后使用新的语句/更新执行更新
  2. 在一个SQL更新语句中执行所有必需的操作(出于性能和事务原因,可能更好.所有工作都将包含在数据库实例中)

编辑:修改后EJP的评论如下.

  • 不正确.它可以根据需要多次使用.但是:'每个Statement对象只能同时打开一个ResultSet对象.因此,如果读取一个ResultSet对象与另一个ResultSet对象的读取交错,则每个ResultSet对象必须由不同的Statement对象生成.Statement接口中的所有执行方法都会隐式关闭一个statment的当前ResultSet对象(如果存在open对象)[1](http://docs.oracle.com/javase/6/docs/api/java/sql/Statement.html) . (3认同)