无法从 tableView 将数据设置为 textField - 在 Mouseclick 和上下箭头键上(H2 数据库)

Posted

技术标签:

【中文标题】无法从 tableView 将数据设置为 textField - 在 Mouseclick 和上下箭头键上(H2 数据库)【英文标题】:Unable to set data to textField from tableView - on Mouseclick and Up and Down Arrow keys (H2 Database) 【发布时间】:2017-02-06 16:37:21 【问题描述】:

我是 h2 数据库的新用户,我需要一些有关 SQL 语法的帮助。

我能够从 h2 dB 中检索数据并将其设置到 JavaFX tableView 中,在执行鼠标单击或按钮按下操作(向上和向下箭头)时,预期的行为是将 tableView 中的当前数据行显示到textfields,下面是代码。

我收到以下异常:

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

我确定这个异常是由于 H2 数据库特有的 SQL 语法,因为占位符 (' "+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);
                      
                  
              
      );
  

【问题讨论】:

【参考方案1】:

您没有正确使用PreparedStatement。将? 放在要在查询字符串中插入参数的位置。您似乎没有添加其中之一:

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

【讨论】:

非常感谢 F***,忽略了这一点!

以上是关于无法从 tableView 将数据设置为 textField - 在 Mouseclick 和上下箭头键上(H2 数据库)的主要内容,如果未能解决你的问题,请参考以下文章

如何将tableView的约束设置为viewController?

无法将 UITableViewCell 设置为单元格

从选定的单元格获取数据(TableView)

将对象表索引路径设置为对象属性?

无法更改单元格的行高 - 有 2 个原型单元格

如何将表格视图的大小赋予 XIB