Java java.sql.SQLException 当我尝试将一个值连接到准备好的语句中时

Java java.sql.SQLException while i try to concat a value into prepared statement

我想在准备好的语句中添加一个变量

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

但显示此错误。这个错误的任何修复......我可以在准备语句时使用管道连接。

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

like CONCAT('ADMIN_', ?);

当您将 'ADMIN_ ||:1||'setString 一起使用时,它只是一个 SQL 文字,正如@Andreas 在评论中提到的那样,这是 错误的语法.


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

不要在 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_', ?)";