【发布时间】:2015-12-29 17:17:43
【问题描述】:
这是一个登录表单 此代码抛出异常结果集已关闭...为什么 rs 不包含表? 在我添加 > 总是打印磨损的用户名或密码
我该如何解决?
*preparedstatement 对代码没有影响
代码:
final JButton btnNewButton = new JButton("Log in");
btnNewButton.addActionListener(new ActionListener() {
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent arg0) {
String password=passwordField.getPassword().toString();
String UserName = textField_1.getText().toString();
try
{
Class.forName("org.sqlite.JDBC");
Connection con=DriverManager.getConnection("jdbc:sqlite:C:\\Users\\max\\Desktop\\javaproject\\hotel");
String sqlcheck="select * from login where login.Name ='"+UserName+"'and login.password='"+password+"'";
Statement s =con.createStatement();
ResultSet rs=s.executeQuery(sqlcheck);
String rsusername=rs.getString("name");
String rspassword=rs.getString("password");
if(rs.next())
{
btnNewButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
Hotel1 hotel=new Hotel1();
hotel.setVisible(true);
}
});
}
else
JOptionPane.showMessageDialog(null, "worng user name or password");
}
catch(ClassNotFoundException | SQLException e)
{
JOptionPane.showMessageDialog(null, "class not found exception"+e);
}
【问题讨论】:
-
您需要调用
rs.next()来获取第一个值。我猜没有第一个值,这就是您收到错误的原因。您在哪里关闭 ResultSet、Statement 和 Connection 资源? (除非你这样做,否则会有内存泄漏) -
当我在 sqlite 中执行此查询时确定 .... 检索值