当前位置: 首页 > 知识库问答 >
问题:

将列和值的HashMap存储到用户ID的SQL数据库

施鸿
2023-03-14

我有一个列名称和值的HashMap,我需要为SQL数据库中的给定用户ID存储,因为我需要为每个玩家存储大量键值对,我决定使用一个充满玩家的表,列作为键。

这个建议:在任何数据库表中插入一个HashMap看起来是个好主意,但是,经过更多的研究,我发现keySet()和values()不能保证顺序相同:Map.keySet和Map.values上的迭代顺序相同?。这可能会导致问题,就像这个建议一样,keySet() 和 values() 以相同的顺序完美排列是至关重要的,否则可能会将错误的数据插入到列中。

目前,我正在使用以下运行良好的代码,但是如果 HashMap 很大,它可以快速创建大量语句,这些语句可以缩减为单个语句。

HashMap<String, Object> data = //SOME DATA
String uuid = //PLAYER UUID
try (Connection c = pool.getConnection()) {
    for (String key : data.keySet()) {
        try (PreparedStatement ps = c.prepareStatement("INSERT INTO `table` (`uuid`,`" + key + "`) VALUES (?,?) ON DUPLICATE KEY UPDATE `" + key + "`=?;")) {
            Object value = data.get(key);
            ps.setString(1, uuid);
            ps.setObject(2, value);
            ps.setObject(3, value);
            try {
                ps.execute();
            } catch (SQLException e) {
                // ERROR
            }
        } catch (SQLException e) {
            // ERROR
        }
    }
} catch (SQLException e) {
    // ERROR
}

我希望使用PreparedStatement来清理值,但这意味着我需要遍历HashMap一次,为语句创建列列表,然后再次遍历以设置值。这就是问题所在,keySet()values()可能不在同一顺序中,而且这会增加额外的浪费时间,重复两次映射。

有没有好的方法来实现这一点,或者我应该以某种方式重组我的数据库以避免这个问题?

共有1个答案

时才俊
2023-03-14

您可以使用LinkedHashMap来完成任务。

 类似资料:
  • 问题内容: 如何在SQL数据库中存储HashMap?另外,您如何将HashMap从SQL数据库加载回HashMap实例? 好的,这就是我正在做的。我有一个数据库来存储我的游戏的玩家数据。它有一个包含用户名和密码的表。每个玩家都有一个存储其属性的HashMap。我需要将该HashMap及其各自的用户存储在数据库中。 问题答案: 您需要一个三列表 用户, 键, 值 然后看起来像 “用户1”,“属性1”

  • 告诉我如何在Azure存储帐户中存储PostgreSQL数据库数据。PostgreSQL部署到Azure容器实例。当我重新启动Azure容器实例时,所有数据都会消失。Dockerfile 来自Timescale/Timescaledb:Latest-PG12 az容器创建--resource-group test-env--name test-env--image test-env.azureca

  • 我希望使用枚举将值映射到数据库表行: 我想使用status=active从FE中搜索和获取状态,但只存储到数据库行字段中的符号A。 我如何将枚举键A存储到数据库中?

  • 本文向大家介绍将列的值存储到MySQL存储过程的变量中,包括了将列的值存储到MySQL存储过程的变量中的使用技巧和注意事项,需要的朋友参考一下 要声明变量,请在MySQL存储过程中使用DECLARE。让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 这是创建存储过程并将上述表的列值存储在存储过程变量中的查询- 调用存储过程- 这

  • 问题内容: 我正在尝试将sql数据库中的数据存储到数组中。目前我有这个: 问题是我有8行数据。我需要将数据库中的每个8个名称存储到一个数组中。当我尝试这个: 它不起作用。 问题答案: 您想要的是: 这会将所有8个名称存储在类似于以下内容的数组中:

  • 问题内容: 我想存储值并从Java HashMap中检索它们。 这是我到目前为止所拥有的: 我想从HashMap中检索所有键和值作为Java集合或实用程序集(例如)。 我知道只要知道密钥就可以获取值,例如: 有没有办法检索键值作为列表? 问题答案: Java Hashmap键值示例: