大家帮我看看:select @@IDENTITY 取不到刚插入的ID,先谢谢啦代码如下:        Connection conn = connPool.getConnection();
        try {
            String sql = "insert into yy_buyGood (companyBID,buyDate,realDate,flag)" +
                    " values(?,?,?,?)";
            PreparedStatement stmt = conn.prepareStatement(sql);
            stmt.setInt(1,companyBID);
            stmt.setDate(2,buyDate);
            stmt.setTimestamp(3,realDate);
            stmt.setString(4,flag);
            stmt.executeUpdate();
            sql = "select @@IDENTITY as 'justID'";
            ResultSet rs = stmt.executeQuery(sql);
            if(rs.next()){
                buyGoodID = rs.getInt("justID");                System.out.print(">>>>>>"+buyGoodID);//调试,显示为0,奇怪啊!
            }
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();  
        }奇怪,一点错误也不报,insert也成功了,可就是取不到ID,一直是“0”,郁闷死了。

解决方案 »

  1.   

    数据有没有提交?
    (@@IDENTITY 返回值总是最近的通过代码插入了数据的表的COUNTER域。)
     
      

  2.   

    提交啦,数据库肯定是插入成功了。代码应该是这样:       Connection conn = connPool.getConnection();
            try {
               String sql = "insert into yy_buyGood (companyBID,buyDate,realDate,flag)"+
                            " values(?,?,?,?)";
                PreparedStatement stmt = conn.prepareStatement(sql);
                stmt.setInt(1,companyBID);
                stmt.setDate(2,buyDate);
                stmt.setTimestamp(3,realDate);
                stmt.setString(4,flag);
                stmt.executeUpdate();
                sql = "select @@IDENTITY as 'justID'";
                stmt = conn.prepareStatement(sql);
                ResultSet rs = stmt.executeQuery();
                if(rs.next()){
                    buyGoodID = rs.getInt("justID");                System.out.print(">>>>>>"+buyGoodID);//调试,显示为0,奇怪啊!
                }
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace(); 
            }
      

  3.   

    在SQL查询分析器里运行insert和select @@IDENTITY 就没问题,郁闷死了。
      

  4.   

    struts里面保存好对象之后直接用对象的get方法就可以拿到最新的ID了
      

  5.   

    试试放到一起执行,即
    String sql = "insert into yy_buyGood (companyBID,buyDate,realDate,flag)" +
                        " values(?,?,?,?)\nselect @@IDENTITY as 'justID'";
    stmt.execute();
    ResultSet rs = stmt.getResultSet();或者直接使用stmt.getGeneratedKeys()得到插入的ID
      

  6.   

    BTW:如果使用select,使用SCOPE_IDENTITY() 可能更好些
      

  7.   

    一起执行.Statement.addBatch(String sql)
      

  8.   

    建议使用SCOPE_IDENTITY(),不过@@identity得不到确实很奇怪
      

  9.   

    你在最开始的时间设置自动提交为flase,然后在查询之前提交一次
    conn.setAutoCommit(false);
    conn.commit()
      

  10.   

    用这个IDENT_CURRENT('table_name')就好了,谢谢大家啦。