Fråga:
Ett enkelt Java-databasbibliotek?
JonasCz - Reinstate Monica
2015-04-25 00:22:26 UTC
view on stackexchange narkive permalink

Jag letar efter ett bibliotek för att hantera en "databas" i min Java-applikation. Jag vill ha något enkelt och lätt att använda. Närmare bestämt letar jag efter något som:

  • Är lätt att börja använda. Jag skulle vilja ha en enda JAR att lägga till i mitt projekt, och databasen är en enda Java -fil . Jag vill undvika att behöva ställa in en lokal server eller anslutningar och liknande. Hela Java utan inhemska beroenden skulle vara trevligt.

  • Är enkelt att använda. Jag behöver bara lagra ett bord med några strängar och göra enkla frågor, t.ex. för allt i en specifik rad.

  • Är lätt.

Jag letar i grund och botten efter något för att efterlikna en " tabell ", som ett Excel-ark, med textdata.

Några bibliotek som detta?

Min första fråga här, så var vänlig :-)
Som svaret från Flimzy säger, måste du ge mer information. [A] Vilken typ av databas: platt-fil, relation, nyckel-värde, dokument, objekt? Om du inte förstår typerna, presentera små men specifika exempel på data. [B] Är databasen avsedd att vara inbäddad i appen och endast användas av appen, eller ska databasen acceptera anslutningar från andra appar / klienter?
Sex svar:
Basil Bourque
2015-06-17 08:05:36 UTC
view on stackexchange narkive permalink

H2

Utan mer specifik information om dina behov är min första tanke projektet H2 Database Engine. H2 är en ren Java, öppen källkod, kostnadsfri, relationsdatabas som har utvecklats aktivt i flera år.

"2" hänvisar till det faktum att detta är andra en sådan databas (hypersonisk SQL, senare gaffelad som HSQLDB) byggd av dess huvudförfattare , Thomas Mueller, så han kan sina grejer.

Även om H2 kan köras som server, är det särskilt skickligt att vara inbäddat i en app och kan köras med relativt lite minne om det behövs.

Eftersom det är ren Java är H2 byggd speciellt för JDBC -åtkomst. Levereras med sin egen JDBC-drivrutin.

Huvudsidan har bra dokumentation inklusive en QuickStart -översikt och en Tutorial.

Du måste lära dig grunderna i tabeller, kolumner, datatyper och SQL-kommandon. Du kan lära dig själv. Att få lite handledning från någon som är bekant med relationsdatabaser kommer att dramatiskt minska den inlärningskurvan.

H2 liknar SQLite men mer fullt utrustad. Att vara ren Java och inbäddad gör att H2 passar bättre för dina behov och förmodligen lättare att komma igång.

Över på systersidan, Stack Overflow, har jag skrivit några svar som ger källkod för en komplett Java-exempelapp med H2. Gilla detta, detta, detta, detta, det här och mer.

Derby

Apache Derby -projektet liknar H2. Tidigare känd som IBM Cloudscape och även känd som "Java DB" när den tillhandahålls av Oracle i ett paket med Java SDK.

Derby är mer komplicerat än H2, inklusive att vara riktad används som server. Jag misstänker att H2 passar bättre för dina behov.

Filer

Om allt du behöver är relativt enkel data i mängder som är tillräckligt små för att förvaras i minnet, hoppa över databasen. Lagra dina data som text i vanliga filer.

Vanliga format för sådana vanliga textfiler inkluderar:

  • CSV, kommaseparerade värden.
  • TSV. Avgränsas av -fliken.
  • ASCII-separatorer, ASCII-koder # 28-31.
    Markerar fil, grupp, post och enhet / fält ). Mindre vanligt att Tab men mer förnuftigt och flexibelt)

Observera att medan CSV låter enkelt, har olika programmerare hittat sätt att blanda saker med variationer. I årtionden har ingen ens brytt sig om att skriva ner en specifikation förrän RFC 4180 2005.

När du behöver dessa data, läs den i minnet, starta objekt genom att definiera egna klasser som "Person" eller "Faktura", samla dessa objekt och sök i dessa samlingar för att hitta önskade objekt.

