【问题标题】:Java java.sql.SQLException while i try to concat a value into prepared statementJava java.sql.SQLException,而我尝试将值连接到准备好的语句中
【发布时间】:2018-05-16 18:46:16
【问题描述】:

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

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

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

【问题讨论】:

  • 异常通常会告诉你语句有什么问题。

标签: java oracle jdbc oaf


【解决方案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_', ?)";

【讨论】:

    【解决方案2】:

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

    like CONCAT('ADMIN_', ?);
    

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


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

    【讨论】:

    • 即使使用?,SQL 文本'ADMIN_ ||?||' 也是SQL 文字,因此? 不是参数标记。 'ADMIN_' || ? 是正确的方法,|| 是有效的 Oracle 运算符,因此不需要 CONCAT() 函数。
    • @Andreas 它仍然是一个有效的功能和有效的解决方案,如果不是,你不应该在你的答案中提及它吗?
    猜你喜欢
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 2012-12-18
    相关资源
    最近更新 更多