SQL字符串获取' SYSDATE'时的Spring数据访问异常作为String参数传递

时间:2016-01-25 09:50:28

标签: java mysql sql-server spring

问题背景

我尝试使用spring框架将记录插入到我的数据库中。作为这个过程的一部分,我在我的DAO类中创建了一个SQL字符串(见下文),它接受一些参数并将它们插入到我声明为字段的查询字符串中。 如果前端用户选择了某些条件(暂停/禁用),我的数据库中有两个字段设置为当前日期。

问题是Spring不允许我将String SYSDATE作为参数注入到我的查询中,它期望它是一个数字类型,因为我的数据库中的列是{{1输入。

我没有创建4个单独的SQL字符串来容纳用户做出的四种可能的选择(不是禁用/暂停,暂停,禁用,禁用和暂停),而是希望只有一个语句来插入值DATE到SQL字符串中,具体取决于传递给调用方法的值。

SQL STRING

  • 不起作用

    SYSDATE

(上面的方法实际上接受了JdbcTemplate的update方法中显示的那些数据类型的变量,但只是为了让你大致了解我传递的参数)

private int myMethod(...) {
    int created = 0;
    created = super.getJdbcTemplate().update(createNewObject,
    new Object[] {1, "t-1000", "good", "SYSDATE", "SYSDATE"});
    return created;}

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

渴望输出

我想知道是否可以使这种单一查询方法有效,而不是为用户选择的每种可能条件分别进行查询。

1 个答案:

答案 0 :(得分:1)

尝试使用new Object[] {1, "t-1000", "good", new Date(), new Date() };代替new Object[] {1, "t-1000", "good", "SYSDATE", "SYSDATE"});