2017-02-06 21 views
0

Я недавний пользователь базы данных h2, мне нужна помощь в синтаксисе SQL.Невозможно установить данные в textField из tableView - на клавиши Mouseclick и Up и Down (база данных H2)

Я могу извлечь данные из h2 дБ и установить его в таблицу JavaView XView, при выполнении действия mouseclick или нажатия кнопки (Up & Down стрелки) предполагаемое поведение - отобразить текущую строку данных из таблицыView в текстовые поля, ниже - код.

Я получаю следующее исключение:

Invalid value "1" for parameter "parameterIndex" [90008-193] 

Я уверен, что это исключение из-за SQL грамматику уникальной в базу данных H2, как заполнитель (' "+slnoField.getText()+" ' ") штрафа в других базах данных работ. Пожалуйста, вы можете предложить правильный синтаксис или решение. Большое спасибо.

@FXML 
    public void UpdateTable(){ 
     data.clear(); 
     try 
     { 
      conn = lrconn.getDatabaseConnection(); 
      String sql = "SELECT * from APP_TABLE ; 
      pst = conn.prepareStatement(sql); 
      rs = pst.executeQuery(); 
      while(rs.next()) 
      { 

      data.add(new TestPOJO(
       rs.getString("SLNO"), 
       rs.getString("NAME") 
      )); 
       Table.setItems(data); 
      } 
      pst.close(); 
      rs.close(); 
     } 
     catch(Exception e1) 
     { 
      e1.printStackTrace(); 
     } 

     Table.setOnMouseClicked((MouseEvent me) ->{ 
        try{ 
         conn = lrconn.getDatabaseConnection(); 
         TestPOJO user = (TestPOJO)Table.getSelectionModel().getSelectedItem(); 
       String sql = "SELECT * from APP_TABLE where SLNO =' "+slnoField.getText()+" ' "; 
         pst = conn.prepareStatement(sql); 
         pst.setString(1, user.getSLNO()); 
         rs = pst.executeQuery(); 

         while(rs.next()){ 
         slnoField.setText(rs.getString("SLNO")); 
         nameField.setText(rs.getString("NAME")); 
         } 
         rs.close(); 
         pst.close(); 
        }catch(SQLException ex){ 
         Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex); 
        } 

       } 
    ); 

     Table.setOnKeyReleased((KeyEvent e) ->{ 
        if(e.getCode() == KeyCode.UP || e.getCode() == KeyCode.DOWN){ 
         try{ 
          TestPOJO user = (TestPOJO)Table.getSelectionModel().getSelectedItem(); 
          String sql = "SELECT * from APP_TABLE where SLNO =' "+slnoField.getText()+" ' "; 
          pst = conn.prepareStatement(sql); 
          pst.setString(1, user.getSLNO()); 
          rs = pst.executeQuery(); 
          while(rs.next()){ 
           slnoField.setText(rs.getString("SLNO")); 
           nameField.setText(rs.getString("NAME")); 

         catch(IOException | SQLException ex){ 
          Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex); 
         } 
        } 
       } 
    ); 
    } 

ответ

0

Вы не используете PreparedStatement правильно. Место ? в тех местах, где вы хотите вставить параметры в строку запроса. Вы, кажется, не добавили один из них:

String sql = "SELECT * from APP_TABLE where SLNO = ?"; 
pst = conn.prepareStatement(sql); 
pst.setString(1, user.getSLNO()); 
rs = pst.executeQuery(); 
+0

Большое спасибо, Фабиан, не обратил на это внимания! – Berch

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

  • Нет связанных вопросов^_^