這個問題在這里已經有了答案: ResultSet: Exception: set type is TYPE_FORWARD_ONLY -- 為什么? (9 個回答) 9 小時前關閉。
所以我有一個這樣的代碼:
public static void ispisiSvakuDruguKnjigu(){
try{
Connection conn = getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from knjiga");
while(true){
if(rs.next()){
System.out.println(rs.getString("id") " " rs.getString("naslov"));
rs.relative(2);
} else {
return;
}
}
} catch (Exception e){
e.printStackTrace();
}
}
我們正在從 MySQL 資料庫讀取每 2 本書的課程中,它在我正在觀看的課程上正常作業,但在我的 PC 上,它向我顯示了如下錯誤:
java.sql.SQLException: Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY.
編輯 首先我要感謝大家的回答,我是一個遲到的學習者,也是一個非常大的 Java 初學者。我已經設法對其進行了測驗并修復了代碼,使其根據您的回答按預期作業。我的困惑主要是因為我正在觀看的課程和我的代碼完全相同,而且它對他們有用,而不必做我所做的。再次感謝大家的耐心,并為您的困惑感到抱歉。
我改變了這個:
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
uj5u.com熱心網友回復:
這是閱讀 JAVADOC值得的地方
boolean relative?(int rows) ... SQLException - if a database access error occurs; this method is called on a closed result set or the result set type is TYPE_FORWARD_ONLY ... Since: 1.2
uj5u.com熱心網友回復:
TYPE_FORWARD_ONLY 意味著您只能在結果集上向前移動,而不能向后移動,因此當您嘗試使用 beforeFirst() 回傳時會出現例外。嘗試使用prepareStatement(),如下所示:
pstat=con.prepareStatement("select * from knjiga");
rs=pstat.executeQuery();
int rowCount=0;
while(rs.next())
{
System.out.println(rs.getString("id") " " rs.getString("naslov"));
}
uj5u.com熱心網友回復:
理論上,任何 ResultSet 都可以向后、向前、到開始、到結束以及您喜歡的任何位置。至少,它有所有這些的方法。
不幸的是,實際上“交付”這個承諾的功能是昂貴的。事實上,如此昂貴,以至于您可以告訴 ResultSet 您希望它違背這些承諾,而是節省記憶體等。
這就是這里發生的事情:您有一個僅向前的結果集。在讓您逐行導航的所有方法中,只能 .next()正常作業,而所有其他方法都會拋出該例外。
這有點奇怪,relative(1)意思是“向前移動 1 行”,這與所做的完全相同next(),但是,next()可以作業并保證可以,并且任何 JDBC 驅動程式都可以在relative(1).
然而,從你寫問題的方式來看,聽起來你沒有意識到這一點,.relative(1)并且.next()在含義上是相同的(只是在實踐中不相同,因為有些配置.next()可以正常作業,并且relative(1)會拋出。
因此,最有可能的解決方法是:重新閱讀檔案,并熟悉這些方法的作用;你之前一定誤會了。
但是,如果你只是玩弄左右(要清楚,.relative(1)應該永遠。寫.next()的是你應該怎么寫),只是為了學習的目的,你有兩個選擇:
將 ResultSet 配置為完全可導航。這通常稱為“可滾動結果集”。
con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, "theSql")會那樣做。不過,我不建議這樣做 - 通常只撰寫代碼以便不需要滾動。只是打電話
.next()。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/336701.html
