我遇到了prepareStatement的问题。我正在尝试构建一个查询以选择计数,但表名不同,代码如下:
String sql = "SELECT COUNT(0) AS CNT FROM ? WHERE STUD_NM <> 'ABC' ";
String tableName;
for (int i = 0; i < studCode.size(); i++) {
count = 0;
tableName = "";
pstmt = con.prepareStatement(sql);
pstmt.setString( 1 , "S_"+studCode.get(i));
Syso(pstmt); //
}
查询准备好了,
"SELECT COUNT(0) AS CNT FROM 'S_HUBRECORD' WHERE STUD_NM <> 'ABC'"
为什么它会在表名附加单引号?
答案 0 :(得分:1)
你不能。您需要使用字符串连接构造查询。 PreparedStatement
用于字段值,而不是表名。它包装引号的原因也是因为你使用了setString
。
答案 1 :(得分:0)
他们将表名视为您使用类型转换的字符串可能是有效的。
答案 2 :(得分:0)
你应该这样做,
for (int i = 0; i < studCode.size(); i++) {
String sql = "SELECT COUNT(0) AS CNT FROM "+"S_"+studCode.get(i)+" WHERE STUD_NM <> 'ABC' ";
count = 0;
pstmt = con.prepareStatement(sql);
Syso(pstmt); //
}