jdbc查詢失敗排查:Java代碼與navicat結(jié)果差異分析
本文分析一個(gè)JDBC查詢問題:sql語句在navicat中執(zhí)行成功,但在Java代碼中卻失敗。 問題代碼片段(此處應(yīng)插入圖片,請(qǐng)參考原文圖片)使用了JDBC連接數(shù)據(jù)庫并執(zhí)行SQL查詢。Navicat執(zhí)行結(jié)果(此處應(yīng)插入圖片,請(qǐng)參考原文圖片)顯示兩條數(shù)據(jù),但Java代碼無法獲取任何數(shù)據(jù)。問題位于代碼第66行及其后續(xù)語句。
分析表明,問題源于兩方面:
首先,代碼第66行存在參數(shù)錯(cuò)誤。圖片顯示代碼使用了“12”,而sql語句實(shí)際參數(shù)為“1”。參數(shù)不匹配導(dǎo)致查詢結(jié)果為空。
其次,代碼使用System.out.println(rs.next())。rs.next()移動(dòng)結(jié)果集游標(biāo)到下一行,直接打印其結(jié)果(布爾值)并不能獲取數(shù)據(jù)。 因此,第一行數(shù)據(jù)被跳過,后續(xù)操作從第二行開始,導(dǎo)致看起來沒有數(shù)據(jù)。
立即學(xué)習(xí)“Java免費(fèi)學(xué)習(xí)筆記(深入)”;
解決方法:
-
修正參數(shù): 將代碼第66行中的參數(shù)“12”改為正確的“1”。
-
改進(jìn)數(shù)據(jù)讀取: 使用循環(huán)遍歷結(jié)果集,逐行獲取數(shù)據(jù)。 例如:
while (rs.next()) { String column1 = rs.getString("column_name1"); int column2 = rs.getInt("column_name2"); // ... 處理獲取到的數(shù)據(jù) ... }
通過修正參數(shù)和改進(jìn)數(shù)據(jù)讀取方式,即可正確獲取JDBC查詢結(jié)果。 避免僅依賴rs.next()判斷數(shù)據(jù)是否存在,而應(yīng)結(jié)合循環(huán)和數(shù)據(jù)獲取方法來處理結(jié)果集。