在项目中第一次遇到该错误是在项目中添加党员的时候。
添加党员需要添加创建日期,由于是自己封装的框架,针对日期类型的时候,遇到含有to_date等时,不需要外层添加单引号。
/**
* 插入实体, 可插入含格式化日期描述的字符串
*/
public static <T> boolean insertEntityWithDate(Class<T> entityClass, Map<String, Object> fieldMap) {
if (CollectionUtil.isEmpty(fieldMap)) {
LOGGER.error("can not insert entity: fieldMap is empty");
return false;
}
String sql = "INSERT INTO " + tableName(entityClass);
StringBuilder columns = new StringBuilder("(");
StringBuilder values = new StringBuilder("(");
for (String fieldName : fieldMap.keySet()) {
columns.append(fieldName).append(", ");
String value = fieldMap.get(fieldName).toString();
if (value.toLowerCase().contains("to_date") || value.toLowerCase().contains("to_timestamp")) {
values.append(value).append(",");
} else {
values.append("'").append(value).append("'").append(",");
}
}
columns.replace(columns.lastIndexOf(", "), columns.length(), ")");
values.replace(values.lastIndexOf(","), values.length(), ")");
sql += columns + " VALUES " + values;
return update(sql) == 1;
}
/**
* 执行更新语句(包括:update、insert、delete)
*/
public static int update(String sql) {
int rows = 0;
try {
Connection conn = getConnection();
rows = QUERY_RUNNER.update(conn, sql);
} catch (SQLException e) {
LOGGER.error("execute update failure", e);
throw new RuntimeException(e);
}
return rows;
}
在封装对象的时候使用了如下:
pm.setCREATE_TIME(String.format("to_date('%s', 'yyyy-MM-dd HH:mm:ss')","sysdate"));
具体框架封装不用理会,这里指出问题是
oracle格式是不区分大小写的,所以MM和mm是一样的 可能会以月份的形式显示。所以oracle中用了mi来代替MM。
修改成(把mm改成mi)解决问题
pm.setCREATE_TIME(String.format("to_date('%s', 'yyyy-MM-dd HH:mi:ss')","sysdate"));
专业墙纸贴纸厨房用具装饰出售,本人网店经营,访问即是爱
博客对你有用记得访问下哦,增加下访问量,如有需要可以下单购买哦^_^。https://item.taobao.com/item.htm?id=570637716145