簡體   English   中英

SQL INSERT INTO無法正常工作(在Java中)

[英]SQL INSERT INTO does not work properly (in Java)

我在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中的查詢沒有從所選組合框中獲取任何值。 我該如何解決? 感謝您的回復

您可以在(SELECT sk_batch f打開一個括號,並且永遠不要將其關閉。
使用System.out.println(sql2); 為了查看第二個查詢的樣子,例如,參數thnblnnull

問題是因為您的查詢不正確:

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; 

創建第二個選擇子查詢時,您尚未關閉)括號。

嘗試這個 :

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 + "')"; 

修復查詢,引用字符串值並放置適當的空格。

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+"')"; 

試試這個查詢

 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?

可能有某些原因:-在第二個select語句中關閉-如果bln_proses或thn_proses是字符串,則必須使用'字符來包含值

首先,將\\n放入不必要的查詢中,然后不需要a.dbo.t_exporta.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注入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM