[英]How to use a place holder for preparestatement to bind a variable for table name
我對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'"
為什么將單引號添加到表名?
你不能 您需要使用字符串串聯構造查詢。 PreparedStatement
用於字段值,而不用於表名。 它使用引號引起來的原因還在於您使用了setString
。
他們將表名視為字符串,您可以使用強制類型轉換。
你應該這樣
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); //
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.