【发布时间】:2021-08-13 04:20:04
【问题描述】:
我需要你的帮助!
我有一个在 jdbcTemplate 中执行的 sql 查询,如下所示:
public String Insertquery(FichierEclate e) {
String var="(null)";
String tableName="TF02_HISTO_"+Country;
String sql = "INSERT INTO " + tableName + " (TF02TFID, TF02STID, TF02DATE, TF02UID) VALUES (" + e.getAffaireID() + ", 4, TO_TIMESTAMP('" +e.getDate()+ "','yyyy-mm-dd hh24:mi:ss')," + var +")";
return sql;
}
那我就打个电话:
String Inquery=Insertquery(item);
vJdbcTemplate.execute(Inquery);
我为更新查询做了同样的步骤,它工作得非常好!!但是在插入查询中,它显示了这个错误:
StatementCallback; SQL [INSERT INTO TF02_HISTO_MN (TF02TFID, TF02STID, TF02DATE, TF02UID) VALUES (25472563, 4, TO_TIMESTAMP('2021-03-01 00:45:00.0','yyyy-mm-dd hh24:mi:ss'),(null))]; ORA-01830: date format picture ends before converting entire input string
; nested exception is java.sql.SQLDataException: ORA-01830: date format picture ends before converting entire input string
我认为我不需要 TO_TIMESTAMP 或 TO_DATE 因为 jdbcTemplate 会自动进行转换! 当我删除 TO_TIMESTAMP 时,我收到类型错误:
missing comma
怎么办!!!! 顺便说一句,这个对象:FichierEclate e 正在使用时间戳类型的属性“日期”,而我正在使用 oracle!这是我的数据库中写入的日期格式示例:
2021-03-01 00:45:00
怎么办?!!!!!!!!!!
【问题讨论】:
-
“怎么办?”使用绑定变量;不要使用字符串连接构建查询。
-
除了@MT0说的避免sql注入,你为什么不把你的
e.getDate()变量转换成字符串,看看是怎么格式化的? -
我会回显@MT0,请使用绑定变量。但是,对于您遇到的特定错误,请注意您传递给
to_timestamp的字符串有一位小数秒。如果您真的想避免使用绑定变量,则需要确保您使用的格式掩码与您要转换的字符串匹配。 -
@MTO 你的答案就是解决方案!非常感谢:)
标签: java sql oracle spring-batch