【问题标题】:JAVA mysql updating two tables?JAVA mysql更新两个表?
【发布时间】:2015-08-03 17:50:41
【问题描述】:

http://imgur.com/q6ivZSg

我有两个存储有数据的组合框(ploegid 和 trainerid)。不用担心作为参数给出的 ploegID 和 trainerID 是否正确。

我想在 id = 的表 ploeg 上设置 trainer_id 但我也希望更新连接的表(人)!

table persoon 必须是这样的: update persoon set ploeg_id = ?在哪里 ?是参数ploegID

如何在一个更新语句中做到这一点?内连接?

     public void voegTrainerAanPloeg(Integer ploegid, Integer trainerid) throws
  DBException {
  // connectie tot stand brengen (en automatisch sluiten)
  try (Connection conn = ConnectionManager.getConnection();) {
     // preparedStatement opstellen (en automtisch sluiten)
     try (PreparedStatement stmt = conn.
        prepareStatement(
           "update ploeg set trainer_id = ? where id=?");) {

           stmt.setInt(1, trainerid);
           stmt.setInt(2, ploegid);
           // execute voert elke sql-statement uit, executeQuery enkel de select
           stmt.execute();
        } catch (SQLException sqlEx) {
           throw new DBException("SQL-exception in verwijderRekening");
        }
  } catch (SQLException sqlEx) {
     throw new DBException(
        "SQL-exception in verwijderRekening - connection");
  }

 }

【问题讨论】:

    标签: java mysql select javafx


    【解决方案1】:

    当您需要像这样同时执行多个操作时(这在关系数据库中很常见),您应该使用存储过程而不是执行应用程序中的每个语句。如here 所述,您不能在一个语句中更新两个表。

    以下来自mySql docs:

    将数据库密集型操作放入存储过程中可让您为数据库应用程序定义 API。您可以跨多个应用程序和多种编程语言重用此 API。这种技术可以避免重复数据库代码,在您因架构更改而进行更新、调整查询性能或添加新的数据库操作以进行日志记录、安全性等操作时节省时间和精力。

    很遗憾,我不会说您的方法名称所用的语言,但我们假设它被称为“CreateUser()”。通过让您的数据库控制各种更新/插入,而不是通过将其封装在存储过程中来创建用户,您无需担心您的问题 - 如何在一个更新语句中执行多项操作。

    总之,人们通常不会从他们的应用程序代码中使用一个更新语句来更新多个表 - 他们会执行一个存储过程,该存储过程将为他们在数据库上执行多个更新。

    这还有一个好处,即您只需调用一次数据库即可对数据进行任意复杂的操作。

    【讨论】:

    • 我应该提一下,存储过程是大多数关系数据库共有的概念,而不仅仅是 MySql
    • 或者,ORM 工具(例如,EclipseLink 或 Hibernate 等 JPA 实现)可以生成并执行适当的 SQL 来为您执行此类更新。
    • 没有简单的方法吗?像更新个人和 ploeg 集.. ?
    • 查看我在编辑后的答案中链接到的问题。它显示了如何在单个事务中更新两个表,但是不,您不能在一个语句中更新两个表。无论如何,一旦你知道如何,存储过程很容易。它们就像方法一样,但用于数据库。
    • 谢谢你们两个:)
    猜你喜欢
    • 1970-01-01
    • 2014-01-20
    • 2012-03-25
    • 2012-05-26
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多