jdbc中的外键问题

3 java mysql jdbc

我有两个功能:

public void Populate_flights()

public void Populate_reservations()
Run Code Online (Sandbox Code Playgroud)

航班和预订是两个表。其中一个条目即航班号。在预订表中。所以它是一个外键。

现在,我需要通过 jbdc 填充数据库。所以我使用:在 public void Populate_reservations() 函数中:

Statement s = conn.createStatement();

s.executeUpdate("DELETE FROM reservations");
Run Code Online (Sandbox Code Playgroud)

public void Populate_flights() -:

 Statement s = conn.createStatement();

 s.executeUpdate("DELETE FROM flights");
Run Code Online (Sandbox Code Playgroud)

所以这样,在填充数据库之前,我之前的所有条目都被删除了,没有多余的数据。由于预订表中有一个外键,我不能先从航班中删除条目。我必须先从预订中删除条目。但是预订功能是在飞行功能之后调用的。所以我将如何使它删除所有条目。

所以它应该是这样的:

Statement s = conn.createStatement();

  s.execute("SET FOREIGN_KEY_CHECKS=0");

     s.executeUpdate("DELETE FROM flights");
 s.execute("SET FOREIGN_KEY_CHECKS=1");
Run Code Online (Sandbox Code Playgroud)

Ale*_*min 8

您可以在 MySQL 中临时禁用外键检查以执行如果启用这些检查将会失败的操作:

// Disable foreign keys check
Statement stmt = conn.createStatement();
stmt.execute("SET FOREIGN_KEY_CHECKS=0");
stmt.close();


// Do your stuff

// Enable foreign keys check
Statement stmt = conn.createStatement();
stmt.execute("SET FOREIGN_KEY_CHECKS=1");
stmt.close();
Run Code Online (Sandbox Code Playgroud)

请注意,这是每个连接的设置,因此您必须使用相同的conn对象完成所有工作。

  • @shilps 是否有充分的理由按照您描述的顺序调用这些函数?似乎先删除预订(如果可以的话)也可以解决您的问题。 (2认同)