Partager via


Utiliser le type de données JSON avec le pilote JDBC

Télécharger le pilote JDBC

À compter de la version 13.2.0, Microsoft JDBC Driver pour SQL Server prend en charge le type de données JSON. Cette fonctionnalité permet aux applications Java de lire et d’écrire dans des colonnes SQL Server de type json, ce qui permet une interaction transparente avec des données semi-structurées.

Voici des exemples de façons d’interagir avec des types de données JSON à l’aide du pilote JDBC.

Remplir et récupérer des données JSON à partir d’une table

Pour utiliser des données JSON dans SQL Server, commencez par créer une table avec une colonne de type json :

CREATE TABLE sampleTable (data JSON);

Insérez un objet JSON avec une déclaration :

try (Statement stmt = connection.createStatement()) {
    stmt.execute("INSERT INTO sampleTable (data) VALUES ('{\"name\":\"John\",\"skills\":[\"Java\",\"SQL\"]}')");
}

Insérez JSON avec une instruction et des paramètres préparés :

String json = "{\"name\":\"John\",\"skills\":[\"Java\",\"SQL\"]}";
String insertSql = "INSERT INTO sampleTable (data) VALUES (?)";

try (PreparedStatement pstmt = connection.prepareStatement(insertSql)) {
    pstmt.setString(1, json);
    pstmt.executeUpdate();
}

Lisez les données JSON de la table :

String query = "SELECT data FROM sampleTable";

try (PreparedStatement stmt = connection.prepareStatement(query);
     ResultSet rs = stmt.executeQuery()) {
    while (rs.next()) {
        String json = rs.getString("data");
        System.out.println("JSON: " + json);
    }
}

Sortie JSON à partir d’une procédure stockée

L’exemple suivant montre comment retourner un paramètre de sortie json à partir d’une procédure stockée.

String sql = "CREATE PROCEDURE sampleProc @p0 JSON OUTPUT AS " +
             " SELECT TOP 1 @p0 = data FROM sampleTable";

Récupérez le JSON de sortie en inscrivant le paramètre et en exécutant la procédure.

try (CallableStatement callableStatement = connection.prepareCall("{call sampleProc (?) }")) {
    callableStatement.registerOutParameter(1, microsoft.sql.Types.JSON);
    callableStatement.execute();
    String outputJson = callableStatement.getString(1);
    System.out.println("Output JSON: " + outputJson);
}

Paramètres à valeur de table (TVPs) avec JSON

Cet exemple insère des données JSON avec un tvp.

String value = "{\"severity\":\"TRACE\",\"duration\":200,\"date\":\"2024-12-17T15:45:56\"}";

SQLServerDataTable tvp = new SQLServerDataTable();
tvp.addColumnMetadata("c1", microsoft.sql.Types.JSON);
tvp.addRow(value);

try (SQLServerPreparedStatement pstmt = (SQLServerPreparedStatement) connection.prepareStatement(
        "INSERT INTO sampleTable SELECT * FROM ?")) {
    pstmt.setStructured(1, "JsonTVP", tvp);
    pstmt.execute();
}

Utiliser SQLServerBulkCopy à partir d’une table source vers une table de destination avec JSON

SQLServerBulkCopy est utilisé pour copier des données d’une table source contenant des colonnes JSON dans une table de destination.

try (Statement stmt = con.createStatement()) {
    stmt.executeUpdate("CREATE TABLE destinationTable (data JSON)");

    SQLServerBulkCopy bulkCopy = new SQLServerBulkCopy(con);

    bulkCopy.setDestinationTableName("destinationTable");
    bulkCopy.writeToServer(stmt.executeQuery("SELECT * FROM sourceTable"));
}

Utiliser la copie en bloc avec une colonne JSON à partir de CSV

Copiez et collez le texte suivant dans un fichier CSV nommé json.csv:

c1,c2,c3
true,sample,"{""field"":""value""}"

Utilisez la copie en bloc pour insérer les données CSV dans une table :

try (Statement stmt = con.createStatement();
     SQLServerBulkCopy bulkCopy = new SQLServerBulkCopy(con);
     SQLServerBulkCSVFileRecord fileRecord = new SQLServerBulkCSVFileRecord("json.csv", null, ",", true)) {

    stmt.executeUpdate("CREATE TABLE sampleTable (c1 JSON)");

    fileRecord.addColumnMetadata(3, "c3", microsoft.sql.Types.JSON);

    fileRecord.setEscapeColumnDelimitersCSV(true);
    bulkCopy.setDestinationTableName("sampleTable");
    bulkCopy.writeToServer(fileRecord);
}

Limitations de JSON

Pour obtenir des limitations détaillées, consultez les limitations du type de données JSON.