Java 检查数据库中的空记录

Java 检查数据库中的空记录,java,database,netbeans,Java,Database,Netbeans,此代码根据凭证编号搜索表。除此之外,我希望它检查特定凭证号是否存在,如果不存在,那么它应该告诉用户指定的凭证号不存在。目前,当我给出DB中不存在的凭证编号时,它没有任何作用。建议一些代码plz try { String sql = "select item_type as 'Item Type',md_by as 'Made By'," + "model as 'Model', selling_price as 'Selling Price'," + "selling

此代码根据凭证编号搜索表。除此之外,我希望它检查特定凭证号是否存在,如果不存在,那么它应该告诉用户指定的凭证号不存在。目前,当我给出DB中不存在的凭证编号时,它没有任何作用。建议一些代码plz

try {
    String sql = "select item_type as 'Item Type',md_by as 'Made By',"
     + "model as 'Model', selling_price as 'Selling Price',"
     + "selling_date as 'Selling Date', vouch_no as 'Voucher No.',"
     + "vouch_date as 'Voucher Date', record_no as 'Record No.' "
     + "from selling where vouch_no = ?";
    ps = con.prepareStatement(sql);
    ps.setInt(1, Integer.parseInt(txt_vouchno_s.getText()));
    rs = ps.executeQuery();
    Table_s.setModel(DbUtils.resultSetToTableModel(rs));
}   
catch(SQLException ex){
    JOptionPane.showMessageDialog(null, "Error: " + ex);
}
catch(Exception ex){
    JOptionPane.showMessageDialog(null, "Error: " + ex);
}
}

您可以创建一个自定义异常(比如NoRecordFoundException),并在结果集为空时抛出它。这需要添加到DbUtils.resultSetToTableModel()中。然后,您可以添加另一个catch块,查看数据库是否没有返回任何记录,并向用户发送相应的消息。

为什么不测试为空

在execute语句之后,可以立即使用if语句。比如说

rs = ps.executeQuery();
if (!rs.next()){
  JOptionPane.showMessageDialog(null, "Sorry your request with ID.1001 not found");
}
如果sql结果集为空,则无法跳转到非空结果集。您正在设置一个
sql
生成一个
ps.executeQuery
并查看结果。如果结果为空,则生成一个新的
sql
,依此类推。或者你认为vouch_no=1001是什么意思

您需要两个
ps=con.prepareStatement(sql)

比如说

rs = ps.executeQuery();
if (!rs.next()){
  JOptionPane.showMessageDialog(null, "Sorry your request with ID.1001 not found");
}
一个没有sql的
,其中vouch_no=?

psAll = con.prepareStatement(sqlAll);
psSearch = con.prepareStatement(sqlSearch);
 ...
rsAll = psAll.executeQuery();
Table_s.setModel(DbUtils.resultSetToTableModel(rsAll));

如果搜索并查找凭证,请将表的当前数据记录设置为指向该凭证。如果未找到凭证,请将表设置为第一条数据记录

这是一个很好的选择,但我希望应用程序不仅要检查它们,还要传递它们并跳转到非空的。递归方法呢?我们不能在这里用吗?我试图通过声明一个全局静态变量来编写一个递归方法,该变量存储凭证编号,代码中的其他方法都使用该凭证编号变量,但它不起作用。@Rehan:您不能使用
where vouch_no=?";如果你想查看数据库记录,那么就让它离开。但是搜索的标准是什么?我不想显示所有DB记录bcz所有其他按钮都可以处理凭证,如“新建”按钮、“保存”按钮、“更新”按钮、“搜索”按钮和“删除”按钮。@Rehan:对于“更新”和“删除”按钮,您必须拥有
凭证。但不是为了得到结果集。使用您的搜索按钮,您可以搜索,但如果此号码不存在,则没有此号码的记录!