有没有在PreparedStatement中对表进行参数化?
select * from ? where id=?
如果没有,那么最好的方法是什么,或者,在没有失去PreparedStatement优势的情况下,有没有其他方法可以做到这一点?
感谢。
答案 0 :(得分:4)
简短的回答是,无法参数化预准备语句中的表名。您必须使用字符串连接构造sql。基本上准备好的语句用于列值,而不用于表名。
我能想到的最好的就是像这样使用string.format
:
String sql = String.format("select * from $1%s", yourtable);
答案 1 :(得分:0)
我们可以通过以下方式做到
"select * from "+table_name+" where id=?";
PreparedStatement允许您在where子句中提供动态查询参数
答案 2 :(得分:0)
使用占位符代替表名,然后将其替换为您的表名。
String strQuery = "INSERT INTO $tableName (col1, col2)
VALUES (?,?);";
并在您知道下面的表名时替换:
String query =strQuery.replace("$tableName",tableName);
stmt =connection.prepareStatement(query);
答案 3 :(得分:0)
String table_name= // get tablename
String sql= "select * from" +table_name+" where id=?";
答案 4 :(得分:-1)
如果你的PreparedStatement带有你所说的SQL查询,你可以这样做:
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了解更多信息。