Compartilhar via


Usar o tipo de dados JSON com o driver JDBC

Baixar o JDBC Driver

A partir da versão 13.2.0, o Microsoft JDBC Driver for SQL Server dá suporte ao tipo de dados JSON. Esse recurso permite que aplicativos Java leiam e escrevam em colunas do SQL Server do tipo json, permitindo interação perfeita com dados semiestruturados.

A seguir estão exemplos de maneiras de interagir com tipos de dados JSON usando o driver JDBC.

Preencher e recuperar dados JSON de uma tabela

Para trabalhar com dados JSON no SQL Server, comece criando uma tabela com uma coluna do tipo json:

CREATE TABLE sampleTable (data JSON);

Insira JSON com uma instrução:

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

Insira JSON com uma instrução e parâmetros preparados:

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

Leia os dados JSON da tabela:

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

Saída JSON de um procedimento armazenado

O exemplo a seguir mostra como retornar um parâmetro de saída json de um procedimento armazenado.

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

Recupere o JSON de saída registrando o parâmetro e executando o procedimento.

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

Parâmetros com valor de tabela (TVPs) com JSON

Este exemplo insere dados JSON com um 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();
}

Usar SQLServerBulkCopy da tabela de origem para a tabela de destino com JSON

SQLServerBulkCopy é usado para copiar dados de uma tabela de origem que contém colunas JSON em uma tabela de destino.

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

Usar cópia em massa com a coluna JSON do CSV

Copie e cole o seguinte texto em um arquivo CSV chamado json.csv:

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

Use a cópia em massa para inserir os dados CSV em uma tabela:

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

Limitações do JSON

Para obter limitações detalhadas, consulte limitações de tipo de dados JSON.