2011-04-25 31 views
6

¿Cómo se almacena un HashMap dentro de una base de datos SQL? Además, ¿cómo cargaría ese HashMap desde una base de datos SQL en una instancia de HashMap?Almacenar un HashMap en una base de datos SQL

Bien, esto es lo que estoy haciendo. Tengo una base de datos para almacenar los datos del jugador de mi juego. Tiene una tabla que contiene sus nombres de usuario y contraseñas. Cada jugador tiene un HashMap que almacena sus propiedades. Necesito almacenar ese HashMap en la base de datos junto con su usuario respectivo.

+0

¿qué hay de los tipos de clave y valor? –

+0

El tipo de clave es Cadena, sin embargo, el tipo de valor es Objeto (para uso genérico), pero estoy bastante seguro de que el valor (aunque su tipo es Objeto) siempre se podrá convertir en una Cadena para su almacenamiento. –

Respuesta

10

también necesita una tabla de 3 columnas

usuario,

clave

,

valor

sería parecido a

"usuario 1", "propiedad1", "valor1 "

" usuario 1 "," propiedad2 "," valor2 "

"Usuario 2", "propiedad1", "valor1"

"usuario 3", "propiedad1", "valor1"

"usuario 3", "propiedad2", "valor2"

Luego, simplemente volverá a leer los datos y mirará alrededor del campo de usuario para reconstruir cada tabla.

+0

Originalmente pensaba que esta sería la forma en que tendría que hacerlo, pero pensé que probablemente había una mejor manera. –

+0

Creo que esta es una solución agradable y simple. Simple y fácil de leer triunfa * soluciones * inteligentes cada vez en mi opinión. Agradable y fácil de mantener. – pgbsl

+0

No tengo idea de cómo implementar esta idea en el código con el marco SQL en Java. –

1

HashMap es la estructura de datos, puede almacenar datos que residen en ella.

Cree una tabla que emule un par de valores clave. iterar a través de las teclas del mapa y almacenarlo en DB.

+0

Uh, ¿tu punto ...? –

+2

@Gnarly: su punto es que las bases de datos SQL son sobre el almacenamiento de datos, no estructuras de datos. – Oded

+0

@Gnarly lo consiguió? –

6

Si desea mantener la relación de pares clave-valor, sin embargo, debe asegurarse de que las claves y los valores sean cadenas y que quepan en la definición de la columna. He aquí un ejemplo:

mysql> create table hashmap (k varchar(200), v varchar(200)); 
Query OK, 0 rows affected (0.24 sec) 

mysql> insert into hashmap values ('key','value'); 
Query OK, 1 row affected (0.02 sec) 

mysql> select * from hashmap; 
+------+-------+ 
| k | v  | 
+------+-------+ 
| key | value | 
+------+-------+ 
1 row in set (0.00 sec) 

Además, puede índice único de la columna k cual tiene las llaves para que sus búsquedas son constantes al igual que un mapa hash, y se puede sustituir el valor anterior mediante el uso de ON DUPLICATE KEY UPDATE v = new_value.. Supongo que está utilizando MySQL para la parte ON DUPLICATE KEY.

+0

¿Cómo se relaciona esto con mi pregunta? –

+0

¿Cómo no está relacionado con su pregunta? Quería pegar los datos dentro de un hashmap en una tabla, y el esquema que describí hace exactamente eso, excepto que la clave y el valor son cadenas. ¿Puede agregar más detalles y posiblemente dar un ejemplo, ya que a partir de los comentarios es bastante obvio que nadie realmente entiende lo que quiere responder. – lobster1234

+0

Lo siento, no estaba claro sobre lo que quería. Edité mi OP. –

1

Cada entrada en el HashMap es como una fila en su tabla. Usted terminaría teniendo una tabla separada para cada HashMap (probablemente).

El parámetro K en su mapa debe aplicarse como una clave única en su tabla y debe indizarse.

Tenga en cuenta que el almacenamiento de estos objetos puede requerir más de una columna cada uno. Por ejemplo, puede tener un objeto Point como su clave, por lo que necesitaría una columna xy una columna y, y un índice de exclusividad para los pares xey.

Cuestiones relacionadas