gpt4 book ai didi

java - 当 SQL 字符串获取 'SYSDATE' 作为字符串参数传递时,Spring Data Access 异常

转载 作者:行者123 更新时间:2023-11-29 11:45:43 25 4
gpt4 key购买 nike

问题背景

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

问题是Spring不允许我将字符串SYSDATE作为参数注入(inject)到我的查询中,它期望它是数字类型,因为我的数据库中的列是日期类型。

与其创建 4 个单独的 SQL 字符串来适应用户所做的四种可能的选择(未禁用/暂停、暂停、禁用、禁用并暂停),我宁愿只使用一条插入值的语句 SYSDATE 到 SQL 字符串中,具体取决于传递给调用方法的值。

SQL 字符串

  • 不起作用

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

(上面的方法实际上采用 JdbcTemplate 的更新方法中显示的数据类型的变量,但只是为了让您大致了解我传递的参数)

    private final static String createNewObject = "INSERT INTO my_table"
+ "(ID, \"MODEL\", STATUS, OVERRIDE, DISABLED) "
+ "VALUES "
+ "(?, ?, ?, ?, ?)";

原因:java.sql.SQLDataException:ORA-01858:在需要数字的地方发现非数字字符

  • 有效

    private final static String createNewObject = "INSERT INTO my_table"
    + "(ID, \"MODEL\", STATUS, OVERRIDE, DISABLED) "
    + "VALUES "
    + "(?, ?, ?, SYSDATE, SYSDATE)";

期望输出

我想知道是否有一种方法可以使这种单一查询方法发挥作用,而不是为用户选择的每个可能条件使用单独的查询。

最佳答案

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

关于java - 当 SQL 字符串获取 'SYSDATE' 作为字符串参数传递时,Spring Data Access 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34989489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com