Сортировка в JDBC readyStatement

1

Я хочу отсортировать инструкцию SQL на основе ввода пользователем, используя preparedStatement. У меня есть student стол с тремя колоннами id, name и age, и пользователь может выбрать, какие колонки результаты сортируются по.

try
   {
    System.out.println("Enter the column name to sort the data with");
    Scanner sc=new Scanner(System.in);
    String str=sc.next();
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","SYSTEM","SYSTEM");
    if(str.equals("id"))
    {
        String query="select * from STUDENT order by ?";
        PreparedStatement pst=con.prepareStatement(query);
        pst.setString(1,"id");
        pst.executeUpdate();
    }
    if(str.equals("name"))
    {
        String query="select * from STUDENT order by ?";
        PreparedStatement pst=con.prepareStatement(query);
        pst.setString(1,"name");
        pst.executeUpdate();
    }
    if(str.equals("age"))
    {
        String query="select * from STUDENT order by ?";
        PreparedStatement pst=con.prepareStatement(query);
        pst.setString(1,"age");
        pst.executeUpdate();
    }
   }
   catch(Exception e)
   {  
        e.printStackTrace();
   }
  • 0
    Это не более актуально для нас, чем любой другой вопрос, о котором кто-то упоминал в предыдущем вопросе. На самом деле это не наша проблема, если вы оставили задание до последней минуты. Было бы полезно, если бы вы сказали, что не так с вашим текущим кодом - какую ошибку или поведение вы получаете.
Теги:
jdbc

1 ответ

3

Это не так, как работают подготовленные операторы: вы пытаетесь построить динамический SQL, тогда как подготовленный оператор выдает инструкцию SQL вместе со связанными переменными, которые не могут использоваться для имен столбцов или таблиц.

Таким образом, вы можете сделать это:

String query="select * from STUDENT where some_col = ?";
PreparedStatement pst=con.prepareStatement(query);
pst.setString(1,"some_value");
pst.executeUpdate();

но не это:

String query="select * from ?";
PreparedStatement pst=con.prepareStatement(query);
pst.setString(1,"STUDENT");
pst.executeUpdate();

поскольку вы не можете использовать переменные "заполнители" для таблиц или других объектов базы данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню