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

时间:2012-06-15 10:12:10

标签: 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+"')");
}

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

dbStatement.executeUpdate("INSERT INTO temp1 VALUES ('"+VendorCode+"')");  

进入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


                   }


              }

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

2 个答案:

答案 0 :(得分:7)

一次只能为每个语句使用一个结果集(用于查询,更新等)。见the doc

  

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

我要么:

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

答案 1 :(得分:3)

您应该只将语句实例用于一个操作。因此,调用executeUpdate方法会删除executeQuery-method获取的ResultSet。

创建第二个语句,以便:

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");
    System.out.println(VendorCode);

    dbInsert.executeUpdate("INSERT INTO temp1 VALUES ('"+VendorCode+"')");
}

如果您不只是测试并且您实际上想要将Vendor_Code从temp批量插入temp1,请尝试使用INSERT ... SELECT

dbInsert = con.createStatement();
dbInsert.executeUpdate("INSERT INTO temp1 SELECT Vendor_Code FROM temp");

有关此类INSERT的更多详细信息,请参阅MySQL官方文档: http://dev.mysql.com/doc/refman/5.1/en/insert-select.html