2014-04-24 105 views
1

此代码根据优惠券编号搜索表格。除此之外,我希望它检查如果特定优惠券编号是否存在,如果它不存在,那么它应该告诉用户指定优惠券编号不存在。目前,当我给出一个不存在于数据库中的优惠券号码时,它什么也不做。建议一些代码plz。检查空记录DB

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); 
} 
} 

回答

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设置为第一条数据记录。

+0

它的不错的选择,但我希望应用程序不仅检查他们,但通过他们,并跳转到非空的。 – Rehan

+0

@Rehan:看看我更新的答案 –

+0

递归方法呢?我们不能在这里使用它们吗?我试图通过声明一个全局静态变量来存储凭证编号,并且代码中的其他方法使用该凭证num变量但它不起作用来编写递归方法。 – Rehan

0

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