Вопрос по java, sql – ORA-00903: неверное имя таблицы в PreparedStatement

3

У меня есть метод, который будет выполнять запрос со списком QueryParameters для подготовленного оператора.HelperConnection а такжеQueryParameter просто маленькие бобы Java и должны быть самоочевидными на основеgetВы видите здесь. Я пытаюсь сделатьselect * from dual используя вместоselect * from ? гдеQueryParameter тип STRING и значениеdual, Тем не менее, я получаюjava.sql.SQLSyntaxErrorException: ORA-00903: invalid table name ошибка. Мой код и вывод ниже. Что случилось?

public static ResultSet executeQuery(HelperConnection helperConnection, String query, QueryParameter... params) throws SQLException {
  System.out.println("The connection is: " + helperConnection.getJdbcURL());
  System.out.println("The query is: " + query);
  if (params.length > 0) {
    System.out.println("The QueryParameters are:");
    System.out.println("\t" + StringHelper.splitBy(StringHelper.newline + "\t", params));
  }
  Connection conn = helperConnection.createOracleConnection();
  PreparedStatement pstmt = conn.prepareStatement(query);
  for (int i = 1; i <= params.length; i++) {
    QueryParameter param = params[i - 1];
    switch (param.getType()) {
      //Other cases here
      case QueryParameter.STRING:
        pstmt.setString(i, param.getValue());
        break;
    }
  }

  ResultSet rs = pstmt.executeQuery();
  conn.commit();
  return rs;
}

Выход:

The connection is: //.....My connection
The query is: select * from ?
The QueryParameters are:
    String - dual

Ваш Ответ

1   ответ
6

PreparedStatement параметры только дляvalues - не для частей SQL-запроса, таких как таблицы. Могут существовать некоторые базы данных, которые поддерживают то, что вы пытаетесь достичь, но я не верю, что Oracle является одной из них. Вам нужно будет указать имя таблицы напрямую - и, конечно, осторожно.

Это имело бы смысл! Спасибо :) kentcdodds

Похожие вопросы