Java java.sql.SQLException,而我尝试将值连接到预准备语句

时间:2018-05-16 18:46:16

标签: java oracle jdbc oaf

我想在准备好的声明和

中添加一个变量
String Query = "SELECT count(*) count from  apps.fnd_user fu where " 
             + "UPPER(fu.user_name) like 'ADMIN_ ||:1||' ";  

PreparedStatement stmt = conn.prepareStatement(Query);  
stmt.setString(1, CompanyName);  

但是这个错误正在显示。任何修复此错误.....我可以在准备声明时使用管道连接。

2 个答案:

答案 0 :(得分:0)

Oracle CONCAT中有一个函数,试试这个:

like CONCAT('ADMIN_', ?);

'ADMIN_ ||:1||'setString一起使用时,它只是@Andreas在评论中已经提到的SQL文字,这是错误的语法

除了我不确定:1你是什么意思之外,我认为应该?代替。

答案 1 :(得分:0)

不要在SQL中连接。用Java做:

String sql = "SELECT count(*) count" +
              " FROM apps.fnd_user fu" +
             " WHERE UPPER(fu.user_name) LIKE ?";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
    stmt.setString(1, "ADMIN_" + companyName);
    try (ResultSet rs = stmt.executeQuery()) {
        // code here
    }
}

请注意:

  • 参数标记为?,而非:1
  • Java变量名称应以小写字母
  • 开头
  • 您应该使用try-with-resources。

如果您坚持在SQL中执行此操作,则语法为(使用Concatenation Operator):

             " WHERE UPPER(fu.user_name) LIKE 'ADMIN_' || ?";

或(使用CONCAT() function):

             " WHERE UPPER(fu.user_name) LIKE CONCAT('ADMIN_', ?)";