2014-02-09 89 views
2

我有5或表的表從\如何在SELECT查詢中使用動態表名使用JDBC

我的語法查詢我喜歡這個

String sql2 = "SELECT * FROM ? WHERE Patient_ID = ?"; 

pst = conn.prepareStatement(sql2); 

     System.out.println("SQL before values are set "+sql2); 
     System.out.println("The values of table/test name recieved in TestPrint stage 1 "+tblName); 
     System.out.println("The values of test name recieved in TestPrint stage 1 "+key); 
     // values are outputted correctly but are not getting set in the query 

     pst.setString(1, tblName); 
     pst.setLong(2, key); 
ResultSet rs2 = pst.executeQuery(sql2); 

     while(rs2.next()){ 

      String ID = rs2.getString("ID"); 

      jLabel35.setText(ID); 
      jLabel37.setText(ID); 
      jLabel38.setText(ID); 
     // them print command is initiated to print the panel 
} 

問題是,當我運行此我得到一個錯誤說「.....你有和SQL語法錯誤附近?WHERE Patient_ID =?」

當我輸出使用System.out.println(SQL2)的sql;當您準備的一份聲明

值不會在SQL2

+0

mysql佔位符只能替換VALUES。你不能使用表/字段名稱或其他sql「meta」指令的佔位符。例如'sql ='? ? ? ? - >'select','*','from','mytable'是完全非法的。這四件事中沒有一件是支持VALUE –

+0

那麼,Marc-B會是什麼樣的出路。感謝您的及時回覆 – Nawaz

回答

5

設置,數據庫構建一個執行計劃,如果表是不是有它不能做。換句話說,placehodlers只能用於,而不能用於對象名稱或保留字。在這種情況下,您必須依靠Java來構建您的字符串:

String sql = "SELECT * FROM `" + tblName + "` WHERE Patient_ID = ?"; 

pst = conn.prepareStatement(sql); 
pst.setLong(1, key); 
ResultSet rs = pst.executeQuery(sql); 
+0

我試過這種方式。問題是表名具有/, - 等,然後如何逃避這些斜槓和破折號 – Nawaz

+0

MySQL允許您使用正向引號轉義對象名稱(例如表,列)。我相應地編輯了我的答案。 – Mureinik

+0

@Mureinik,我怎麼能加入其中,我使用表名作爲變量 –

相關問題