題:
一個簡單的Java數據庫庫?
JonasCz - Reinstate Monica
2015-04-25 00:22:26 UTC
view on stackexchange narkive permalink

我正在尋找一個庫來管理Java應用程序中的“數據庫”。我想要一些簡單易用的東西。具體來說,我正在尋找以下內容:

  • 易於使用。我想將一個JAR添加到我的項目中,並且數據庫是單個Java File 。我想避免設置本地服務器或連接等。完全沒有本地依賴項的Java會很好。

  • 使用簡單。我只需要存儲帶有一些字符串的表並進行簡單查詢即可。

  • 是輕量級的。

我基本上是在尋找模仿“表格”,例如帶有文本數據的Excel工作表。

像這樣的任何庫嗎?

我的第一個問題在這裡,請保持溫柔:-)
正如Flimzy的答案所說,您需要提供更多信息。 [A]哪種數據庫:平面文件數據庫,關係數據庫,鍵值數據庫,文檔數據庫,對像數據庫?如果您不了解這些類型,請提供一些小而具體的數據示例。 [B]數據庫是否應嵌入到應用程序中並僅由應用程序使用,還是該數據庫應接受來自其他應用程序/客戶端的連接?
六 答案:
#1
+10
Basil Bourque
2015-06-17 08:05:36 UTC
view on stackexchange narkive permalink

H2

在沒有關於您的需求的更具體信息的情況下,我的第一個想法是 H2數據庫引擎項目。 H2是一個純Java,開源,免費的關係數據庫,已經積極開發了多年。

“ 2”是指這是由其主要作者構建的第二個這樣的數據庫(Hypersonic SQL,後分叉為 HSQLDB)的事實。 ,托馬斯·穆勒,所以他知道他的東西。

雖然H2可以作為服務器運行,但它尤其擅長嵌入在應用程序內部,並且在需要時可以以相對較少的內存運行。

作為純Java,H2專為 JDBC訪問而構建。隨附於其自己的JDBC驅動程序。

主網站上有不錯的文檔,包括 QuickStart概述和 Tutorial

您將需要學習表,列,數據類型和SQL命令的基礎知識。您可以自學。從熟悉關係數據庫的人那裡獲得一些輔導將大大減少這種學習曲線。

H2與SQLite相似,但功能更全面。純粹的Java和可嵌入性使H2更適合您的需求,並且可能更容易上手。

在姐妹站點Stack Overflow上,我寫了一些Answers,提供了使用H2的完整Java示例應用程序的源代碼。像 this this this this this更多

Derby

Apache Derby項目與H2非常相似。由Oracle與Java SDK捆綁提供時,以前稱為 IBM Cloudscape,也稱為“ Java DB”。

Derby比H2複雜得多,包括針對性強。用作服務器。我懷疑H2可以更好地滿足您的需求。

文件

如果您所需要的只是相對簡單的數據,其數量足以存儲在內存中,請跳過數據庫。將數據以文本形式存儲在純文件中。

此類純文本文件的常用格式包括:

  • CSV,逗號分隔值。
  • TSV。用 Tab分隔。
  • ASCII分隔符,ASCII代碼#28-31。
    標記文件,組,記錄和單位/字段)。注意,雖然CSV聽起來很簡單,但各種程序員已經找到了將各種變化與變化融合在一起的方法。幾十年來,直到2005年 RFC 4180為止,沒人願意寫下規範。

    當需要此數據時,將其讀入內存,通過定義自己的類來實例化對象例如“人員”或“發票”,收集這些對象,然後搜索這些集合以找到所需的對象。

    儘管從概念上講很簡單,但仍有許多可能的障礙。數據庫引擎的主要目的之一就是為您解決此類問題。

    • 您需要確保在使用文件後關閉文件,儘管退出或崩潰時JVM應該會自動關閉任何文件。打開文件。
    • 您可能會考慮文件損壞。如果應用程序崩潰或在寫入文件期間被中斷怎麼辦?處理此問題的一種方法是編寫一個新文件,然後再刪除舊文件。
    • 如果您是多線程的,則需要防止並發問題。您不希望其他線程嘗試同時替換同一文件的數據。

    Apache Common CSV

    Apache Common CSV項目是一個相對較新的純Java免費庫,用於處理讀寫純文本文件的繁瑣工作。它處理所有提到的格式,而不僅僅是CSV(儘管它的名稱)。我使用過1.1版,發現它非常有用,強大且可靠。

#2
+6
Flimzy
2015-04-25 01:51:08 UTC
view on stackexchange narkive permalink

您的問題過於廣泛,無法以任何明確的方式回答。您根本不會告訴我們您要使用什麼類型的數據庫。您需要RDBMS嗎?鍵/值存儲?還有什麼嗎?

如果您想使用關係數據庫,那麼 SQLite是事實上的標準,並且具有Java支持(以及幾乎所有其他語言的支持)和平台在陽光下)。

謝謝,我將嘗試改善我的問題。我基本上是在尋找某種可以模擬帶有文本數據的“表”(例如Excel工作表)的東西。 SQLite可以,但是我正在尋找更簡單的方法。
@JonasCz: SQLite仍然滿足您聲明的所有要求:無需配置服務器,無需建立連接,等等。
#3
+4
Cristi Ursachi
2015-06-16 16:26:11 UTC
view on stackexchange narkive permalink

您可以查看 HeftyDB。這是一個快速的鍵值存儲,用Java編寫,並且是開源的。

#4
+4
dipu
2016-06-29 12:42:06 UTC
view on stackexchange narkive permalink

Xodus

根據您的要求,我認為 JetBrains Xodus是非常好的數據庫選擇。它具有三種類型的數據庫:鍵值存儲,實體存儲和用於文件和流的數據庫。

#1 :易於使用。如果您使用的是maven,則只需添加一個或兩個依賴項。或者,您也可以將 .jar 文件直接導入到項目中。

無需創建任何服務器。只需創建 Environment 的瞬間,就可以開始了。您可以為其指定文件夾名稱來存儲數據。

 最終環境env = Environments.newInstance(“ / Users / me / .myAppData”);  

#2 :您可以只存儲實體而不是管理表。它與關係表非常相似,但是更加容易。

 最終實體用戶= txn.newEntity(“ User”); user.setProperty(“ login”,loginName),請在此處進行了解。 ); user.setProperty(“ fullName”,fullName); user.setProperty(“ email”,email);最終字符串鹽= MessageDigestUtil.sha256(Double.valueOf(Math.random())。toString());用戶。 setProperty(“ salt”,salt); user.setProperty(“ password”,MessageDigestUtil.sha256(salt + password));  

#3 :比其他任何非關係數據庫都輕巧。參見他們的基準測試

#5
+1
Michael
2015-08-12 12:47:14 UTC
view on stackexchange narkive permalink

另一個選項是 MapDB。這也是用Java編寫的快速,開放源代碼鍵值存儲。

#6
+1
charles ross
2019-01-01 21:05:15 UTC
view on stackexchange narkive permalink

Stack論壇上高級別問題的悲劇! “軟件推薦”是一個不錯的地方,但訪問率不高。我在幾個版本堆溢出幾乎相同的問題中發現了一些更好的答案:

它具有指向概述文章和一些其他文章的鏈接。提到:

  • LevelDB
  • berkeley DB
  • jsondb.io


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...