现在我碰到这么一个问题,  
我想让mysql的一个表A的主键自动增加也就是auto_increment,  
目标:  
现在我同时增加三张表A,B、C各一条记录,三个insert操作做成一个事务并且主键都是A的主键。  
这就要求在A新增的时候(此时没有commit)将主键返回,以便做B、C的操作  
建立一个表CREATE  TABLE  `testinc`  (  
   `id`  int(11)  NOT  NULL  auto_increment,  
   `name`  varchar(20)  character  set  utf8  default  NULL,  
 
)      
问题代码如下:  
           TestincVo testincVo = new TestincVo();
           testincVo.setName("bbb");
               getSqlMapClientTemplate().insert(  
                                           "testinc",  testincVo);  
                         
               TestincVo  tempVo  =  (TestincVo)getSqlMapClientTemplate().queryForObject("getTestincVo",  testincVo);  
                       return  tempVo.getId();  
我想先新增后将id返回此时返回的tempVo是空值。  
 
但是如果我用纯的jdbc来写就没有问题:  
public  void  test_insertOrUpdate()  throws  Exception  {  
                       Connection  conn  =  null  ;  
                       try  {  
                                   conn  =  JdbcConnectionPool.getConnection();  
                                   if  (conn  ==  null)  {  
 
                                     
                                               throw  new  Exception("can  not  get  Connection");  
                                   }  
                                   conn.setAutoCommit(false);  
                                   Statement  st  =  conn.createStatement();  
                                   st.executeUpdate("insert  into  testinc  (name)  values  ('bbb')");  
                                   PreparedStatement  ps  =  conn.prepareStatement("select  *  from  testinc");  
                                   ResultSet  rs  =  ps.executeQuery();  
                                   while(rs.next()){  
                                   String  id  =  rs.getString("id");  
                                   System.out.println("id  is  ::::::::::::"  +  id);  
                                   }  
                                     
                                     
                       }  catch  (SQLException  e)  {  
                                   //  TODO  Auto-generated  catch  block  
                                   e.printStackTrace();  
                       }  catch  (Exception  e)  {  
                                   //  TODO  Auto-generated  catch  block  
                                   e.printStackTrace();  
                       }finally{  
                                   try  {  
                                               conn.close();  
                                   }  catch  (SQLException  e)  {  
                                               //  TODO  Auto-generated  catch  block  
                                               e.printStackTrace();  
                                   }                                      
                       }  
           } 
           此时可以打印出相关的id值,但是在spring架构下的ibatis就返回空指针,请大家帮忙看看,马上就要提版本,我被这个问题困扰了半天
           ,还是一头雾水,郁闷啊

解决方案 »

  1.   

    把你的getTestincVo查询贴出来看看.
    它里面的查询条件不应该包括主键!
      

  2.   

    本身就是不包括主键啊!我怀疑是相关的spring或者ibatis的问题
      

  3.   

    这是一个例子,你参考一下:<insert id="insertPerson" parameterClass="person">
      INSERT INTO PERSON (firstname, lastname,birthdate, weightkg, heightm)
          VALUES (#firstName#, #lastName#,#birthDate:TIMESTAMP#, 
    #weightInKilograms#, #heightInMeters#)
      <selectKey resultClass="int" keyProperty="id" >
        SELECT LAST_INSERT_ID()
      </selectKey>
    </insert>