1
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 中不显示任何内容。

4

2 回答 2

7

每个语句一次只能使用一个结果集(用于查询、更新等)。请参阅文档

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

我会:

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

编辑:根据以下 EJP 的评论进行了修改。

于 2012-06-15T10:15:52.053 回答
3

您应该只将语句实例用于一项操作。所以调用executeUpdate-method 会擦除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

于 2012-06-15T10:24:40.890 回答