我现在有两个表,表talkview:
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| titlename | varchar(64) | NO | | NULL | |
| postname | varchar(64) | NO | | NULL | |
| counts | varchar(11) | YES | | 0 | |
+-----------+-------------+------+-----+---------+----------------+
和表maintalk:
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| title | varchar(64) | NO | | NULL | |
| text | varchar(64) | NO | | NULL | |
| username | varchar(64) | NO | | NULL | |
| talk_id | int(10) | YES | MUL | NULL | |
+----------+-------------+------+-----+---------+----------------+
现在我想将数据一起插入这些表中,并且“ talk_id”将根据表talkview中的“ id”自动更改。
在Java中,我尝试使用此代码,但'talk_id'不变:
public void posttalk(String title, String con, String name){
connection = DBConection.getConnection();
Statement stmt = null;
String SQL_1 = "insert into talkview(titlename,postname) values(? , ?)";
String SQL_2 = "insert into maintalk(title,text,username) values(? , ? , ?)";
try {
connection.setAutoCommit(false);
PreparedStatement preparedStatement = connection.prepareStatement(SQL_1);
preparedStatement.setString(1, title);
preparedStatement.setString(2, name);
Integer a = preparedStatement.executeUpdate();
preparedStatement = connection.prepareStatement(SQL_2);
preparedStatement.setString(1, title);
preparedStatement.setString(2, name);
preparedStatement.setString(3, con);
Integer b = preparedStatement.executeUpdate();
connection.commit();
connection.setAutoCommit(true);
} catch (SQLException sqle) {
try {
connection.rollback();
stmt.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
sqle.printStackTrace();
} finally {
DBConection.closeConnection(connection);
}
}
最佳答案
在第一个表talkview
中插入一些数据之后。您可以使用最大的主键来检索插入的最后一条记录,因为您的PK是自动递增的,然后将其放在talk_id
表的maintalk
列中。您可以在下面的代码中进行检索。
String SQL_1 = "insert into talkview(titlename,postname) values(? , ?)";
String SQL_2 = "insert into maintalk(title,text,username,talk_id) values(? , ? , ?, ?)";
String SQL_3 = "SELECT id FROM talkview order by id DESC LIMIT 1;";
try {
connection.setAutoCommit(false);
PreparedStatement preparedStatement = connection.prepareStatement(SQL_1);
preparedStatement.setString(1, title);
preparedStatement.setString(2, name);
Integer a = preparedStatement.executeUpdate();
// This is the query to retrieve the last ID you insert in talkveiw table
PreparedStatement preparedStatement = connection.prepareStatement(SQL_3);
ResultSet result = preparedStatement.executeQuery();
Integer id = 0; // This will be the id you will add on your talk_id
if(result.next()) {
id = result.getInt(1);
}
preparedStatement = connection.prepareStatement(SQL_2);
preparedStatement.setString(1, title);
preparedStatement.setString(2, name);
preparedStatement.setString(3, con);
preparedStatement.setInt(4, id); // you will insert it here the 'id'
Integer b = preparedStatement.executeUpdate();
connection.commit();
connection.setAutoCommit(true);