簡體   English   中英

如何使用占位符進行preparestatement綁定表名稱變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM