我正在尝试连接我的jtextbox中的每个表字段但是当我运行此代码时它会说语法错误。我正在使用sqlite和netbeans我希望你能帮助我
try{
String sql="Select * From account where id=txtId.getText() AND fname=txtFname.getText() AND lname=txtLname.getText() AND username=txtUsername.getText() AND password=txtPassword.getText()";
pst=conn.prepareStatement(sql);
pst.setString(1, txtId.getText());
pst.setString(2, txtFname.getText());
pst.setString(3, txtLname.getText());
pst.setString(4, txtUsername.getText());
pst.setString(5, txtPassword.getText());
pst.execute();
rs.close();
pst.close();
}
catch(SQLException e){
JOptionPane.showMessageDialog(null,e);
}
finally{
try{
rs.close();
pst.close();
}
catch(SQLException e){
JOptionPane.showMessageDialog(null,e);
}
}
答案 0 :(得分:1)
尝试在您的查询中添加占位符(?)..
String sql="Select * From account where id=? AND fname=? AND lname=? AND username=? AND password=?";
您提供的是价值,但您的查询中没有占位符:
pst.setString(1, txtId.getText());
编辑1:回复您的评论
try{
String sql="Select * From account where id=? AND fname=? AND lname=? AND username=? AND password=?";
pst=conn.prepareStatement(sql);
pst.setString(1, txtId.getText());
pst.setString(2, txtFname.getText());
pst.setString(3, txtLname.getText());
pst.setString(4, txtUsername.getText());
pst.setString(5, txtPassword.getText());
rs=pst.execute(); //to get resultset
while(rs.next())
{
//Do what you want to do if the records are found
System.out.println(rs.getString(1));
System.out.println(rs.getString(2));
}
}
catch(SQLException e){
JOptionPane.showMessageDialog(null,e);
}
finally{
try{
if(rs!=null)rs.close();
if(pst!=null)pst.close();
}
catch(SQLException e){
JOptionPane.showMessageDialog(null,e);
}
}
答案 1 :(得分:0)
您正在String字面值中进行方法调用。最简单的方法是将方法调用移出String并获取变量中的返回值。然后,您可以将这些附加到查询字符串。
正确的方法是使用PreparedStatement。它专为这些情况而设计。教程:http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
更新:
由于您使用的是PreparedStatement,请将查询中的任何未知值替换为? 。然后,您可以稍后使用适当的setter设置它们。