我想要存储在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个类的对象,因此它给出了错误。
答案 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