使用准备好的语句来设置表名
我试图使用准备语句来设置表名来select数据,但是当我执行查询时,我不断收到错误。
错误和示例代码显示在下面。
[Microsoft][ODBC Microsoft Access Driver] Parameter 'Pa_RaM000' specified where a table name is required. private String query1 = "SELECT plantID, edrman, plant, vaxnode FROM [?]"; //?=date public Execute(String reportDate){ try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection conn = DriverManager.getConnection(Display.DB_MERC); PreparedStatement st = conn.prepareStatement(query1); st.setString(1, reportDate); ResultSet rs = st.executeQuery();
有什么想法可能造成这个?
表名不能用作参数。 它必须是硬编码的。 所以你可以做这样的事情:
private String query1 = "SELECT plantID, edrman, plant, vaxnode FROM [" + reportDate + "?]";
正如一些人所说,你不能使用一个表名的语句参数,只能将variables作为条件的一部分。
基于这个事实,你有一个至less有两个表名的variables表名,也许最好是创build一个方法来获取你正在存储的实体并返回一个准备好的语句。
PreparedStatement p = createStatement(table);
这是技术上可行的解决方法,但非常糟糕的做法。
String sql = "IF ? = 99\n"; sql += "SELECT * FROM first_table\n"; sql += "ELSE\n"; sql += "SELECT * FROM second_table"; PreparedStatement ps = con.prepareStatement(sql);
然后当你想从first_table中select你设置的参数
ps.setInt(1, 99);
或者,如果没有,你把它设置为别的东西。
我不确定你可以使用PreparedStatement来指定表的名字,只是一些字段的值。 无论如何,你可以尝试相同的查询,但没有括号:
"SELECT plantID, edrman, plant, vaxnode FROM ?"
String table="pass"; String st="select * from " + table + " "; PreparedStatement ps=con.prepareStatement(st); ResultSet rs = ps.executeQuery();
有一种方法可以将表名称作为variables
String NameOfTable =“test.Employee”;
String Fquery =“SELECT * FROM”+ NameOfTable +“where Done ='No'”;
注意:在FROM和后面的“以及”和where关键字之间应该有一个空格