gpt4 book ai didi

java - native 查询错误

转载 作者:行者123 更新时间:2023-11-30 05:00:01 25 4
gpt4 key购买 nike

我是 SQL 新手,我面临以下 native 查询的问题

 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 Date 对象根本不是日期,而是时间戳 - 您需要确保选择正确的时间对象类型,以便在查询中放置正确的值。

所以,简而言之,类似于:

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.

关于java - native 查询错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7116969/

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