MySQL JSON-Datei auf Datenbank anwenden

mierl

Mitglied
Hallo,
ich arbeite zum ersten mal mit Datenbanken und habe mir hierfür dies tutorial angesehen: https://netbeans.org/kb/docs/java/hibernate-java-se.html
Nun arbeitet man dort mit einer Beispiel Datenbank namens sakila.
Ich möchte aber mit einer eigenen Datenbank arbeiten, die eine JSON-Datei ist. Nur weiß ich jetzt nicht wie ich das bewerkstellige, da es im tutorial nicht erläutert wird wie die herangehensweise mit anderen Datenbanken aussieht.
ich hoffe jemand kann mir helfen
 

Tobse

Top Contributor
Eine JSON-Datei ist keine Datenbank.

Du kannst Daten von/nach JSON serialisieren, aber das wars dann auch schon. Ich kann mir aber durchaus vorstellen, dass es JDBC-Treiber gibt, welche letztendlich in eine JSON-Datei schreiben. Du wärst aber mit SQLite besser beholfen.
 

mierl

Mitglied
Ich habe jetzt nachgelesen, dass man eine JSON Datei zum Beispiel mithilfe JSON.simple deserialisieren kann. Wie kann ich nun diese Daten auf meine Datenbank laden?
 

mierl

Mitglied
Es tut mir leid wenn ich was verwechsele und man mich nicht sofort versteht, ich lerne java noch und hatte mit Datenbanken zuvor noch nichts am hut.
Ich möchte wissen wie ich die Daten aus der JSON-Datei in eine Datenbank bekomme.
 

Tobse

Top Contributor
ich möchte eine datenbank einrichten und diese mit daten aus einer JSON-Datei befüllen.
Okey, das ist kein Problem. Das ist aber was anderes wie eine "JSON-Datenbank".

Hier erstmal Lesestoff:

Datenbanken im allgemeinen: http://www.datenbanken-verstehen.de/datenbanken/datenbank-grundlagen/datenbank/
Relationale Datenbanken: http://www.datenbanken-verstehen.de...datenbankmodell/relationales-datenbankmodell/
Graph-Datenbanken (für eine 1:1 übernahme aus JSON gut geeignet): https://de.wikipedia.org/wiki/Graphdatenbank

Jetzt zu deinem Anliegen:

Ja, du kannst JSON mit Java auslesen. Da gibt es unzählige Libraries für; wähle, welche dir am besten gefällt. Eine offizielle Auflistung gibt es auf http://json.org

Wenn du die JSON-Daten dann vorliegen hast, kannst du entweder:

1. die Daten in Beans/Entities schieben und dann mit O/RM Frameworks wie Hibernate in die Datenbank schreiben
2. per SQL / Cypher Query direkt in die DB schreiben

[EDIT]
Noch mehr Lesestoff für die Anbindung an die DB (sofern das in dem Arktiel auf der NetBeans-Seite nicht schon erklärt wurde):
https://docs.oracle.com/javase/tutorial/jdbc/basics/

SQL Tutorial beim W3C: http://www.w3schools.com/sql/
Einführung in die Query-Language für Graph-Datenbanken, da ist aber die Syntax von DB zu DB teils sehr unterschiedlich: http://neo4j.com/developer/cypher-query-language/
[/EDIT]
 

mierl

Mitglied
also ich habe jetzt eine Entitätsklasse mit Getter und Settern, wie schaut jetzt die schnittstelle zur JSON-Datei aus? im Netbeans-tutorial seh ich die schnittstelle zur sakila datenbank auch nicht
 

Tobse

Top Contributor
Du erstellst dir eine Klasse, die aus deinem JSON Entities ausliest (Beispiel mit json-simple)

Java:
public class JSONEntityReader implements Itarator<MyEntity> {
    public JSONEntityReader(JSONObject jsonRoot) {
        // ...
    }

    public boolean hasNext() {
        // ...
    }

    public MyEntity next() {
        MyEntity o = new MyEntity();
        o.setFoo(jsonObject.getString("foo"));
        // ...
        return o;
    }
}

Und den benutzt du dann, um die Entities in die Datenbank zu schreiben. Mit Hibernate sollte das dann kein Problem mehr sein, ohne könnte das so aussehen:

Java:
public class EntityPersister {
    public void persist(Iterator<MyEntity> it, Connection conn) throws IOException {
        PerparedStatement stmt = conn.prepare("INSERT INTO ...");
        // ...
        stmt.bindParam(1, it.getFoo());
        //...
        stmt.execute();
    }
}

