Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A partir da versão 13.2.0, o Microsoft JDBC Driver para SQL Server oferece suporte ao tipo de dados JSON. Esse recurso permite que aplicativos Java leiam e gravem colunas do SQL Server do tipo json, permitindo uma 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 preparada e parâmetros:
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);
}
}
JSON de saída 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();
}
Use 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 para 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 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 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.