0

JavaクラスにSQLコードがあります。コードは以下のようなものです。

private void SummTEkspor(){
        try {
        bln = (String) cmbBln.getSelectedItem();
        thn = (String) cmbThn.getSelectedItem();
        String sql1 ="DELETE FROM a.dbo.t_export";
        String sql2 ="INSERT INTO a.dbo.t_export\n" +
                     "SELECT * FROM b.dbo.export b WHERE b.sk_batch IN \n" +
                     "(SELECT sk_batch from batch_hdr WHERE bln_proses="+bln+
                     "AND thn_proses="+thn; 


            Statement st = kon.conn.createStatement();
            int rs  = st.executeUpdate(sql1);
            int rsl = st.executeUpdate(sql2);


        } catch (Exception x) {
            System.out.println("FAILED");;
        }
    }

sql1を実行すると動作しますが、sql2を実行すると正しく動作せず、FAILED. sql2 のクエリは、選択したコンボ ボックスから値を取得していないと思います。どうすればそれを解決できますか? 返信ありがとうございます

4

6 に答える 6

0

クエリを修正し、文字列値を引用符で囲み、適切なスペースを入れます。

String bln="testing";
    String thn="abc";
     String sql2 ="INSERT INTO a.dbo.t_export\n" +
                 "SELECT * FROM b.dbo.export b WHERE b.sk_batch IN \n" +
                 "(SELECT sk_batch from batch_hdr WHERE bln_proses='"+bln+
                 "' AND thn_proses='"+thn+"')"; 
于 2013-10-04T06:53:14.903 に答える
0

このクエリを試してください

 String sql2 ="INSERT INTO a.dbo.t_export" +
 "SELECT * FROM b.dbo.export b WHERE b.sk_batch IN " +
 "(SELECT sk_batch from batch_hdr WHERE bln_proses="+bln+
 "AND thn_proses="+thn+ ")"; 

bln_proses & thn_proses これらは同じテーブル batch_hdr からのものです ???

于 2013-10-04T06:53:33.053 に答える
0

いくつかの理由があるかもしれません: - 2 番目の select ステートメントで braket を閉じる - bln_proses または thn_proses が文字列の場合、値を囲むために ' 文字を使用する必要があります

于 2013-10-04T06:55:29.590 に答える
0

まず、\n不要なクエリを入力してから、テーブルを修飾するa.dbo.t_export必要はありません。

それ以外の:

String sql2 ="INSERT INTO a.dbo.t_export\n" +
                 "SELECT * FROM b.dbo.export b WHERE b.sk_batch IN \n" +
                 "(SELECT sk_batch from batch_hdr WHERE bln_proses="+bln+
                 "AND thn_proses="+thn; 

試す:

String sql2 ="INSERT INTO dbo.t_export " +
                 "SELECT * FROM b.dbo.export b WHERE b.sk_batch IN " +
                 "(SELECT sk_batch from batch_hdr WHERE bln_proses="+bln+
                 " AND thn_proses="+thn +")";

列が Varchar 型の場合は、'' (一重引用符) 内に値を入れる必要があります。

上記のクエリは機能します。ただし、SQL インジェクションの可能性があるため、このアプローチは使用しないことをお勧めします。プリコンパイル済みステートメントを使用して、SQL インジェクションを回避します。

于 2013-10-04T06:55:58.480 に答える
0

ブラケットを開き、(SELECT sk_batch f決して閉じません。2 番目のクエリがどのように見えるかを確認するために
使用します。たとえば、パラメータの1 つである可能性もあります。System.out.println(sql2);thnblnnull

于 2013-10-04T06:50:11.547 に答える
0

問題は、クエリが適切でないためです。

INSERT INTO a.dbo.t_export\n" +
 "SELECT * FROM b.dbo.export b WHERE b.sk_batch IN \n" +
  "(SELECT sk_batch from batch_hdr WHERE bln_proses="+bln+
    "AND thn_proses="+thn; 

2 番目の選択サブクエリを作成するときは、)ブラケットを閉じていません。

これを試して :

INSERT INTO a.dbo.t_export" +
 "SELECT * FROM b.dbo.export b WHERE b.sk_batch IN " +
  "(SELECT sk_batch from batch_hdr WHERE bln_proses='"+bln+
    "' AND thn_proses='"+thn + "')"; 
于 2013-10-04T06:51:39.830 に答える