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 。