猿问

使用准备好的语句设置表名

使用准备好的语句设置表名

我试图使用准备好的语句来设置一个表名以从中选择数据,但是在执行查询时,我一直会收到一个错误。

错误和示例代码显示在下面。

[Microsoft][ODBC Microsoft Access Driver] Parameter 'Pa_RaM000' specified where a table name is required.private 
String query1 = "SELECT plantID, edrman, plant, vaxnode FROM [?]"; //?=datepublic 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();

对造成这一切的原因有什么想法吗?


吃鸡游戏
浏览 395回答 3
3回答

临摹微笑

表名不能用作参数。一定是硬编码。所以你可以这样做:private String query1 = "SELECT plantID, edrman, plant, vaxnode FROM [" + reportDate + "?]";

FFIVE

这在技术上是可行的解决办法,但非常糟糕的做法。String sql = "IF ? = 99\n";sql += "SELECT * FROM first_table\n"; sql += "ELSE\n";sql += "SELECT * FROM second_table"; PreparedStatement ps = con.prepareStatement(sql);然后,当您想要从Firsttable中选择时,可以使用ps.setInt(1, 99);或者如果不是,你就把它设置成别的东西。
随时随地看视频慕课网APP

相关分类

Java
MySQL
我要回答