【问题标题】:Storing a HashMap in an SQL database在 SQL 数据库中存储 HashMap
【发布时间】:2011-08-12 04:34:56
【问题描述】:

如何在 SQL 数据库中存储 HashMap?另外,如何将 HashMap 从 SQL 数据库加载回 HashMap 实例?

好的,这就是我正在做的。我有一个数据库来存储我的游戏的玩家数据。它有一个包含他们的用户名和密码的表。每个玩家都有一个 HashMap 来存储他们的属性。我需要将该 HashMap 与其各自的用户一起存储在数据库中。

【问题讨论】:

  • key和value的类型怎么样?
  • 键类型是String,但是值类型是Object(用于一般用途),但我很确定值(即使它的类型是Object)总是能够转换成用于存储的字符串。

标签: java sql hashmap


【解决方案1】:

你需要一个 3 列的表

用户,

键,

价值

然后看起来像

“用户 1”、“属性 1”、“值 1”

“用户 1”、“属性 2”、“值 2”

“用户 2”、“属性 1”、“值 1”

“用户 3”、“property1”、“value1”

“用户 3”、“property2”、“value2”

然后,您只需重新读取数据并查看用户字段以重建每个表。

【讨论】:

  • 我原本认为这将是我必须这样做的方式,但我认为可能有更好的方式。
  • 我认为这是一个不错的简单解决方案。在我看来,简单易读的解决方案每次都胜过 聪明 解决方案。美观且易于维护。
  • 我不知道如何用 Java 中的 SQL 框架将这个想法实现到代码中。
  • 从哈希图中获取一个条目集,然后遍历它。有关 sql 教程的链接,请参阅 @Jigar 的评论。已经有大量关于如何执行此操作的信息,这些信息将根据您正在使用的数据库进行定制。
  • 我的问题不在于 SQL 的语法,而在于 Java SQL 框架。昨晚我花了一个小时试图弄清楚如何遍历 HashMap 的条目集,然后为每个条目对数据库进行 UPDATE 查询。无论我在做什么,它都不起作用。
【解决方案2】:

HashMap是数据结构,可以存储驻留在里面的数据。

创建一个模拟键值对的表。遍历 map 的键并将其存储在 DB 中。

【讨论】:

  • @Gnarly - 他的观点是 SQL 数据库是关于存储数据的,而不是数据结构。
  • 是的,但我想将数据存储在数据库内部的 HashMap 中。
  • 您只需要使用 JDBC 执行插入查询
  • 我对 SQL 数据库一无所知,因此我问如何使用 SO。
  • 快速谷歌搜索变成this
【解决方案3】:

HashMap 中的每个条目就像表中的一行。您最终会为每个 HashMap 提供一个单独的表(可能)。

您的地图中的K 参数应作为表上的唯一键强制执行,并编入索引。

请记住,存储这些对象可能需要多于一列。例如,您可能有一个 Point 对象作为您的键,因此您需要一个 x 列和 y 列,以及 x 和 y 对的唯一性索引。

【讨论】:

    【解决方案4】:

    如果你想坚持键值,你可以,但是,你必须确保键和值是字符串,并且可以适合列定义。这是一个例子:

    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)
    

    此外,您可以对包含键的列 k 进行唯一索引,这样您的查找就像哈希图一样是恒定的,并且您可以使用 ON DUPLICATE KEY UPDATE v = new_value. 替换旧值。我假设您将 MySQL 用于 ON DUPLICATE KEY 部分。

    【讨论】:

    • 这与我的问题有什么关系?
    • 怎么和你的问题没有关系?您想将数据粘贴到表中的哈希映射中,而我概述的架构就是这样做的,除了键和值是字符串。您能否添加更多细节并可能举个例子,因为从 cmets 很明显,没有人真正理解您想要回答的内容。
    猜你喜欢
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    相关资源
    最近更新 更多