如何在java中将用户输入与我的数据库进行比较

时间:2014-12-13 03:03:27

标签: java database

如标题所示,我已经尽力将用户输入与我的数据库进行比较,并使用真正的输入。但是,当我的数据库中不存在输入时,我不知道下面的代码有什么问题,请帮忙。

private class da implements ActionListener{
 public void actionPerformed(ActionEvent e){
           Connection con = null;

      String url = "jdbc:mysql://localhost:3306/المكتبة";
      String unicode = "?useUnicode=yes&characterEncoding=UTF-8";
  try{
con = DriverManager.getConnection(url+unicode,"root","");

 PreparedStatement upd = con.prepareStatement("SELECT * FROM library WHERE author =?'");
 upd.setString(1,name.getText());
 ResultSet rs = upd.executeQuery();


while(rs.next()){
    String authorname = rs.getString("author");
    String bookname = rs.getString("bookname");
    String categort = rs.getString("category");
    int isbn = Integer.parseInt(rs.getString("ISBN"));
    String data = "اسم المؤلف: "+authorname+"\n"+"اسم الكتاب: "+bookname+"\n"+"التصنيف: "+categort+"\n"+"ISBN: "+isbn;


 if(name.getText().equals(authorname))
     txt.setText(data);
 else
     txt.setText("no matches");

2 个答案:

答案 0 :(得分:0)

你应该在if / else。

之前关闭while()循环

虽然这不是最漂亮的代码。

答案 1 :(得分:0)

问题与此部分有关:

while(rs.next()){

 // ... other code 

 if(name.getText().equals(authorname))
     txt.setText(data);
 else
     txt.setText("no matches");

如果在您的数据库中找不到name.getText()的值,rs.next()将永远不会返回true。由于您已将if包含在while循环中,因此如果您的数据库中未找到匹配项,则永远不会执行它。你可以通过多种方式解决它,一种方法是做这样的事情:

boolean has_results = rs.next();

if(has_results){

    do {
        // ... your loop code
    }while(rs.next());

}else {
    text.setText("No Matches");
}

在此代码中,如果第一次调用rs.next()返回false,我们就不知道从数据库返回任何内容。否则,正常循环。在这个例子中,我将循环改为后检查do...while循环,因为我们现在要在循环结束时检查rs.next()

注意: This answer演示了另一种检查结果集是否包含行的方法。