java 向两个表 插入数据 并且第二个表取得第一个表的ID

时间:2021-08-31 13:58:51
麻烦写个完整的例子:java 向两个表 插入数据  并且第二个表取得第一个表的ID,就是新增的时候同学向两个表插入数据,插入第二个表时,第二个表的一个字段是取第一个表的自动增长的ID。

10 个解决方案

#1


这个是用存储过程好解决,也要看你是用什么数据库
sqlserver
insert into table1 values(colvalue1,colvalue2)
select @@identity 这个值插入到第二个表

oracle 插入后取得Sequence再插入到第二个表

#2


用hibernate的话,添加之后会在该对象中自动set相应id,如果sql的话就得synchronized方法,方法中先添加数据,然后获取最大id值,用这个值添加到第二个表。

#3


如果不用框架的,也不用存储过程的应该怎做呢?麻烦写一下代码

#4


1楼的便是,无论SqlServer还是MySQL,第一张表INSERT之后,select @@identity一下,获得前一张表刚刚生成的ID,用于下一次INSERT操作

#5


如果不用框架的,也不用存储过程的应该怎做呢

如果只是用jdbc做的话,那就在插入数据之前,先生成id,可以是uuid或者查询数据库sequence,然后再插入表一和表二

#6


写个例子 吧。说的我也知道是怎实现,但是代码不知道怎写

#7


这个看你是什么数据库了,ORACLE的话,两张表的PK共享一个sequence

MSSQL MYSQL的话 你可以select max(id) from table_01; 然后加1,insert into table_02...

#8


我是这样写的,但是又问题
String sql = "INSERT INTO person ( name, pass ) VALUES ( 'balabala', '123456' )"; 

// 执行SQL语句 

stmt = conn.createStatement(); 
// stmt=conn.prepareStatement(sql);

stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS); 
ResultSet rs = stmt.getGeneratedKeys(); 
if (rs.next()) { 
int id = rs.getInt(1); 
System.out.println ("生成记录的key为 :" + id); 

System.out.println("插入数据成功"); 
这样就可以没问题,但是我改成下面就出现问题了
String sql = "insert into person (name, pass) values (?, ?)";
conn = DB.getConnection();
pstmt = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
ResultSet rs = pstmt.getGeneratedKeys(); 
pstmt.setString(1, person.getName());
pstmt.setString(2, person.getPass());
pstmt.executeUpdate();
4月23日 16:12
编译后出现问题:Exception in thread "main" java.lang.AbstractMethodError: com.microsoft.jdbc.sqlserver.SQLServerConnection.prepareStatement(Ljava/lang/String;I)Ljava/sql/PreparedStatement

#9


自己解决了!!

#10


怎么弄的呢,麻烦楼主贴贴出来分享一下吧

#1


这个是用存储过程好解决,也要看你是用什么数据库
sqlserver
insert into table1 values(colvalue1,colvalue2)
select @@identity 这个值插入到第二个表

oracle 插入后取得Sequence再插入到第二个表

#2


用hibernate的话,添加之后会在该对象中自动set相应id,如果sql的话就得synchronized方法,方法中先添加数据,然后获取最大id值,用这个值添加到第二个表。

#3


如果不用框架的,也不用存储过程的应该怎做呢?麻烦写一下代码

#4


1楼的便是,无论SqlServer还是MySQL,第一张表INSERT之后,select @@identity一下,获得前一张表刚刚生成的ID,用于下一次INSERT操作

#5


如果不用框架的,也不用存储过程的应该怎做呢

如果只是用jdbc做的话,那就在插入数据之前,先生成id,可以是uuid或者查询数据库sequence,然后再插入表一和表二

#6


写个例子 吧。说的我也知道是怎实现,但是代码不知道怎写

#7


这个看你是什么数据库了,ORACLE的话,两张表的PK共享一个sequence

MSSQL MYSQL的话 你可以select max(id) from table_01; 然后加1,insert into table_02...

#8


我是这样写的,但是又问题
String sql = "INSERT INTO person ( name, pass ) VALUES ( 'balabala', '123456' )"; 

// 执行SQL语句 

stmt = conn.createStatement(); 
// stmt=conn.prepareStatement(sql);

stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS); 
ResultSet rs = stmt.getGeneratedKeys(); 
if (rs.next()) { 
int id = rs.getInt(1); 
System.out.println ("生成记录的key为 :" + id); 

System.out.println("插入数据成功"); 
这样就可以没问题,但是我改成下面就出现问题了
String sql = "insert into person (name, pass) values (?, ?)";
conn = DB.getConnection();
pstmt = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
ResultSet rs = pstmt.getGeneratedKeys(); 
pstmt.setString(1, person.getName());
pstmt.setString(2, person.getPass());
pstmt.executeUpdate();
4月23日 16:12
编译后出现问题:Exception in thread "main" java.lang.AbstractMethodError: com.microsoft.jdbc.sqlserver.SQLServerConnection.prepareStatement(Ljava/lang/String;I)Ljava/sql/PreparedStatement

#9


自己解决了!!

#10


怎么弄的呢,麻烦楼主贴贴出来分享一下吧