【问题标题】:Spring Data Access Exception when SQL string gets 'SYSDATE' passed as a String param当 SQL 字符串获取“SYSDATE”作为字符串参数传递时,Spring 数据访问异常
【发布时间】: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


【解决方案1】:

尝试new Object[] {1, "t-1000", "good", new Date(), new Date() }; 而不是new Object[] {1, "t-1000", "good", "SYSDATE", "SYSDATE"});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    相关资源
    最近更新 更多