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

将哈希映射插入任何数据库表

索曾琪
2023-03-14

我有一个定义如下的散列表:

  myMap = new HashMap<String,String>();

此映射由作为键的字段名称和作为课程值的字段值组成。我正在尝试制作一个将 HashMap 和表名作为参数的方法。我的查询必须具有以下格式,因为我不会插入到表中的所有列:

INSERT INTO $tableName (?,?,?,?)
VALUES (?,?,?,?)

列的数量当然取决于散列表的大小。我如何通过遍历散列表来实现这一点呢?以下是我迄今为止使用不同方法得出的结论,但我不认为它会正常工作:

public void insertData(HashMap<String, String> dataMap, String tableName) {

    int size=dataMap.size();
    String sql = "INSERT INTO " + tableName;
    Iterator<Entry<String, String>> it = dataMap.entrySet().iterator();
    int counter = 1;
    while (it.hasNext()) {
        Map.Entry pairs = (Map.Entry)it.next();
        sql += pairs.getKey()+"="+pairs.getValue();
        if(size > counter )
            sql += ", ";
        counter++;
    }
    sql += ";";
}

共有1个答案

洪景铄
2023-03-14

您需要自己生成带有列名和占位符的准备语句SQL字符串。下面是一个启动示例:

StringBuilder sql = new StringBuilder("INSERT INTO ").append(tableName).append(" (");
StringBuilder placeholders = new StringBuilder();

for (Iterator<String> iter = dataMap.keySet().iterator(); iter.hasNext();) {
    sql.append(iter.next());
    placeholders.append("?");

    if (iter.hasNext()) {
        sql.append(",");
        placeholders.append(",");
    }
}

sql.append(") VALUES (").append(placeholders).append(")");
preparedStatement = connection.prepareStatement(sql.toString());
int i = 0;

for (String value : dataMap.values()) {
    preparedStatement.setObject(i++, value);
}

int affectedRows = prepatedStatement.executeUpdate();
// ...

这还有一个额外的好处,就是您可以使用< code>Map

请记住,如果table leName和map键由最终用户控制,则存在严重的SQL注入攻击漏洞。

 类似资料:
  • 我正试图让我的头脑围绕着一个哈姆特的细节。我会用Java自己实现一个,只是为了理解。我熟悉尝试,我想我得到了HAMT的主要概念。 基本上, 两种类型的节点: null null 我不太明白的部分是碰撞检测和缓解。在链接的论文中,他暗示了这一点: 然后将现有键插入到新的子哈希表中,并添加新键。每使用5个以上的散列比特,冲突的概率就减少1/32倍。偶尔,可能会消耗整个32位哈希,必须计算一个新的哈希来

  • 我有一个包含许多重复条目的文件,如下所示: 那里的每个实体也与一个ID相关联,也许是一个,也许是更多, 我想单独获取每个实体,但由于消除歧义,对于类似于,每个实体都可以与多个ID关联,因此在下,可能会有一个用于河流的ID,另一个用于海湾、城镇等。 我想最好的方法是使用哈希映射,其中名称是关键,对吗? 有没有办法输出JSON格式的hashmap或其他高度可移动的数据表示?

  • > 阅读算法书,需要掌握哈希表的概念。他们写了关于使用单独链接的散列和使用线性探测的散列。我猜Java的HashMap是一个哈希表,因此我想知道HashMaps使用什么机制(链接或探测)? 我需要实现最简单的HashMap与get,put,删除。你能给我指出好的材料来阅读吗? 当用于映射的惟一键是自定义对象时,我们需要在相应的类型中实现hashCode()函数。我做得对吗?或者什么时候需要hash

  • 我有两个表和一个表来映射我以前的两个表的关系,我如何使用Spring data JPA高效自动地将数据插入到映射的表中?下面是表结构。 用户(id(PK),名称,电子邮件,userRoleId)角色(id(PK),名称,userRoleId)用户角色(id(PK),userId(FK<-User),roleId(FK<-Role))

  • 我有一个带有键和值的哈希映射(整数数组)

  • 我需要从我的Android向Algolia发送数据,发送的数据应该是JSONObject格式(导入org.json.JSONObject) Algolia中的数据应采用此格式 所以在Android中,我这样设置代码 在这行代码中 那么我应该怎么做才能以JSONObject格式发送hashmap数据呢?