0

我有 3 个表,称为 Drivers、Offenses 和 Points,到目前为止,我正在使用 3 个 sql 字符串在表中插入和更新数据

String command1 = "INSERT INTO Drivers (IDNumber, FirstName, LastName) VALUES" + drivID + FName + LName;
String command2 = "INSERT INTO Offences(IDNumber, SpeedLimit, DriverSpeed, SeatBelt, DrunkenDriving, DriversLicense) VALUES" + drivID + intspeed + intDSpeed + strSeat + strDrunk + strLicense;
String command3 = "INSERT INTO DriverPoints(IDNumber, Points) VALUES" + drivID + intpoints;

每个表通过主键 IDNumber 相互连接

有没有办法代替 3 个 Sql 命令/字符串,我只能有 1 个但仍然能够插入和更新所有 3 个表?

4

3 回答 3

1

写一个Stored Procedure

但是,要使其独立于平台,您应该使用ANSI SQL语法。

根据 BigMike 的评论,您还可以创建一个视图。This将为创建视图提供更多信息。

于 2012-10-22T12:38:51.760 回答
1

粗略地说,您的查询应该如下所示:

SELECT d.IDNumber, d.FirstName, d.LastName, o.SpeedLimit, o.DriverSpeed, o.SeatBelt, o.DrunkenDriving, o.DriversLicense, p.Points 
  FROM Drivers d
JOIN Offences o on (d.IDNumber = o.IDNumber)
JOIN DriverPoints p on (d.IDNumber = p.IDNumber)
WHERE (...) -- Whathever where condition you like

这将读取所有内容。

对于更新,您必须执行 3 个不同的更新语句或使用存储过程或视图,但这实际上取决于您使用的数据库。

编辑:对于插入,我建议您使用 PreparedStatements

String command1 = "INSERT INTO Drivers (IDNumber, FirstName, LastName) VALUES (?, ?, ?)";
PreparedStatement ps = connection.prepareStatement(command1);
ps.setInteger(1, drivID );
ps.setString(2, FName );
ps.setString(3, LName );
ps.execute();
于 2012-10-22T12:44:39.620 回答
0

您不能用一个语句插入多个表,所以简短的回答是否定的。您将需要三个语句来插入三个表。

此外,您的语法需要更像:
String command1 = "INSERT INTO Drivers (IDNumber, FirstName, LastName) VALUES (" + drivID + ", " + FName + ", " + LName + ")";

注意逗号和大括号的添加。

此外,如果您的意思是这样,您可以将所有语句放入一个查询中。

于 2012-10-22T12:51:18.447 回答