可以写触发器trriger,在更新主表的主键前将从表的键值改掉再更新主表的键值。
举个例子。
CREATE OR REPLACE TRIGGER TRG_触发器名 ,创建触发器。BEFORE INSERT OR UPDATE ,意思是在插入或更新 *** 作之前。ON 主表名,为主表创建。
REFERENCING OLD AS OLDROW NEW AS NEWROW ,定义数据行。FOR EACH ROW ,BEGIN。IF INSERTING THEN,向主表插入时做的 *** 作。ELSE,更新主表时做的 *** 作。Update 从表的 *** 作写在这里就可以。END IFEND
Oracle的啊 给你个例子,你自己改下表还有insert语句public int save(User user) throws SQLException {// 插入数据
int id = 0// 返回用户ID
String sql = "insert into regist_1 values(regist_1seq.nextval,?,?,?,?,?,?)"
String sql2 = "select regist_1seq.currval from dual"
//sql2就是获取序列自增的值,你把regist_1seq换成你自己的
Connection con = ConnectionUtils.openConnection()
PreparedStatement stmt = con.prepareStatement(sql)
stmt.setString(1, user.getUsername())
stmt.setString(2, user.getName())
stmt.setString(3, user.getPassword())
stmt.setInt(4, user.getAge())
stmt.setString(5, user.getSex())
stmt.setString(6, user.getTel())
stmt.executeUpdate()
stmt = con.prepareStatement(sql2)
ResultSet rs = stmt.executeQuery()
if (rs.next()) {
id = rs.getInt(1)
System.out.println("save id:" + id + "...")
}
ConnectionUtils.closeResult(rs)
ConnectionUtils.closeStatement(stmt)
ConnectionUtils.closeConnection(con)
return id
}
不懂可以追问.
你可以先用sql语句查询出数据库的结构,就可以知道那个字段是主键。如果你插入的数据不包含主键,那么主键就是由数据库生成的,比如是自增序列或uuid,这时候需要从数据库中读取出来,你可以用刚才插入的数据作为条件查询,同时选择只取一条记录,当然这种方式也不是很可靠,尤其是高并发下;如果插入数据包含主键,那么返回值就在你插入数据的对应位置。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)