如何在不使用bean的情况下将LinkedHashMap值输入数据库?

时间:2015-05-25 07:08:09

标签: java dictionary linkedhashmap

我是LinkedHashMap的新手。

现在我有一些像LinkedHashMap的数据 -

article_ID=386247568292, author_externalId=235697849816687, author_fbid=235697849816687, ...

现在这是我的db entry代码

public void InsertEntry(LinkedHashMap<String, Object> entMap) throws SQLException {

    Connection conn = null;
    PreparedStatement pstmt = null;

    conn = pool.getConnection();
    String sql="INSERT into socialmedia(article_ID,author_externalId, author_fbid)"
                + "VALUES(?,?,?)";
   pstmt = conn.prepareStatement(sql);

现在我怎么能将My LinkedHashMap值输入到字符串中,以便我可以将所有这些值输入到数据库中。

我不想使用任何Bean。

3 个答案:

答案 0 :(得分:1)

从LinkedHashMap

获取值
// either you loop thru the entries
Set<String> keys = entMap.keySet();
int param = 1;
for(String k:keys) {
    pstmt.setString( (param++), (String)entMap.get(k) );
}

or

// if you prefer use the key names, e.g.
String aid = (String) entMap.get("article_ID");

关于LinkedHashMap

  • 请记住,您将以顺序获取LinkedHashMap中的值。。

  • 您必须确保始终按此顺序

  • 解决方案可能是您检查密钥(按名称)并确定它是否是您期望的订单/类型,以使您的解决方案更加稳固。并确保将通过setString,setInt等处理这些值。

SQL IN参数

  • 请记住,setString将把所有插入处理为String对象。这适用于大多数jdbc支持的数据库。但这并不是100%的安慰。如果你知道你有整数等,那么将它们作为setInt处理。

来自 PreparedStatement 规范:

  

用于设置IN参数值的setter方法(setShortsetString等)必须指定与输入参数的已定义SQL类型兼容的类型。 例如,如果IN参数的SQL类型为INTEGER,则应使用方法setInt

现在,在所有数据库服务器/ jdbc驱动程序中,这可能不是那么严格,但值得一提的是插入是否失败。

答案 1 :(得分:0)

下面的

应该有用......

public void InsertEntry(LinkedHashMap<String, Object> entMap) throws SQLException {
    Connection conn = null;
    PreparedStatement pstmt = null;
    conn = pool.getConnection();
    String sql="INSERT into socialmedia(user_name,article_count,epoch,description,authorId,article_url,publish_date,harvest_date,following,followers,updates,sentiment)"
            + "VALUES(?,?,?,?,?,?,?,?,?,?,?,?)";
    pstmt = conn.prepareStatement(sql);
    Set keys = entmap.keySet();  
    int rowId=1;
    for(String key : keys)
    {
       String val = entMap.get(key);
       pstmt.setString(rowId,val);
       rowId++;
    }
    pstmt.executeUpdate();
}

如果您有任何疑问,请与我们联系。

答案 2 :(得分:0)

谢谢大家的回复。我这样做了 -

String sql = "INSERT INTO students(article_ID, description_charset, author_appScopedId, author_externalId) values(?,?,?,?);
pstmt = conn.prepareStatement(sql);

pstmt.setString(1, (String) entMap.get("article_ID"));
pstmt.setString(2, (String) entMap.get("description_charset"));
pstmt.setString(3, (String) entMap.get("author_appScopedId"));
pstmt.setString(4, (String) entMap.get("author_externalId"));

pstmt.executeUpdate();