2008-12-15 6 views
0

J'utilise jdbc pour travailler avec mon db. Je veux stocker un HashMap directement dans le db, oracle. je figure que j'ai besoin de sérialiser la carte, et son contenu, qui ne sont que des chaînes. Map implémente déjà Serializeable, mais ma question est comment puis-je mettre la carte dans le SQL en utilisant jdbc? par exemple, j'ai un jdbcTemplate.update ("insert into ....", nouvel Object [] {....}, new int [] {....}) puis-je mettre la carte dans le tableau Object? MerciSérialiser une carte Java à un db

Répondre

2

Vous avez besoin d'une table avec des colonnes clé/valeur, et si vous stockez plusieurs cartes, une colonne d'identité (ou une clé étrangère à une autre table contenant des données dont le hashmap est membre).

Ensuite, dans JDBC, créez une instruction préparée (insérez dans les valeurs myhashmap (id, foreign_id, key, val) (?,?,?,?)) UNE FOIS, puis faites une boucle sur chaque élément de la table de hachage. paramètres sur l'instruction et l'appel s'exécutent sur la requête. (Désolé, pas près de tout code pour afficher des extraits de code et ne pas saisir d'exemples buggés).

Ceci est également extensible de manière triviale aux cartes de String -> Object, où vous souhaitez stocker chaque champ dans Object dans la base de données. C'est-à-dire, c'est fondamentalement comme une table standard dans une base de données, et une colonne «clé». Les listes sont similaires, mais avec une colonne «rank» pour indiquer la commande.

+0

Il s'agit d'une approche bien meilleure que l'approche BLOB car vous pourrez lire et travailler avec les données de la base de données et pas seulement dans une application Java. Et entre Java, les versionsID des librairies java sont modifiées, de sorte que votre sérialisation peut ne pas fonctionner avec les versions plus récentes ou plus anciennes de Java. – hromanko

0

La façon dont je l'ai fait dans le passé est de créer une colonne dans une table pour stocker vos objets sérialisés. Le type de données doit être "blob" ou équivalent dans Oracle.

Il peut alors être écrit/récupéré à l'aide ResultSet.setBytes() et() ResultSet.getBytes

Questions connexes