【发布时间】:2016-05-01 13:53:22
【问题描述】:
问题背景
我正在尝试使用 spring 框架将记录插入到我的数据库中。作为这个过程的一部分,我在我的 DAO 类中创建了一个 SQL 字符串(见下文),它接受一些参数并将它们插入到我声明为字段的查询字符串中。 如果前端用户选择了某些条件(暂停/禁用),我的数据库中有两个字段设置为当前日期。
问题是 Spring 不允许我将 String SYSDATE 作为参数注入到我的查询中,它希望它是数字类型,因为我的数据库中的列是 DATE 类型。
与其创建 4 个单独的 SQL 字符串来适应用户做出的四种可能的选择(不是禁用/暂停、暂停、禁用、禁用和暂停),我更愿意只使用一个语句插入值 @987654323 @ 到 SQL 字符串中,具体取决于传递给调用方法的值。
SQL 字符串
-
没用
private int myMethod(...) { int created = 0; created = super.getJdbcTemplate().update(createNewObject, new Object[] {1, "t-1000", "good", "SYSDATE", "SYSDATE"}); return created;}
(上面的方法实际上采用了JdbcTemplate的update方法中显示的那些数据类型的变量,只是为了让您大致了解我传递的参数)
private final static String createNewObject = "INSERT INTO my_table"
+ "(ID, \"MODEL\", STATUS, OVERRIDE, DISABLED) "
+ "VALUES "
+ "(?, ?, ?, ?, ?)";
Caused By: java.sql.SQLDataException: ORA-01858: a non-numeric character was found where a numeric was expected
-
有效
private final static String createNewObject = "INSERT INTO my_table" + "(ID, \"MODEL\", STATUS, OVERRIDE, DISABLED) " + "VALUES " + "(?, ?, ?, SYSDATE, SYSDATE)";
期望的输出
我想知道是否有一种方法可以使这种单一查询方法发挥作用,而不是为用户选择的每个可能条件单独查询。
【问题讨论】:
-
尝试新对象[] {1, "t-1000", "good", new Date(), new Date() };而不是 new Object[] {1, "t-1000", "good", "SYSDATE", "SYSDATE"});
-
是的,解决了这个问题,非常感谢!如果您可以将其发布为答案,以便我可以接受它作为我的问题的解决方案?
标签: java mysql sql-server spring