Udostępnij przez


Używanie typu danych JSON ze sterownikiem JDBC

pobierz sterownik JDBC

Począwszy od wersji 13.2.0, sterownik JDBC firmy Microsoft dla programu SQL Server obsługuje typ danych JSON. Ta funkcja umożliwia aplikacjom Java odczytywanie i zapisywanie w kolumnach typu json programu SQL Server, co umożliwia bezproblemową interakcję z częściowo ustrukturyzowanymi danymi.

Poniżej przedstawiono przykłady sposobów interakcji z typami danych JSON przy użyciu sterownika JDBC.

Wypełnianie i pobieranie danych JSON z tabeli

Aby pracować z danymi JSON w programie SQL Server, zacznij od utworzenia tabeli z kolumną typu json:

CREATE TABLE sampleTable (data JSON);

Wstaw kod JSON z instrukcją:

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

Wstaw kod JSON z przygotowaną instrukcją i parametrami:

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();
}

Odczytywanie danych JSON z tabeli:

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);
    }
}

Wyjściowy kod JSON z procedury składowanej

W poniższym przykładzie pokazano, jak zwrócić parametr wyjściowy json z procedury składowanej.

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

Pobierz wyjściowy kod JSON, rejestrując parametr i wykonując procedurę.

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);
}

Parametry wartości tabeli (TVP) z formatem JSON

W tym przykładzie dane JSON są wstawiane przy użyciu programu 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();
}

Używanie narzędzia SQLServerBulkCopy z tabeli źródłowej do tabeli docelowej z kodem JSON

Narzędzie SQLServerBulkCopy służy do kopiowania danych z tabeli źródłowej zawierającej kolumny JSON do tabeli docelowej.

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"));
}

Używanie kopiowania zbiorczego z kolumną JSON z pliku CSV

Skopiuj i wklej następujący tekst do pliku CSV o nazwie json.csv:

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

Użyj kopiowania zbiorczego, aby wstawić dane CSV do tabeli:

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);
}

Ograniczenia kodu JSON

Aby uzyskać szczegółowe ograniczenia, zobacz Ograniczenia typu danych JSON.