# Json in sql speichern und lesen



## Frekell (21. Sep 2016)

Hallo,
ich bräuchte hilfe dabei wie ich ein json Object in sql speichern kann und wie ich dieses dann wieder vernünftig auslesen kann

Folgendes habe ich gemacht.:

```
TestClass testObject = new TestClass();
List<String> testlist = new ArrayList<String>();
testObject.setList(testlist);
String test = new Gson().toJson(testObject);
//nun würde ich diesen String per query in meine sql Datenbank schreiben nur weiß ich dann 
//nicht wie ich diese Liste und die darin stehenden einträge dann wieder auslesen kann. (Die liste 
//besteht aus 3 einträgen).
```

vielen Dank für eure Hilfe

MfG

Frekell


----------



## mrBrown (21. Sep 2016)

Naja, auslesen mit Select und mit fromJson umwandeln...

Aber warum willst du das als JSON in der Datenbank speichern, speicher es doch direkt?


----------



## Frekell (21. Sep 2016)

mrBrown hat gesagt.:


> Naja, auslesen mit Select und mit fromJson umwandeln...
> 
> Aber warum willst du das als JSON in der Datenbank speichern, speicher es doch direkt?



Ja stimmt du hast recht , habe ich nach dem Posten dann auch gemerkt hatte wohl ne kleine blockade


----------



## Thallius (21. Sep 2016)

Ich finde es befremdlich JSON in einer Datenbank zu speichern. Welchen Sinn kann das haben? Damit verlierst Du alle Vorteile die eine DB eigentlich hat. Dann kannst du es auch genauso gut in einer .txt speichern.

Gruß

Claus


----------



## Dukel (21. Sep 2016)

Es kann schon einen Vorteil haben, wenn man z.B. unterschiedliche Daten speichern möchte.
D.h. bestimmte Felder sind fest (Produkt, Preis) und andere flexibel (Eigenschaften).


----------



## Thallius (21. Sep 2016)

Kannst du das mal bitte anhand eine genauen Beispiels erklären? Das verstehe ich nämlich nicht.


----------



## Dukel (21. Sep 2016)

Du hast z.B. eine Produktliste mit unterschiedlichen Produkten.
Buch, Fahrrad, PC, ...
Dabei gibt es gleiche Daten wie Name, Preis,... und unterschiedliche Eigenschaften.

Name|Preis|Eigenschaften
Buch|10€|{Titel="Herr der Ringe", Seiten=500,Author=Tolkien}
Fahrrad|500€|{Reifen=26",Farbe=Blau,Gänge=12}
PC|1500€|{CPU=i5,Ghz=2.2,Cores=4,Ram=16GB,SSD=512GB,...}

Wenn du das klassisch machen willst brauchst du entweder für jede Kategorie eine eigene Tabelle oder eine Tabelle mit den Eigenschaften. Mit JSON bist du sehr flexibel und bist nicht auf die vorhandenen Spalten eingeschränkt.


----------



## stg (21. Sep 2016)

Also mit zwei Tabellen kann man das auch problemlos abbilden, ohne in irgendeiner Weise eingeschränkt zu sein.


----------



## Dukel (21. Sep 2016)

Das habe ich ja geschrieben, dass es mit einer Eigenschaften Tabelle auch machbar ist.
Der Nachteil wird die Performance beim Join sein.

Mit aktuellen Datenbanken ist der Unterschied zwischen einer Json und Nicht-Json Spalte nicht nicht mehr so groß. Man kann die Json Daten indizieren, einfach schreiben und lesen.


----------



## Thallius (21. Sep 2016)

Nein ,die Performance beim join ist wesentlich größer. Was machst du wenn du nach allen Büchern mit 500 Seiten suchen willst? Alle Eigenschaften Spalten mit einem super langsamen LIKE durchsuchen. Schlimmer gehts nicht. Bei einer eigenschaftentabelle geht das mit join Sau schnell.


----------



## Flown (21. Sep 2016)

Dukel hat gesagt.:


> Mit aktuellen Datenbanken ist der Unterschied zwischen einer Json und Nicht-Json Spalte nicht nicht mehr so groß. Man kann die Json Daten indizieren, einfach schreiben und lesen.


Interessant... und der Beweis für diese Aussage ist wo?


----------

