检查DB是否有空记录

时间:2014-04-24 22:55:38

标签: java database netbeans

此代码根据凭证编号搜索表格。除此之外,我希望它检查是否存在特定的凭证号码,如果它不存在,那么它应该告诉用户指定的凭证号码不存在。目前,当我提供数据库中没有的凭证号码时,它没有做任何事情。建议一些代码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);
}
}

2 个答案:

答案 0 :(得分:1)

为什么不测试是空的?

执行语句之后,您可以立即使用if语句。例如

rs = ps.executeQuery();
if (!rs.next()){
  JOptionPane.showMessageDialog(null, "Sorry your request with ID.1001 not found");
}

如果sql结果集为空,则无法跳转到non empty one。您正在设置sql制作ps.executeQuery并查看结果。如果结果为空,请创建一个新的sql,依此类推。或者你认为where vouch_no = 1001意味着什么。

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

例如

一个没有sql where vouch_no = ?

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

如果您搜索并找到凭证设置Table_s当前数据记录以指向该凭证。如果没有找到凭证集Table_s到第一个数据记录。

答案 1 :(得分:0)

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