Java.sql.SQLException,而我尝试将值转换为准备好的语句

Java.sql.SQLException,而我尝试将值转换为准备好的语句,java,oracle,jdbc,oaf,Java,Oracle,Jdbc,Oaf,我想在准备好的语句中添加a变量,然后 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); 然而,这一错

我想在准备好的语句中添加a变量,然后

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中有一个函数,请尝试以下操作:

like CONCAT('ADMIN_', ?);
当您将
'ADMIN| | |:1 | |“
setString
一起使用时,它只是@Andreas在注释中提到的SQL文本,这是错误的语法



除此之外,我不确定你所说的
: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资源
如果坚持在SQL中执行此操作,语法将是(使用):

或(使用):


异常通常会告诉您语句的错误。即使使用
,SQL文本
'ADMIN|||?
也是SQL文本,因此
不是参数标记
'ADMIN| | |?
应该是正确的方法,而且
|
是一个有效的Oracle运算符,因此
CONCAT()
函数是不必要的。@Andreas它仍然是一个有效的函数和有效的解决方案,如果不是,你不应该在回答中提及它否?
             " WHERE UPPER(fu.user_name) LIKE 'ADMIN_' || ?";
             " WHERE UPPER(fu.user_name) LIKE CONCAT('ADMIN_', ?)";