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

你打开一个括号(SELECT sk_batch f,从不关闭它。
使用System.out.println(sql2);为了查看第二个查询的样子,它也可能是参数之一,thn例如。blnnull

于 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; 

当您创建第二个选择子查询时,您还没有关闭)括号。

试试这个 :

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 回答
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

也许有一些原因: - 在第二个选择语句中关闭刹车 - 如果 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 回答