当前位置: 首页 > 面试题库 >

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

赫连坚
2023-03-14
问题内容

我正在尝试使用准备好的语句来设置表名以从中选择数据,但是执行查询时,我总是收到错误消息。

错误和示例代码如下所示。

[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 + "?]";


 类似资料:
  • 问题内容: 我正在尝试使用准备好的语句来设置表名称以从中选择数据,但是在执行查询时,我总是收到错误消息。 错误和示例代码如下所示。 有什么想法可能会导致这种情况? 问题答案: 表名不能用作参数。它必须是硬编码的。因此,您可以执行以下操作:

  • 问题内容: 我想知道是否仍然可以使用准备好的语句指定返回的列名。 我正在使用MySQL和Java。 当我尝试时: 我得到了这种类型的语句(在执行之前立即打印)。 我希望看到: 我知道,我不能为表名这样做,因为讨论 这里,但不知道是否有一些方法来做到这一点对列名。 如果没有,那么我将只需要尝试确保对输入进行清理,以免导致SQL注入漏洞。 问题答案: 这表明数据库设计不正确。用户不需要知道列名。创建一

  • 问题内容: 我想知道是否仍然可以使用准备好的语句指定返回的列名称。 我正在使用MySQL和Java。 当我尝试时: 我得到了这种类型的语句(在执行之前立即打印)。 但我希望看到: 我知道,我不能为表名这样做,因为讨论 这里,但不知道是否有一些方法来做到这一点对列名。 如果没有,那么我只需要尝试确保对输入进行清理,以免导致SQL注入漏洞。 问题答案: 这表明数据库设计不正确。用户不需要知道列名。创建

  • 问题内容: 我有一个名字列表,例如: 并声明: 如何执行以下操作: 有解决方法吗?有人可以解释为什么缺少这种方法吗? 使用:java,postgresql,jdbc3 问题答案: 没有干净的方法仅通过在我所知道的列表上设置列表来执行此操作。 编写代码,以适当数量的问号(与列表中的数字相同)构造​​SQL语句(或更好地替换单个?或类似的标记),然后遍历列表为每个参数设置参数。

  • 我有一个将列名映射到值的。要更新的列事先未知,在运行时决定。 例如< code>map = {col1: "value1 ",col2: "value2"}。 我想执行一个< code>UPDATE查询,用这些列将表更新为相应的值。我能做以下事情吗?如果没有,有没有一种优雅的方法可以不用手动构建查询?