Även om det är begreppsmässigt enkelt finns det många möjliga snafus. Ett av huvudsyftena med en databasmotor är att hantera sådana problem åt dig.

  • Du måste vara säker på att stänga filer efter att du har använt dem, även om JVM automatiskt bör stänga alla öppna filer.
  • Du kan överväga filkorruption. Vad händer om appen kraschar eller på annat sätt avbryts mitt i att skriva en fil? Ett sätt att hantera detta är att skriva en ny fil och bara ta bort den gamla efter.
  • Om du har flera trådar måste du skydda dig mot problem med samtidigheten. Du vill inte ha olika trådar som försöker ersätta data för samma fil samtidigt.

Apache Common CSV

Apache Commons CSV projekt är ett relativt nytt rent Java-kostnadsfritt bibliotek för att hantera sysslorna med att läsa och skriva vanliga textfiler. Den hanterar alla nämnda format, inte bara CSV (trots sitt namn). Jag har använt version 1.1 och tyckte att den var ganska användbar, robust och pålitlig.

Flimzy
2015-04-25 01:51:08 UTC
view on stackexchange narkive permalink

Din fråga är för bred för att svara på något som ett definitivt sätt. Du berättar inte alls för vilken typ av databas du vill använda. Behöver du en RDBMS? Nyckel / värdebutik? Något annat?

Om en relationsdatabas är vad du tänker på är SQLite de facto-standarden och har Java-stöd (samt stöd för praktiskt taget alla andra språk och plattform under solen).

Tack, jag kommer att försöka förbättra min fråga. Jag letar i grund och botten efter något för att efterlikna en slags "tabell", som ett Excel-ark, med textdata. SQLite skulle göra, men jag letar efter något enklare.
@JonasCz: SQLite uppfyller fortfarande alla dina angivna krav: Det finns inga servrar att konfigurera, inga anslutningar att göra etc.
Cristi Ursachi
2015-06-16 16:26:11 UTC
view on stackexchange narkive permalink

Du kan ta en titt på HeftyDB. Det är en snabb nyckel-värdebutik, skriven i Java och den är öppen källkod.

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

Xodus

Baserat på dina krav tycker jag JetBrains Xodus är ett mycket bra val av databas. Den har tre typer av databaser - en nyckel-värdelagring, en enhets-butik och en databas för filer och strömmar.

# 1 : Det är väldigt enkelt att börja använda. Om du använder maven lägger du bara till ett eller två beroenden. Eller så kan du också importera .jar -filer direkt till ditt projekt.

Du behöver inte skapa någon server. Skapa bara en omedelbar Miljö så är du redo att gå. Och du kan ge det ditt mappnamn för att lagra data.

  final Environment env = Environments.newInstance ("/ Users / me / .myAppData");  

# 2 : Istället för att hantera tabeller kan du bara lagra enheter. Det liknar mycket relationstabeller, men mycket enklare. Ta en titt här för att veta hur du gör det.

  final Entity user = txn.newEntity ("User"); user.setProperty ("login", login name) ); user.setProperty ("fullName", fullName); user.setProperty ("email", email); final String salt = MessageDigestUtil.sha256 (Double.valueOf (Math.random ()). toString ()); användare. setProperty ("salt", salt); user.setProperty ("lösenord", MessageDigestUtil.sha256 (salt + lösenord)); 

# 3 : Mer lätt än någon annan icke-relationsdatabas som är tillgänglig. Se deras benchmarktest.

Michael
2015-08-12 12:47:14 UTC
view on stackexchange narkive permalink

Ett annat alternativ är MapDB. Det är också en snabb, öppen källkod nyckel-värde butik skriven i Java.

charles ross
2019-01-01 21:05:15 UTC
view on stackexchange narkive permalink

Tragedin med frågor på hög nivå på Stack-forum! "Programvarurekommendationer" är en bra plats men den är inte välbesökt. Jag hittade i Stack Overflow nästan samma fråga i en få versioner med några fler bra svar:

den har länkar till översiktsartiklar och några ytterligare nämner:

  • LevelDB
  • berkeley DB
  • jsondb.io


Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...