30/09/2018, 16:06

Hàm boolean luôn trả lại kết quả true(lỗi)

Mình có viết một hàm boolean để kiểm tra tài khoản và xe ứng với một giá trị deviceCode cụ thể, mình viết như sau:

public boolean GetDiviceByDeviceCode( String accountID, String deviceID) throws DBException
{
    DBConnection dbc = null;
    Statement stmt = null;
    ResultSet rs = null;
    boolean success = true;
    try {
        String sql = "select * from Device where accountID =' "+accountID+"' and deviceID ='"+deviceID
        +"' and deviceCode = 'TSTZ05RS232' ";
        dbc = DBConnection.getDefaultConnection();
        stmt = dbc.execute(sql);
        rs = stmt.getResultSet();
        if(rs == null)
        {
            success = false;
        }
        else
            success = true;
    }
    catch (Exception e)
    {
        throw new DBException(e.getMessage());
    }
    return success;
}

Sau đó mình dùng MySQL kiểm tra lại thì một số cho giá trị true(show được kết quả), một số cho ra null (false). Nhưng code java của mình gọi hàm này thì luôn cho giá trị true(ngay cả với những account cho ra kết quả null ở phần kiểm tra trên MySQL). Mình muốn hỏi là tại sao hàm boolean của mình luôn trả lại giá trị đúng(true)?

Nguyễn Minh Dũng viết 18:21 ngày 30/09/2018

Kiểm tra lại, có thể rs không bằng null

viết 18:23 ngày 30/09/2018

Đúng là rs chỉ null khi nó không kết nối được tới db hay câu truy vấn sai

Nguyễn Minh Dũng viết 18:18 ngày 30/09/2018

Vậy dùng điều kiện khác đừng kiểm tra với null

if (!rs.next())
    success = false;
else
    success = true;
viết 18:11 ngày 30/09/2018

mình sửa lại như bác @ltd và gọi nó

 if(objrp.GetDiviceByDeviceCode(acctName,device) == true)
     print sth;
else
    print msg error;

nhưng không ra được kết quả(trong trường hợp true)(không in ra được gì )

Nguyễn Minh Dũng viết 18:16 ngày 30/09/2018

Sau đó mình dùng MySQL kiểm tra lại thì một số cho giá trị true(show được kết quả), một số cho ra null (false). Nhưng code java của mình gọi hàm này thì luôn cho giá trị true(ngay cả với những account cho ra kết quả null ở phần kiểm tra trên MySQL). Mình muốn hỏi là tại sao hàm boolean của mình luôn trả lại giá trị đúng(true)?

Trước hết là sửa như trên có giải quyết được vấn đề này không, chưa nói đến trường hợp true.

viết 18:09 ngày 30/09/2018

Có giải quyết được bác(th luôn trả lại true), giờ thì dù true hay false đều k in ra đc gì(k kết quả đúng cũng không error message)

Nguyễn Minh Dũng viết 18:11 ngày 30/09/2018

Có giải quyết được bác

Vậy xong Lập topic khác, thảo luận vấn đề khác. Bạn viết code ra, đừng ghi mã giả thế này, vì Đạt không rõ cái gì là sth.

if(objrp.GetDiviceByDeviceCode(acctName,device) == true)
     print sth;
else
    print msg error;
viết 18:16 ngày 30/09/2018

sorry, mình lan man quá

Deactivated viết 18:20 ngày 30/09/2018

Theo mình thấy source của bạn nếu có exception thì sẽ chả có return ra true hay false gì cả.

viết 18:15 ngày 30/09/2018

Bác đang nói về code mà em vừa post ở bên trên ạ?

Nguyễn Minh Dũng viết 18:07 ngày 30/09/2018

@bachtiensinh cao nhân cao nhân. Vậy giờ mình bỏ cái rethrow đi hả?

throw new DBException(e.getMessage());
Deactivated viết 18:22 ngày 30/09/2018

Thì mình ko rõ mục đích throw Exception là gì, nếu đoạn code ở ngoài có bắt lại xử lý thì ok, nhưng ý chính là nếu có exception thì đoạn

if(objrp.GetDiviceByDeviceCode(acctName,device) == true)
     print sth;
else
    print msg error;

sẽ không in ra gì cả nếu có Exception.

buithaiminh viết 18:10 ngày 30/09/2018

Bạn gán boolean success = true làm giá trị mặc định
Sau đó bạn try catch mà lại để if else gán giá trị của success trong try { } thì nếu có Exception xảy ra, boolean success sẽ luôn trả về true là hiển nhiên.
Mình không chắc lắm về mục đích của bạn, nhưng có vẻ sửa như vầy sẽ đúng ý bạn muốn:
Thêm success = false; vào catch { } thì lúc này nếu rs == null thì success = false; nếu có Exception thì success = false; luôn

catch (Exception e) {
   throw new DBException(e.getMessage());
   success = false;
}

Trường hợp nếu rs chỉ null khi có lỗi thì chẳng cần if else gì hết. Cứ bên trong try gán success = true, bên trong catch gán success = false

try {
   // your code
   success = true;
} catch {
   // your code
   success = false;
}
Cui Bap Cui Bap viết 18:11 ngày 30/09/2018

Mình nghĩ bạn nên đưa cái if…else ra ngoài try…catch… Như vậy dễ debug hơn

try{
...
}
catch(){...}

if(){
...
}
else{
...
}
Nguyễn Minh Dũng viết 18:09 ngày 30/09/2018

Đồng ý, làm vậy hợp lý hơn. Khi nào query không bị lỗi thì mới giải quyết tiếp

Bài liên quan
0