JDBC PreparedStatements中的高级参数化

无论如何都要在PreparedStatement中对表进行参数化?

select * from ? where id=? 

如果没有,那么最好的方法是什么,或者,有没有其他方法可以做到这一点而不失去PreparedStatement的优势?

谢谢。

简短的回答是,您无法在预准备语句中参数化表名。 你必须使用字符串连接来构造sql。 基本上准备好的语句用于列值,而不用于表名。

我能想到的最好的是使用string.format如下所示:

 String sql = String.format("select * from $1%s", yourtable); 

我们可以通过以下方式做到

  "select * from "+table_name+" where id=?"; 

PreparedStatement允许您仅在where子句中提供动态查询参数

使用占位符代替表名,然后用您的表名替换它。

 String strQuery = "INSERT INTO $tableName (col1, col2) VALUES (?,?);"; 

当你知道如下表格名称时替换:

 String query =strQuery.replace("$tableName",tableName); stmt =connection.prepareStatement(query); 
 String table_name= // get tablename String sql= "select * from" +table_name+" where id=?"; 

如果你有一个带有SQL查询的PreparedStatement,你可以这么说:

 int yourID = 1; String tablename = "table"; String query = "SELECT * FROM " + tableName + " where id = ?";´ PreparedStatement statement = con.prepareStatement(query); statement.setInt(1, yourID); 

它会取代?1 。 如果你有多个? 你可以设置那些

 statement.setString(2, "YourString"); 

有关更多信息,请查看http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html 。