JDBC查詢?cè)贘ava代碼中失敗,但在Navicat中成功的原因是什么?

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í)筆記(深入)”;

解決方法

  1. 修正參數(shù): 將代碼第66行中的參數(shù)“12”改為正確的“1”。

  2. 改進(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é)果集。

JDBC查詢?cè)贘ava代碼中失敗,但在Navicat中成功的原因是什么?

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊8 分享