在Java中隐藏hashmap到json数据

时间:2015-08-10 10:04:16

标签: java json postgresql jackson

我想要存储在DB中的2个hashmap。为此,我在json中转换它们,对于我的第一个hashmap它工作正常,但第二个hashmap包含一个类的对象。所以它在DB中插入hashmap时给出了错误。这是我的代码

public void insertInput(HashMap Hash,AnalysisResponse analysisResponseModelObj) {
        BaseDAO baseDaoObj = null;
        JSONObject json = null;
        JSONObject jsonData = null;
        HashMap userInput = null;
        String transactionid=null;
        HashMap configmap=null;
        try {
jsonData=new HashMap();
            baseDaoObj = new BaseDAO();
            userInput = new HashMap();
            userInput = (HashMap) Hash
                    .get("userInputHashKey");
            json = new JSONObject();
            json.putAll(userInput);
            ObjectMapper objectMapper = new ObjectMapper();
            jsonData.putAll(Hash);

            String query = QueryUtilities.insertInputIntoTranactionLOg(json,jsonData,transactionid);
            int rowaffacted = baseDaoObj.executeUpdateQuery(query, null);
            System.out.println(rowaffacted);
        } catch (Exception e) {
            logger.error("Error while fetching input ");
        }
    }

这是我的更新statemnet

 UPDATE logtable set input1 = '{"TYPE":"os","NAME":"linuxtest.abc.com"}',input2 = '{"isCategorySpecific":true,"dataFilterHashMap":{"arg_infilename":[com.abc.pqr.WhereClauseGenerator@13ff97c],"TYPE":"os","CI_NAME":"ten","METRIC_TYPE":"cpu"},"typeOfLanguage":"java"}'WHERE id ='1'

这里input2包含1个类的对象,因此它给出了错误。

2 个答案:

答案 0 :(得分:0)

您可以使用JSONObject jsonWithMap = new JSONObject(map);进行隐蔽,然后尝试插入。

答案 1 :(得分:0)

你需要使用预准备语句来避免与sql语法冲突,尝试类似this的内容:

// create our java preparedstatement using a sql update query
PreparedStatement ps = conn.prepareStatement(
  "UPDATE logtable SET input1 = ?, input2 = ? WHERE id = ?");

// set the preparedstatement parameters
ps.setString(1,json);
ps.setString(2,jsonData);
ps.setInt(3,transactionid);

// call executeUpdate to execute our sql update statement
ps.executeUpdate();
ps.close();

它不完全是PostgreSQL,但我认为它应该也能正常工作。顺便说一句。你总是想使用Prepared-Statements,因为你想避免SQL-Injection