【问题标题】:compare integer text field value with mysql data in java将整数文本字段值与java中的mysql数据进行比较
【发布时间】:2012-09-16 14:32:27
【问题描述】:

我要检查新输入的数据是否已经在表中

代码:

txtNo   = new JTextField();
{
    try {
        Class.forName("com.mysql.jdbc.Driver");
        String srcurl1      = "jdbc:mysql://localhost:3306/DB_name"; 
        Connection con      = DriverManager.getConnection(srcurl1,"root","paswrd");
        Statement stmt1     = con.createStatement();
        ResultSet rs1       = stmt1.executeQuery("select No from bank where No='"+txtNo.getText()+"' ");

        int ch =rs1.getInt("No");
        int ch4= Integer.parseInt(txtNo.getText());

        if(ch==ch4)    // input 58 == 58
         System.out.println("already exits");
    }
    catch(Exception e)
    {
        System.out.println("Exception:"+e);
    }
}

错误: Exception:java.sql.SQLException: Illegal operation on empty result set.

【问题讨论】:

  • 数据库中No列的sql类型是什么?它是声明为整数还是 varchar?

标签: java mysql jdbc


【解决方案1】:

你需要检查结果集是否有元素:

while(rs1.next())
{
    int ch = rs1.getInt("No");
    // ...
}

【讨论】:

  • while(rs1.next()){ int ch =rs1.getInt("No"); int ch4=整数.parseInt(txtNo.getText()); if(ch==ch4) { .... }} 在我出错的地方仍然出现异常
【解决方案2】:

当 select 语句返回一个空集时,您会遇到此异常。添加一个 try/catch 块,该块根据数据尚未在 catch 块中的表中起作用。

【讨论】:

    【解决方案3】:

    您需要先检查ResultSet 以查看它是否包含行:

    if (rs1.next()) {
       int ch =rs1.getInt("No");
       ...
    }
    

    【讨论】:

      【解决方案4】:

      检查数据库中是否存在特定记录的最简单方法可能如下:

      Select 1 from bank where No = [your_supplied_value]
      

      如果在您的数据库中找到包含所提供数据的行或返回空结果集,则此查询将返回 1。因此,您需要检查的是结果集中是否返回了 ANY 值,或者它是否为 emtpy。

      以下是帮助您入门的示例代码:

      txtNo   = new JTextField();
      {
          try {
              String compareText = txtNo.getText().trim();
      
              if(compareText.length() > 0){
                  Class.forName("com.mysql.jdbc.Driver");
                  String srcurl1      = "jdbc:mysql://localhost:3306/DB_name"; 
                  Connection con      = DriverManager.getConnection(srcurl1,"root","paswrd");
                  Statement stmt1     = con.createStatement();
                  ResultSet rs1       = stmt1.executeQuery("select 1 from bank where No='"+txtNo.getText()+"' ");
      
                  boolean isPresent = rs1.next();
      
                  if(isPresent){
                      System.out.println("Already exists!!");
                  }
              }
          }
          catch(Exception e)
          {
              System.out.println("Exception:"+e);
          }
      }
      

      我希望这不是你的最终代码,因为它有几个问题:

      • 您没有正确管理您的资源。完成对数据库的查询后,您应该考虑关闭结果集、语句和连接对象。

      • 请注意,我检查了 JTextField 中的文本是否为空。当您知道文本字段中没有值时,这是防止调用数据库的好方法。

      • 我建议使用 PreparedStatement 而不是 Statement 来查询您的数据库。

      【讨论】:

        【解决方案5】:

        ResultSet 最初位于第一行之前。所以在调用getXXX() 方法之一之前,您需要调用next() 将其移动到下一行(并检查它是否返回true)。

        【讨论】:

          【解决方案6】:
          JTextField input = new JTextField();
          ArrayList < Integer > list = new ArrayList < Integer > ();
          int integerv = Integer.parseInt(input.getText());
          try {
              Class.forName("com.mysql.cj.jdbc.Driver");
              Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/DB_name", "root", "yourpassword");
              Statement stm = con.createStatement();
              ResultSet rs = stm.executeQuery("select column_name from table_name");
          
              while (rs.next()) {
                  list.add(rs.getInt(1));
              }
              for (int a = 0; a < list.Size(); a++) {
                  if (a.get(a) == integerv) {
          
                      System.out.println("Match found");
          
                      break;
          
                  } else {
                      System.out.println("Match not found");
                      break;
                  }
              }
          } catch (Exception e) {
              System.out.println("Error :" + e.getMessage());
          }
          

          【讨论】:

            猜你喜欢
            • 2015-08-03
            • 1970-01-01
            • 2011-12-15
            • 1970-01-01
            • 1970-01-01
            • 2020-07-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多