无法从 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 数据库)的主要内容,如果未能解决你的问题,请参考以下文章