2015-02-24 3 views
1

У меня естьJDBC передать параметры SQL запроса

employee(id, name, company, salary); 

нужно отображать данные для данного идентификатора

public static void Connect(String conString, String username, String password, int id) throws SQLException{ 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      Connection conn = null; 
      conn = DriverManager.getConnection(conString, username, password); 
      String query = "select * from employee where id = " + id + "" ; 
      ResultSet rs = null; 
      Statement stmt = null; 
      stmt = conn.createStatement(); 
      rs = stmt.executeQuery(query); 
      while(rs.next()){ 
       String name = rs.getString("name"); 
       String company = rs.getString("company"); 
       int salary = rs.getInt("salary"); 
       System.out.println("Name: " + name + "\tCompany: " + company + "\tSalary: " + salary); 
      } 
     } catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

Но здесь мы проходим идентификатор непосредственно. Как мы можем передать его как параметризованных запросов (например, как мы проходим ? во PreparedStatement)

+0

Возможный дубликат [передачи параметров в JDBC PreparedStatement] (http://stackoverflow.com/questions/12745186/passing-parameters-to-a-jdbc-preparedstatement) –

ответ

2

в том случае, если ваш запрос должен быть

String query = "select * from employee where id = ?"; 

вместо заявления вам необходимо создать PreparedStatement

PreparedStatement preparedStatement = conn.prepareStatement(query); 

и затем установите свой идентификатор в подготовленное заявление

preparedStatment.setInt(1, id); 

наконец выполнить запрос

resultSet = preparedStatement.executeQuery(); 
1

Это старый пост, но я все еще хотел бы добавить свой ответ.

У меня недостаточно репутации, чтобы прокомментировать ответ @ prasad, поэтому я добавляю небольшую коррекцию в качестве отдельного ответа. Собственно, прохождение запроса внутри praparedStatement.executeQuery() throws MySQLSyntaxErrorException, потому что все еще он вызывает Statement.executeQuery вместо PreparedStatement.executeQuery(). И откуда я знаю? Мне пришлось потратить достаточно времени на выяснение этой проблемы.

Так используйте PreparedStament.executeQuery() вместо PreparedStament.executeQuery (запрос).

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