从多个表中检索信息

时间:2012-10-22 12:35:24

标签: java sql netbeans

我有3个表,名为Drivers,Offenses and Points and Sofar我使用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个表?

3 个答案:

答案 0 :(得分:1)

写一个Stored Procedure

但是,为了使其与平台无关,您应该使用ANSI SQL语法。

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

答案 1 :(得分: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();

答案 2 :(得分:0)

您不能使用一个语句插入多个表,因此简短的答案是否定的。您需要将三个语句插入三个表中。

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

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

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