Ich habe untersucht, wie man die für PostgreSQL typische Datenseite von Python verwendet, also werde ich sie aufzeichnen.
Hier geht es um den Typ jsonb.
Dieser Inhalt ist ein Auszug aus dem Inhalt der 51. Nagaoka IT Developer Study Group. Die Folie ist hier.
Die Python-Version ist hier.
Bei Verwendung von PostgreSQL aus einer Anwendung Verwendung über die JDBC-API. Die JDBC-API ist eine Spezifikation mit nur einer Schnittstelle, und es gibt einen JDBC-Treiber für PostgreSQL als Implementierung. Dies ist der offizielle PostgreSQL JDBC-Treiber.
Es gibt verschiedene DB-Zugriffsbibliotheken über JDBC. Dieses Mal wird jedoch ein Beispiel für die Verwendung von JPA als Java-Standardpersistenzspezifikation betrachtet. JPA ist auch eine Spezifikation und eine Schnittstelle wird vorbereitet. Eine der Implementierungen ist EclipseLink.
https://github.com/civic/postgresql-java-json
id | info |
---|---|
1 | {"a": 100, "b": "Hello"} |
2 | {"a": 200, "b": "World"} |
CREATE TABLE json_test(
id integer,
info jsonb
)
SELECT
resultSet.getString("info");
// {"a": 100, "b": "Hello"}
Sie können die JSON-Zeichenfolge abrufen, indem Sie die Spalte json und getString abrufen.
INSERT (1)
import org.postgresql.util.PGobject;
PGobject pgobj =new PGobject();
pgobj.setValue(json_string); //json string
pgobj.setType("jsonb");
preparedStatement.setObject(1, pgobj);
In der JDBC-API gibt es keinen JSON-Typ. Es wird normalerweise über die von JDBC bereitgestellte Schnittstelle verwendet, es bleibt jedoch keine andere Wahl, als die Funktionen des von PostgreSQL bereitgestellten Treibers zu verwenden. Sollte in begrenzten Bereichen wie gemeinsamen Bibliotheken verwendet werden.
INSERT (2)
PreparedStatement ps =conn.prepareStatement(
"INSERT INTO json_test(info) VALUES(jsonb(?))"
);
ps.setString(1, json_string); //json string
Ein Muster, das Parameter als JSON-Zeichenfolge festlegt und sie in einer SQL-Anweisung in jsonb umwandelt. Da es sich um setString als Zeichenfolge handelt, ist dies nur mit der Standard-API möglich.
SELECT / INSERT
@Entity
@Table(name = "json_test")
public class JsonTest implements Serializable {
// ...Unterlassung...
@Column(name = "info")
@Convert(converter = JsonbConverter.class)
private String info;
...
JPA, eine OR-Mapper-ähnliche Persistenzfunktion. Ein Mechanismus namens Konverter ist in den JPA-Spezifikationen vorbereitet. Wenn Sie einen Konverter erstellen und eine gegenseitige Konvertierung vom Java-Typ <=> SQL-Typ definieren, können Sie diese für die Spaltendefinition mit Anmerkungen verwenden.
/**
@Converter
public class JsonbConverter implements AttributeConverter<String, PGobject>{
/**
* String-Umstellung auf Pgobject
* @param x
* @return
*/
@Override
public PGobject convertToDatabaseColumn(String x) {
PGobject pgobject =new PGobject();
pgobject.setType("jsonb");
try {
pgobject.setValue(x);
} catch (SQLException ex) {
Logger.getLogger(JsonbConverter.class.getName()).log(Level.SEVERE, null, ex);
throw new RuntimeException(ex);
}
return pgobject;
}
@Override
/**
* Pgobject-In String konvertieren
* @param y
* @return
*/
public String convertToEntityAttribute(PGobject y) {
return y.getValue();
}
}
Recommended Posts