10 个解决方案
#1
这个是用存储过程好解决,也要看你是用什么数据库
sqlserver
insert into table1 values(colvalue1,colvalue2)
select @@identity 这个值插入到第二个表
oracle 插入后取得Sequence再插入到第二个表
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,然后再插入表一和表二
如果只是用jdbc做的话,那就在插入数据之前,先生成id,可以是uuid或者查询数据库sequence,然后再插入表一和表二
#6
写个例子 吧。说的我也知道是怎实现,但是代码不知道怎写
#7
这个看你是什么数据库了,ORACLE的话,两张表的PK共享一个sequence
MSSQL MYSQL的话 你可以select max(id) from table_01; 然后加1,insert into table_02...
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
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再插入到第二个表
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,然后再插入表一和表二
如果只是用jdbc做的话,那就在插入数据之前,先生成id,可以是uuid或者查询数据库sequence,然后再插入表一和表二
#6
写个例子 吧。说的我也知道是怎实现,但是代码不知道怎写
#7
这个看你是什么数据库了,ORACLE的话,两张表的PK共享一个sequence
MSSQL MYSQL的话 你可以select max(id) from table_01; 然后加1,insert into table_02...
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
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
怎么弄的呢,麻烦楼主贴贴出来分享一下吧