// ...
JSONObject jsonData = (JSONObject) JSONValue.parse(...);
new EntityPersister().persist(new JSONEntityReader(jsonData));
 

mierl

Mitglied
ok ich glaube ich habs noch nicht ganz verstanden,
ich habe also meine Klasse Person mit den Attributen String vorname und String nachname und dazu die getter und setter.
Code:
public class Person {
   
    private String firstName;
    private String lastName;
   
    public Person(String firstName, String lastName){
       
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
   
}

nun schreibe ich die Klasse die aus der JSON Datei die Entities herausliest

Code:
import java.util.Iterator;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

public class JSONEntityReader implements Iterator <Person> {
       
    private int index;
   
    public JSONEntityReaderA(JSONObject jsonObject){
        int index = 0;       
    }
   
    @Override
    public boolean hasNext() {
        return index < länger der JSON-Datei;
    }
   
    public Author next() {
        Author o = new Author();
        o.setFoo(jsonObject.getString("foo"));
        // ...
        return o;
    }
}

ich habe nun recherchiert wie ich aus meine JSON-Datei die Vor- und Nachnamen auslesen kann:

Code:
        JSONArray person = (JSONArray) jsonObject.get("person");
        Iterator i1 = authors.iterator();
        while (i1.hasNext()) {
            JSONObject slide = (JSONObject) i1.next();
            String fName = (String) slide.get("first_name");
        }

        Iterator i2 = authors.iterator();
        while (i2.hasNext()) {
            JSONObject slide = (JSONObject) i2.next();
            String lName = (String) slide.get("last_name");
        }

Meine frage ist nun wo ich den Code für das auslesen einfüge?
 

Tobse

Top Contributor
Wie ich sehe hast du schon einen Iterator für die Personen in der JSON-Datei (i1 und i2). Die kannst du doch bequem mit deinem Iterator EntityReader verknüpfen:

Java:
public EntityReader(JSONObject json) {
    this.authors = ((JSONArray) json.get("person")).iterator();
}

public boolean hasNext() { return this.authors.hasNext() }
public Author next() {
    if (this.hasNext()) {
        Author a = new Author();
        JSONObject authorNode = (JSONObject) authors.next();
        a.setFirstName((String) authorNode.get("first_name"));
        a.setLastName((String) authorNode.get("last_name"));
        return a;
    } else {
        return null;
    }
}
 

mierl

Mitglied
ach ich habe mich da nur verschrieben eigentlich sollte das heißen:
Code:
JSONArray authors = (JSONArray) jsonObject.get("authors");
        Iterator i1 = authors.iterator();
        while (i1.hasNext()) {
            JSONObject slide = (JSONObject) i1.next();
            String fName = (String) slide.get("first_name");
        }

        Iterator i2 = authors.iterator();
        while (i2.hasNext()) {
            JSONObject slide = (JSONObject) i2.next();
            String lName = (String) slide.get("last_name");
        }

wo füge ich das ein? in die Personenklasse oder in den reader?
 

Tobse

Top Contributor
So in der form macht das doch keinen Sinn - du erstellst zwei iteratoren um über die selben Objekte zu iterieren. Das eine mal liest du den Vornamen, das andere mal den Nachnamen. Schau dir meinen Code nochmal an und versuch drauf zu kommen, was ich gemeint habe :)
 

Tobse

Top Contributor
Du schreibst ja in deinem Code dashier:

Java:
JSONArray person = (JSONArray) jsonObject.get("person");
Iterator i1 = authors.iterator();

Ich schließe daraus, dass dein JSON so aussieht:

JSON:
{
    "person": [
        {
            "first_name": "Vorname",
            "last_name": "Nachname"
        },
        {
            "first_name": "Vorname",
            "last_name": "Nachname"
        }
    ]
}

Wenn du jetzt deinem EntityReader das "person"-Array oder das Top-Level Objekt übergibt, kannst du im Konstruktor des Readers ja direkt den Iterator für das Array bekommen:

Java:
class EntityReader implements Iterator<Person> {
    private Iterator<JSONValue> authors;
    public EntityReader(JSONObject personObj) {
        authors = ((JSONArray) personObj.get("person")).iterator();
    }
}

Und mithilfe des authors Iterators kannst du dann den EntityReader implementieren.
 

mierl

