A表
B表A是主表,B表中某字段是外键关联到A表的id字段现在我要向两表同时插入记录用什么方法?
先添加A表,再从A表取出新添加记录的id,然后再向B表添加记录
如果用这种方法添加,假如B表添加失败,就会导至两表数据不一至了。

解决方案 »

  1.   

    知道啊,但好像用不了事务 因为B表添加时要引用A表的id字段
      

  2.   

    A表必须添加进去才自动产生id啊,如果A表没有添加进去B表无法取得id,那就没法添加
      

  3.   

    你想问原理还是想问怎么做?做就是如下方式或是级联什么的。
    ---------------------------------
    事务
     嵌套事务
      主区间
     嵌套事务
    附属区间
    事务
    -----------------------------------
    理论实现方式似乎有几十种,都忘记了。但是就记住一个!insert 主表数据
    insert 依赖主表数据 将依赖字段先置为null然后在关联数据。
      

  4.   

    Connection conn = null; 
    //ResultSet rs = null; 
    PreparedStatement pstmt = null; try{ 
    conn = DB.getConn(); 
    DB.setAutoCommit(false, conn); String sql = "insert into pager(name) values(?)"; 
    pstmt = DB.prepareStmt(conn, sql); 
    pstmt.setString(1, pager.getName()); 
    pstmt.execute(); sql = "insert into Provider(pagerId,userId) values(?,?)"; 
    pstmt = DB.prepareStmt(conn, sql); 
    pstmt.setInt(1, "上面插入记录的id怎么取得" )
    pstmt.setInt(2, 2)
    pstmt.execute(); DB.commit(conn); 
    DB.setAutoCommit(true, conn);
      

  5.   

     使用的什么数据库?mysql,还是sql server?
      

  6.   

    在mysql 中是这样的:例如你刚进行插入语句:
    String sql = "insert into table values(...)";
    objConn.executeUpdate(sql);下面是取刚插入数据库的ID号
    long ret_id=0;
    ResultSet rs = objConn.executeQuery("select LAST_INSERT_ID()");
    if (rs.next())ret_id = rs.getLong(1); 
      

  7.   


    string sqlSelectNewUserId = "SELECT @@Identity"; // OR "SELECT MAX([UserId]) FROM [User]";  在sql server中,好像是使用@@Identity来获取最新插入的ID,或者后面的方法!
      

  8.   

    这样INSERT 到视图中的数据 自然会查到两张表中   如果其中哪一张表 插入出错  系统事务 是整体混回滚的 跟插一个表一样
      

  9.   

    就是用事物啊 上面的已经说清楚了.
    先插A
    然后取刚插进去的记录拿到ID
    然后再插B
    将以上3部都作为一个事物.同样也可以在数据库层做这些事情.
      

  10.   

    cascade="update-save"事务的控制spring可以控制啊
      

  11.   

    看你用什么框架连接数据库了,如果是jdbc就得自己写了,先插主表吧!