问题描述:
由于数据表字段非常多,使用foreach循环,key为数据库字段,value为要添加的值.字段中含有小数点的无法正常添加数据
问题展示:
断点展示有值
日志展示获取不到值
sql如下:
<insert id="dataMergeInsert" parameterType="java.util.List">
INSERT INTO ${table}
<foreach collection="params.keys" item="key" open="(" separator="," close=")">
`${key}`
</foreach>
values
<foreach collection="params.keys" item="key" open="(" separator="," close=")">
#{params[${key}]}
</foreach>
</insert>
/**
* 数据新增
* @param table 表名
* @param jsonObject key 字段名 value 数据
*/
void dataMergeInsert(@Param("table") String table,@Param("params") JSONObject jsonObject);
问题解决:
直接将新增的sq拼接好去执行,解决字段不能正确识别,获取值失败的问题
注(反引号非常重要)
public void insertVariableData(JSONObject jsonObject) throws SQLException {
Connection connection = DriverManager.getConnection(url, username, password);
Statement stat = connection.createStatement();
//拼接数据表名
String tableName = variableDateTable + jsonObject.getString("unit_id");
String body = null;
String end = null;
//获取数据长度,进行循环,创建新增语句
for (String key : jsonObject.keySet()) {
if ("unit_id".equals(key)) {
body = "`" + key + "`";
end = "'" +jsonObject.getString(key) + "'";
} else {
body += ",`" + key + "`";
end += ",'" + jsonObject.getString(key)+ "'";
}
}
try {
String head = "insert into " + tableName + "(" + body + ")values(" + end + ")";
//执行sql,增加数据
stat.executeUpdate(head);
} catch (SQLException e) {
e.printStackTrace();
}
//释放资源
stat.close();
connection.close();
}