2012-05-31 2 views
3

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

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 

ответ

6

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

+0

Это имело бы смысл! Благодаря :) – kentcdodds

Смежные вопросы