2013-07-09 17 views
8

我在ResultSet中進行數據庫查詢並存儲Account對象。這裏是代碼:Resultset的getObject()方法 - 如何正確使用它?

try { 
    ResultSet rs = queryDatabase(); 
    int i=0; 
    while (rs.next()) { 
     Account account= rs.getObject(i, Account); //ERROR 
     accounts.add(account); 
     i++; 
    } 
} catch (Exception e) { 
} 

該代碼返回3個對象並將它們存儲在rs中。然後我想要在ResultSet中獲得這些對象,並將它們放入代碼中看到的ArrayList。但它會在指定的行中提供一個錯誤,說明預期爲;。我如何正確使用getObject方法?

+0

爲什麼'getObject'旁邊有雙括號:'(('和'))'? – rgettman

+0

它告訴你,你有一個*語法錯誤*。例如,太多的括號以及不屬於的類型。 –

+0

好吧,對不起,我修正了他們的偏鬼 – yrazlik

回答

3

ResultSet.getObject(和其他getXxx方法)將獲取從ResultSet的當前行中的數據和指標1,你已經確立了自己i變量以0值開始。

只要改變這個

int i=0; 

int i=1; 

此外,getObject需要一個PARAM,但你錯誤地發送兩個:

Account account= rs.getObject(i, Account); 

也許你試圖使用ResultSet#getObject(int, Class)(可從Java 7獲得),但你必須考慮到統計你的Account類不可能是神奇從數據庫列轉換爲此對象的一個​​實例。

看起來最好先查看JDBC trial,然後重試以解決您的問題。

這裏的另一個很好的來源審查:Using Customized Type Mappings

+0

我試了一下,並將erroneus行更改爲Account account = rs.getObject(i,Account.class);現在沒有語法錯誤,但它返回null,我將調試和編輯問題,謝謝你的方式 – yrazlik

+1

@iceface檢查我的答案的更新。 –

+0

這是有道理的,我找到了一種方式來做到這一點,謝謝。當我們使String s = rs時。的getString(0);它沒有給出任何錯誤,所以我想如果我爲Account對象做同樣的事情,那就沒問題,但它並不是 – yrazlik

1

我們的目標:

import java.io.Serializable; 
... 
class Account implements Serializable{ 
    public String data; 
} 

如何從BD得到我們的目標:

while (rs.next()) { 
     Object accountJustObject = rs.getObject(i); 
     Account account = (Account)accountJustObject; 
     accounts.add(account); 
     i++; 
} 

如何拯救我們的目標:

public void InsertAccount(int id, Account newaccount){ 
reparedStatement insertNew = conn.prepareStatement(
    "INSERT INTO root(id,account) VALUES (?,?)"; 
    insertNew.setInt(1, id);    //INT field type 
    insertNew.setObject(2, newaccount); //OTHER field type 
    insertNew.executeUpdate(); 
) 
} 

在H2數據庫下測試。

相關問題