Mitglied
ok ich merk schon ich muss mir noch eine menge an wissen aneignen,
ich schau es mir morgen nochmal genauer an.
vielen dank für deine hilfe und einen schönen restabend wünsche ich dir :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Thallius Ist JSON als column jetzt der neue Standard oder hab ich was verpasst? Datenbankprogrammierung 34
X MySQL Json String in MySQL einfügen. Datenbankprogrammierung 20
M Frage zu JSON Datenbankprogrammierung 16
H JSON Array abfrage beschleunigen Datenbankprogrammierung 2
M Datenbank Zugraff nach Umwandlung in .jar-Datei nicht mehr möglich Datenbankprogrammierung 4
D H2 schema-Datei ausführen Datenbankprogrammierung 22
L Oracle SQL Inserts via Client vs SQL Datei via ScriptRunner Datenbankprogrammierung 6
J JAR-Datei und Datenbank Datenbankprogrammierung 8
S Verbindung von einer Excel Datei zu Java Datenbankprogrammierung 2
J Jar-Datei stellt keine Datenbankverbindung her Datenbankprogrammierung 3
L CSV Datei mit DB Inhalt vergleichen Datenbankprogrammierung 20
F Auslesen einer .dbf-Datei, Zuordnung Index Datenbankprogrammierung 0
T Datei auf Desktop ausgeben Datenbankprogrammierung 22
W Daten aus einer Datei von einem VServer auslesen Datenbankprogrammierung 1
M HSQLDB .Script-Datei entfernen oder sperren Datenbankprogrammierung 18
V SQLite Performance: 1 Datei mit einzelnen Einträgen gegenüber SQLite Datenbankprogrammierung 7
M Verbindung von Java Programm zur Acccess Datenbank (mdb-Datei) Datenbankprogrammierung 0
J SQL Datei einlesen/beschreiben Datenbankprogrammierung 0
F JPA persistence.xml mit EXTERNER Config Datei Datenbankprogrammierung 0
C VDF Datei als Datenbank genutzt!!! Datenbankprogrammierung 5
L SQL2SMO JAR-Datei zum Laufen bringen Datenbankprogrammierung 0
Androbin [Serializing] Mehrere Objekte in einer einzigen Datei speichern Datenbankprogrammierung 1
P Derby/JavaDB Csv Datei für dieses Musterprogramm Datenbankprogrammierung 12
D [xBaseJ] Datei kann nicht geöffnet werden Datenbankprogrammierung 2
L Werte in Datei speichern Datenbankprogrammierung 16
D Datenbank oder XML Datei Datenbankprogrammierung 3
M HSQLDB oder DERBY - warum SCRIPT Datei? Datenbankprogrammierung 0
S SQL-Abfrage, Filewriter .txt Datei Datenbankprogrammierung 2
T 3 GB Große CSV Datei einlesen und in SQL-DB schreiben Datenbankprogrammierung 12
T Datei import und Datumsformat Datenbankprogrammierung 4
D Derby Datenbank bei Export zu JAR-Datei nicht möglich Datenbankprogrammierung 8
K SQLite CSV-Datei einlesen in eine Datenbank Datenbankprogrammierung 7
E csv datei in JTable einlesen Datenbankprogrammierung 3
E Datei Zippen und an DB schicken Datenbankprogrammierung 7
N Oracle txt. Datei auslesen-> verändern-> einlesen Datenbankprogrammierung 7
I Zugriff auf Datenbank nach Erstellen einer Executable Jar Datei verweigert Datenbankprogrammierung 10
D MySQl Treiber in .jar Datei einbinden, Bukkit Datenbankprogrammierung 2
M Datenbank-Datei Datenbankprogrammierung 10
bluerob MimeMessage .getFrom()[0]; liest eml-Datei nicht Datenbankprogrammierung 7
achillesat ausgelesene Datei in Datenbank schreiben Datenbankprogrammierung 9
O MySQL sql Datei einzelner Tabellen erzeugen (über Java Programm) Datenbankprogrammierung 6
F Große Datei in MySQL importieren Datenbankprogrammierung 10
H Derby SQL-Abfragen in Datei abspeichern Datenbankprogrammierung 2
S passwortgeschützte Excel-Datei einlesen Datenbankprogrammierung 3
S Schnellste Methode Datei aus Datenbank herstellen Datenbankprogrammierung 7
C XLS Datei aus Datenbank erstellen Datenbankprogrammierung 14
H Datenbank in Datei speichern / laden Datenbankprogrammierung 8
M FindBugs und PreparedStatement aus einer Datei lesen Datenbankprogrammierung 11
H CSV Datei in MSSQL DB oder doch SQL Script Datenbankprogrammierung 11
N Problem mit dem Importieren der csv- u. txt-Datei Datenbankprogrammierung 3
Dragonfire Daten aus jsp Datei in datenbank speichern Datenbankprogrammierung 15
M Tabelle in Access Datei mit JDBC generieren Datenbankprogrammierung 3
N csv datei erstellen Datenbankprogrammierung 2
S BLOB in Datei speichern Datenbankprogrammierung 8
S projektplanung mit csv datei Datenbankprogrammierung 2
M Gelöst: JavaDB - Derby Inhalt in Jar Datei speichern Datenbankprogrammierung 5
K jar Datei startet nicht aufgrund Firebird(?) Datenbankprogrammierung 3
D Access Datenbank in .jar-Datei Datenbankprogrammierung 51
H Wie kann ich eine Datenbank Connection aus XML-Datei lesen! Datenbankprogrammierung 2
M H2 DAtenbank in .sql datei schreiben/abfragen ? Datenbankprogrammierung 3
A Auslesen von Werten aus der DB in eine csv-Datei Datenbankprogrammierung 4
T Wie kann ich Blobs (Bilder) in einer Datei speichern? Datenbankprogrammierung 2
A Auslesen aus einer csv-Datei Datenbankprogrammierung 2
A Einlesen einer csv-Datei in eine H2-Datenbank Datenbankprogrammierung 3
A Probleme beim Schreiben in eine CSV-Datei aus einer H2-DB Datenbankprogrammierung 2
G Import einer csv-Datei in eine H2-Database Datenbankprogrammierung 12
N csv datei in PostgreSQL datenbank einlesen Datenbankprogrammierung 1
M Mit Java .txt-Datei in eine Datenbank einlesen lassen Datenbankprogrammierung 33
ARadauer datenbank in datei sichern Datenbankprogrammierung 4
B HSQLDB und die log-Datei Datenbankprogrammierung 10
S [Hibernate] Map in Map - Wie sieht Mapping Datei aus? Datenbankprogrammierung 10
F Probleme mit Jar Datei Datenbankprogrammierung 3
T Datei (Blob) mit verknüpfter Software öffnen? Datenbankprogrammierung 4
M Problem: Große Datei in MySQL DB importieren. Datenbankprogrammierung 12
P ODBC verbindung Java soll auf access mdb datei zugreifen Datenbankprogrammierung 2
S SQLite oder RDBMS als Datei(nicht Client/Server) Datenbankprogrammierung 5
G .jar - Datei erzeugen (Was beachten?) Datenbankprogrammierung 2
R Mit JAR-Datei ist MySQL-Treiber nicht auffindbar Datenbankprogrammierung 10
Y Problem mit Ablage einer Datei in einer Datenbank als BLOB Datenbankprogrammierung 6
Baerdoc Empfehlungen zur Auswahl Datenbank Datenbankprogrammierung 6
torresbig MySQL hibernate - could not resolve entity class ... (Datenbank Anfänger) Datenbankprogrammierung 19
M Meine Datenbank lässt sich mit meiner Methode nicht ändern Datenbankprogrammierung 1
I SaaS Applikation: pro Kunde eine Datenbank / Schema oder eine DB für alle Kunden? Datenbankprogrammierung 76
T SQL-Statement Datenbank nach SQL Statement schließen? Datenbankprogrammierung 7
Auf MySql Datenbank zugreifen funktioniert nicht Datenbankprogrammierung 8
MongoDB-Datenbank in Androidstudio einbinden Datenbankprogrammierung 1
thor_norsk Datenbank: Apache Derby Datenbankprogrammierung 6
B SQlite Datenbank, trotz Statements wurden nicht alle Zeilen erzeugt? Datenbankprogrammierung 35
M Datenbank mit REST API Datenbankprogrammierung 66
M Entfernte Datenbank Datenbankprogrammierung 11
T Datenbank: Tabelle erstellen bei Web-Applikation Datenbankprogrammierung 4
D SQLite Datenbank in Android Studio (Java) durchsuchen Datenbankprogrammierung 3
M MySQL Datenbank in Array Datenbankprogrammierung 2
S Den letzten Eintrag aus Datenbank ziehen (Oracle SQL Dev.) Datenbankprogrammierung 14
N Datenbank abfragen nach bestimmten Wort Datenbankprogrammierung 7
Beginner22 Zugriff auf Datenbank aus Java über mariadb Datenbankprogrammierung 3
ma095 value NULL- Datenbank Postgresql Spring - intellij community Datenbankprogrammierung 0
raptorrs Plötzlich keine Verbindung zur Datenbank mehr möglich Datenbankprogrammierung 14
Davee SQLite SQLite Datenbank lässt sich nicht auf anderen PCs öffnen Datenbankprogrammierung 8
P Datenbank Tool - besser als oracle SQL Developer gesucht mit effizinte Verbindungsverwaltung Datenbankprogrammierung 2

Ähnliche Java Themen


Oben