【发布时间】:2014-09-04 09:36:27
【问题描述】:
我是 Java 开发新手,在我的 Java DAO 类中编写一批查询时需要一些帮助。 在我的 DAO 类中,我想编写一个更新查询来更新几个表。类似的东西:
UPDATE deals, vehicles SET deals.client= "client",
vehicles.vehicleIdNumber="123456"
WHERE deals.id ="123" and deals.id= vehicles.id;
如果我在 MySQL 中执行它,这将起作用,但如果我想在我的 DAO 类中执行此操作,我必须批量编写两个查询。 问题是我不知道该怎么做。根据我已经研究过的内容,我只能找到一些使用 JDBC、Spring、Hibernate 的示例,但我没有在我的应用程序中使用这些示例。
当我对单个表进行更新时,我有这样的事情:
public void updateDeal(String dealNumber, Integer dealType) {
Query upQ = em.createQuery(
"update Deals d set d.dealType = :dealType where d.dealNumber= :dealNumber")
.setParameter("dealType", dealType)
.setParameter("dealNumber", dealNumber);
upQ.executeUpdate();
如何在一个事务中更新两个或多个表,与上述类似,但不使用 JDBC、Spring、Hibernate...
Tnx!
更新: 我意识到我没有很好地解释我不使用 JDBC 的意思......我的错误。 所以我有 JDBC,我与我的数据库有连接,并且它与单个表语句一起工作正常。 我实际上想知道是否有其他方法可以做到这一点,而不是像: http://w3processing.com/index.php?subMenuId=146 在此示例中,您必须首先连接到数据库,然后创建语句,然后添加批处理中的所有查询。 当我创建用于更新一个表的查询时非常简单(这与我在上面的代码示例中显示的完全一样)。 我想知道是否有一些更简单的方法可以更新多个表。我不想每次都创建与我的数据库的连接。
我尝试过类似的方法:
public void updateDeal(Integer id, String client,
String vechicleNumber)
Query query = em.createQuery("UPDATE Deals, Vehicles SET deal.client=:client, vehicle.vehicleNumber=:vechicleNumber WHERE deal.id =:id AND deal.id=vehicles.id ").
setParameter("client", client).setParameter("id", dealID).
setParameter("vechicleNumber ", vechicleNumber );
我得到这个错误:
According to the error in the console, I have synatax error:
Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: , near line 1, column 35
【问题讨论】:
-
Query类有什么包? -
em的类型是什么 -
首先,没有理由不能通过DAO 使用与直接使用相同的SQL。其次 - 您似乎已经在使用 Hibernate(以
em的形式),当然还有 JDBC。第三 - 如果没有 JDBC,您需要为 DB 编写自己的网络通信系统,因此您最好要么找出您为 DB 使用的技术,要么获取 MySQL 低级协议规范表 -
一开始我没有很好地解释我的问题。我现在已经更新了这个问题。查询 --> 导入 javax.persistence.Query; em -->import javax.persistence.EntityManager;
-
你也应该编辑你的问题标题,因为它很容易误导。如果我理解正确,您想知道是否可以在单个语句中批量更新表。在我看来,这更像是一个
SQL问题。但是无论如何,您也应该在标题中写下,因为很多人只会看到标题,而您可能会通过更好的标题获得更多/更好的答案。
标签: java sql dao batch-updates