我有两个select语句,并为这两个语句创建“ union all”。然后,我使用PreparedStatement,当我将String设置为此prepareStatement时,它显示“ java.sql.SQLException:在索引:2处缺少IN或OUT参数”。
我在google上游览后,有人说每个“?”在sql语句中,我应该写setString。对于我的情况,我有两个选择语句,所以我有两个“?”但我“全部团结”,所以我不确定是否假定一个“?”或两个“?”。但是当我尝试编写两个setString像
prepareStatement.setString(1,ApplicationNo);
prepareStatement.setString(2,ApplicationNo);
,它显示“ ORA-00918:列定义不明确”。
我不知道如何解决这个问题。
我的工会选择陈述是
query.append("select TO_CHAR(TRUNC(SYSDATE),'DD MONTH,YYYY'),a.appl_no,a.assigned_to,b.co_name,b.co_name2,a.credit_acct_no,a.credit_bank_no,a.credit_branch_no,a.service_id ");
query.append("from newappl a, newappl_hq b where b.appl_no = a.appl_no and a.appl_no=(select appl_no from newappl where appl_no=?) and rownum=1 and credit_status = 'CRPEND'");
query.append(" union all ");
query.append("select TO_CHAR(TRUNC(SYSDATE),'DD MONTH,YYYY'),a.appl_no,a.assigned_to,c.trading_name co_name, ' ' co_name2, d.bank_acct_no credit_acct_no, d.bank_no credit_bank_no, d.bank_branch_no credit_branch_no,a.service_id ");
query.append("from newappl a,newappl_hq b, newappl_ret c, newappl_ret_bank d where b.appl_no = a.appl_no or a.appl_no = c.appl_no and c.ret_id= d.ret_id and a.appl_no=(select appl_no from newappl_ret where appl_no=?) and rownum=1 and credit_status = 'CRPEND'");*
setString是prepareStatement.setString(1,ApplicationNo);
当我搜索setString示例时,如果有两个setString,则有两个不同的参数
preparedStatement.setString(1,ApplicationNo);
preparedStatement.setString(2,LoginID);
但是对于两个选择语句,我都需要ApplicationNo。
最佳答案
我认为没有理由为什么要建立此查询并一遍又一遍地进行查询。我将其设置为静态最终字符串一次,并对其进行处理。
如果需要两次,为什么不能这样做?
ps.setString(1, applicationNumber);
ps.setString(2, applicationNumber);