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_', ?)";
我想在准备好的语句中添加一个变量
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_', ?)";