2017-08-24 2 views
2

Je sais que le titre est assez cliché, mais il ne s'agit pas de stocker des données JSON dans SQL Server.Mapper JSONObject au serveur SQL

J'ai un JSONArray avec JSONObjects avec des clés qui correspondent aux noms de colonnes dans SQL Server 2012. Je souhaite enregistrer les données dans la base de données dans les colonnes appropriées.

Je sais que la façon la plus évidente de procéder est de parcourir le JSONArray et d'enregistrer les valeurs avec des commandes d'insertion individuelles. Je me demandais s'il y avait une autre façon de faire cela.

Je ne veux pas utiliser T-SQL. Je veux gérer cela à partir de Java seulement.

Voici des données d'exemple qui correspond au format de mon JSONArray:

[ 
    { 
     "FEATURE":"A", 
     "OPTION":"92384", 
     "ERROR_TYPE":"MISSING", 
     "DESCRIPTION":"Feature A is missing the option 92384", 
     "SERIAL_NUMBER":"249752-23894" 
    }, 
    { 
     "FEATURE":"B", 
     "OPTION":"0288394", 
     "ERROR_TYPE":"MISSING", 
     "DESCRIPTION":"Feature B is missing the option 0288394", 
     "SERIAL_NUMBER":"Y2394-20392Q" 
    } 
] 

Ma table de SQLServer ressemble à ceci: SQL table

Quelle serait la meilleure façon d'y parvenir sans boucle à travers chaque JSONArray ?

+1

Je vous suggère d'utiliser nvarchar au lieu de varchar. Vous pourriez rencontrer des difficultés d'encodage le long du chemin sinon. – Tschallacka

+1

@Tschallacka Noté. Va changer ça. – Penman

+0

Si vous pouvez mettre à jour votre logiciel de base de données à 2016, vous pouvez utiliser des fonctionnalités astucieuses telles que https://docs.microsoft.com/en-us/sql/relational-databases/json/use-for-json-output-in-sql -server-et-dans-client-apps-sql-server – Tschallacka

Répondre

1

Comme vous avez ajouté une balise java je voudrais convertir JSON en objet Java et enregistrez-le avec Hibernate. Voici deux liens utiles comment faire Json to Java Hibernate example

+0

Les données JSON sont générées en fonction d'une autre fonctionnalité. Je suis allé pour JSON plutôt que l'objet Java intentionnellement - parce que cela convient aux besoins de l'entreprise. En outre, je ne sais pas comment mettre cela autrement, mais je ne peux pas utiliser Hibernate/Maven où je travaille. Il doit être purement Java seulement. – Penman

-1
DECLARE @testJson NVARCHAR(4000)= N'[{"id":2,"name":"n2"},{"id":1,"name":"n1"}]' 

INSERT 
INTO 
    test_table SELECT 
     * 
    FROM 
     OPENJSON(@testJson) WITH (
      id int N'$.id', 
      name VARCHAR(200) N'$.name' 
     ) 

Mise à jour

utilisation java

jsonStr -> JSONObject et getNames (certains libs JSON)

String youJson = "{\"id\":0, \"name\":\"n0\"}"; 
JsonParser parser = new JsonParser(); 
JsonObject jsonObject = parser.parse(json).getAsJsonObject(); 
Set<String> keys = jsonObject.keySet(); 

Ensuite, utilisez NamedParameterJdbcTemp late et MapSqlParameterSource (spring-jdbc) pour créer sql et définir les paramètres dynamiquement.

PS. Je déteste ORM en Java.

+0

Op déclaré SQL Server 2012. Pas 2016 – Tschallacka

+0

pourquoi ne pas utiliser T-SQL? –

+0

A) op indiqué pas t-sql, B) la fonctionnalité de votre réponse est uniquement disponible à partir du serveur sql 2016. https://docs.microsoft.com/en-us/sql/t-sql/functions/openjson-transact -sql @op utilise sql server 2012 – Tschallacka