2015-05-20 76 views
-1

哪一種方法可以從Sqlite數據庫處理Java中的ResultSet?如何處理結果以正確的方式處理?

目前我有一個「SQL」類來完成所有的SQL查詢。

如果另一個類需要某些數據,它會調用SQL類的一個方法,SQL類會將ResultSet存儲到一個Array或其他類中,並返回該數組。

但是,這有點愚蠢,我知道這當然不是正確的方式。

那麼,如何在不使用這種惡意方法的情況下將ResultSet的數據導入到其他類中?

我奮鬥的一點是,一旦Statement被關閉,ResultSet就會關閉,所以我不能返回ResultSet。

我很確定我有一個非常大的概念問題,但我不知道如何解決它。

+0

不要使用數組,而是使用'List ',或者在* worst *的情況下,使用'List >'作爲從ResultSet讀取數據的結果。 –

回答

2

在談到普通的JDBC常見的做法

  1. 定義你的程序將運行抽象。
  2. 將這些抽象映射到DB結構。
  3. 實現這些抽象 - 實體的類。
  4. 在您的代碼中提供一個特殊圖層來爲這些實體執行CRUD操作。

對於上述設計,建議使用DAO模式 - 它允許您爲邏輯分隔的代碼部分(例如,單獨實體的單獨DAO)分隔數據庫訪問,從而導致耦合鬆散。

ResultSet加工方面:

  • 唯一的DAO應該做ResultSet處理
  • ResultSet S IN的DAO應該翻譯成代表程序的抽象,只有這些類的類應該從DAO的返回
+0

thx幫助了很多。在實體類中有一個構造函數可以獲得ResultSet並填充實體或者在CRUD操作類中填充實體嗎? – Teifun2

+0

那麼,從完美主義者的角度來看,您應該在DAO中保留'ResultSet'處理 - 這簡化了代碼維護,特別是在DB/DB結構發生變化的情況下。 –

+0

此外,它建議將業務邏輯分離爲一個單獨的層:例如爲Person和PersonDAO具有PersonProcessor類(例如,PersonProcessor.login(String login)使用PersonDAO來加載Person登錄,還可以向他發送通知郵件等)。所有其他代碼只使用「PersonProcessor」,最好對「PersonDAO」一無所知。但這是一個完美的例子)對於一個簡單的應用程序來說,這個結構看起來很複雜,所以* Processor和* DAO通常被實現爲一個類,等等。 –

2

您應該將ResultSet映射到一個類並返回該類。

舉例來說,如果你有一個User類,有一個user表與name

List<User> results = new ArrayList<User>(); 
while (resultSet.next()) { 
    User user = new User(); 
    user.setName(rs.getString("name"); 
    results.add(user); 
} 
+0

好的,我有時候已經這樣做了。但是,我仍然需要爲每張桌子和視圖創建一個班級!選擇不同表格的語句需要不同的方法。有沒有更有效的方法? – Teifun2

+1

@ Teifun2這是手工操作的方式。如果你想要更多的「automagic」尋找JPA。 – pablosaraiva