2017-02-06 1 views
0

私はh2データベースの最近のユーザーです。私はSQL構文の助けが必要です。テーブルビューからデータをtextFieldに設定できません - マウスカーソルと上下矢印キー(H2データベース)

h2 dBからデータを取得してJavaFX tableViewに設定することができます。mouseclickまたはbuttonpressアクション(Up &下矢印)を実行すると、tableViewからの現在のデータ行が表示されますテキストフィールドは、コードです。

私は次の例外を取得しています:

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

私はこの例外が他のデータベースに正常に動作(' "+slnoField.getText()+" ' ")プレースホルダとして、H2データベースに固有のSQL文法によるものです確信しています。正しい構文や解決策を提案してください。どうもありがとう。

@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

ありがとう、Fabianをお見逃しなく! – Berch

関連する問題