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

一度に使用できる結果セットは、ステートメントごとに 1 つだけです (クエリ、更新など)。ドキュメントを参照してください:

デフォルトでは、Statement オブジェクトごとに 1 つの ResultSet オブジェクトのみを同時に開くことができます

私は次のいずれかを行います:

  1. すべてのベンダー コードをコレクションにロードし、新しいステートメント/更新を使用して更新を実行します。
  2. 1 つの SQL 更新ステートメント内で必要なすべてのアクションを実行します (パフォーマンスおよびトランザクション上の理由から望ましい場合があります。すべての作業はデータベース インスタンスに含まれます)。

編集:以下の EJP のコメントに従って修正されました。

于 2012-06-15T10:15:52.053 に答える
3

ステートメント インスタンスは、1 つの操作にのみ使用してください。したがって、executeUpdate メソッドを呼び出すと、executeQuery メソッドによって取得された ResultSet が消去されます。

次のように、2 番目のステートメントを作成します。

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 に答える