我正在开发一个可以通过JDBC / ODBC访问数据库的JavaFX应用程序。 当我点击一个按钮时,我想要一些TextFields根据ResultSet更新他们的文本,显示某个用户的名字和姓氏。
当我尝试调用TextFields的TEXTFIELD.setText(RESULTSET.getString(1))时,我得到一个SQLException:找不到数据。
以下是代码:
@FXML
private TextField tf_matricula;
@FXML
TextField tf_apellido;
@FXML
TextField tf_apellidos;
@FXML
TextField tf_nombre;
@FXML
public void btn_ir_Action(ActionEvent event){
try(Connection con = JDBCHandler.getConnection()){
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("SELECT Apellido, Apellidos, Nombre FROM Alumnos WHERE Matricula='" + tf_matricula.getText() + "'");
if(rs.next()){
tf_apellido.setText(rs.getString(1));
tf_apellidos.setText(rs.getString(2));
tf_nombre.setText(rs.getString(3));
}
}catch(SQLException | ClassNotFoundException ex){
System.out.println(ex.getMessage());
ex.printStackTrace();
}
}
我收到的错误消息如下:
No data found
java.sql.SQLException: No data found
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7137)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3906)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5697)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:353)
at pruebaingresos.SistemasAlumnosFXMLController.btn_ir_Action(SistemasAlumnosFXMLController.java:64)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:75)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
奇怪的是,当我将ResultSet信息保存到Strings中然后将它们传递给TextFields的setText方法时,它就能完美地运行。如下图所示
@FXML
public void btn_ir_Action(ActionEvent event){
try(Connection con = JDBCHandler.getConnection()){
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("SELECT Apellido, Apellidos, Nombre FROM Alumnos WHERE Matricula='" + tf_matricula.getText() + "'");
if(rs.next()){
String apellido = rs.getString(1);
String apellidos = rs.getString(2);
String nombre = rs.getString(3);
tf_apellido.setText(apellido);
tf_apellidos.setText(apellidos);
tf_nombre.setText(nombre);
}
}catch(SQLException | ClassNotFoundException ex){
System.out.println(ex.getMessage());
ex.printStackTrace();
}
}
我知道这个问题实际上已经解决了,但我仍然想知道为什么会发生这种情况,我以后不想因为这个原因而有任何错误,而且我还没有找到原因。