【问题标题】:How to execute few queries in one transaction in my DAO class? Is it possible to do it creating one query?如何在我的 DAO 类的一个事务中执行几个查询?是否可以创建一个查询?
【发布时间】: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


【解决方案1】:

如果可能,您可以使用存储过程或函数使其成为一个事务

【讨论】:

  • 我想尽可能简单。类似于我已经用于其他查询的内容。检查我的更新。
猜你喜欢
  • 1970-01-01
  • 2015-12-14
  • 1970-01-01
  • 2017-01-16
  • 2011-06-19
  • 2012-08-31
  • 2020-12-14
  • 1970-01-01
  • 2023-03-07
相关资源
最近更新 更多