JDBC PreparedStatements

时间:2015-04-28 10:58:46

标签: java jdbc

有没有在PreparedStatement中对表进行参数化?

select * from ? where id=?

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

感谢。

5 个答案:

答案 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了解更多信息。