Java 本机查询中出现错误

Java 本机查询中出现错误,java,sql,nativequery,sql-insert,Java,Sql,Nativequery,Sql Insert,我是sql新手,我面临以下本机查询的问题 public void saveOfflineBatchDetails(BigInteger user_id) { em.createNativeQuery("INSERT INTO rst_offline_transaction_batch (created_date , user_id)" + "VALUES('?1', ?2)") .setParameter(1, new java.uti

我是sql新手,我面临以下本机查询的问题

 public void saveOfflineBatchDetails(BigInteger user_id) {

    em.createNativeQuery("INSERT INTO rst_offline_transaction_batch (created_date , user_id)" +
            "VALUES('?1', ?2)")
            .setParameter(1, new java.util.Date())
            .setParameter(2, user_id)
            .executeUpdate();
}
它不会将值传递给数据库。创建的日期应该是今天的日期和时间。谁能告诉我这个问题出了什么问题吗。
非常感谢

对于参数化查询,通常不包括单引号。尝试:

VALUES(?1, ?2)
(在
?1
周围没有引号)。否则(对于读取器和解析器来说)很难判断是要插入参数1还是要插入文本值
?1

您还应该检查
executeUpdate()
中的返回值,看看它是否认为它影响了任何行。这可能会给你零,但无论如何值得检查

最后,我认为日期需要按照以下要求进行特殊处理:

setParameter(1, new java.util.Date(), TemporalType.DATE);
这是因为Java日期对象根本不是日期,而是时间戳——您需要确保选择正确的时态对象类型,以便在查询中放置正确的值

简言之,类似于:

int affected = em.createNativeQuery(
    "INSERT INTO rst_offline_transaction_batch (" +
    "    created_date," +     // ?1
    "    user_id" +           // ?2
    ") VALUES (?1,?2)"
    )
    .setParameter(1, new java.util.Date(), TemporalType.DATE)
    .setParameter(2, user_id)
    .executeUpdate();
// Check affected.

我试过了,但它仍然没有将值添加到数据库中。我添加单引号是因为它的日期。@user421607:您不需要在准备好的语句中使用单引号,因为数据库引擎会为您添加它们。@paxdiablo:我认为不需要类型提示,因为setParameter函数对于不同类型的值重载。@nikc,true,但是日期没有两个参数重载,而且,在任何情况下,Java的日期都不是日期,而是时间戳,因此您可能会得到一个类似于
2011-01-02 15:36:74
的参数,而不是一个可用的日期。在任何情况下,我都没有检查我的答案(我家里没有JEE环境),我可能完全错了:-)我的建议是让OP试一试。@paxdiablo:那怎么不是一个有用的日期?但我明白你的观点和立场是正确的。