[英]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);
為了查看第二個查詢的樣子,例如,參數thn
和bln
為null
。
問題是因為您的查詢不正確:
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_export
表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注入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.