0

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

代码:

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.

4

6 回答 6

0

您需要检查第ResultSet一个以检查它是否包含行:

if (rs1.next()) {
   int ch =rs1.getInt("No");
   ...
}
于 2012-09-16T14:34:54.187 回答
0

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

于 2012-09-16T14:35:27.570 回答
0

您需要检查结果集是否包含元素:

while(rs1.next())
{
    int ch = rs1.getInt("No");
    // ...
}
于 2012-09-16T14:35:35.550 回答
0

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

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 来查询您的数据库。

于 2012-09-16T15:46:14.663 回答
0

AResultSet最初位于第一行之前。因此,在调用其中一个方法之前,您需要调用next()以将其移动到下一行(并检查它是否返回truegetXXX()

于 2012-09-19T12:00:51.480 回答
0
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());
}
于 2021-06-14T04:32:58.023 回答