jdbc怎么得到sql server 2000中表的主键

发布时间: 2010/11/27 15:30:23

我指的是使用jdbc获取刚插入的数据的主键,不通过任何数据库的方式;jdbc提供了这样一个东西Statement.RETURN_GENERATED_KEYS,我就是在使用时出了问题

请问我要怎么修正下面代码才能得到在用jdbc,进行insert时的那条数据的主键啊

public String getPrimaryKey(){  
    Connection conn = null;  
    PreparedStatement ps = null;  
    ResultSet rs = null;  
    Users users = null;  
    String primaryKey = null;  
    try {  
        conn = SinglJdbcUtil.getIntance().getConnection();  
        conn.setAutoCommit(false);  
        String sql = "insert into tmp (columnz) " +  
                "values( ? )" ;  
        ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);  
        ps.setString(1, "XKGS_000016");  
          
        ps.executeUpdate();  
          
        rs = ps.getGeneratedKeys();  
        while(rs.next()){  
            primaryKey = rs.getString(1);  
        }  
    } catch (SQLException e) {  
        e.printStackTrace();  
    }finally{  
        SinglJdbcUtil.getIntance().free(rs, ps, conn);  
    }  
    return primaryKey;  
} 

解决方法 1:

如果你调用jdbc提供的这个方法报错的话,如果还是用纯jdbc我觉得只有这样做了。
首先为了确保获得的主键是对应当前用户的,执行插入操作的时候事务上锁,然后调用@@identity 全局函数,获得最后插入的主键。

插入后返回的主键值这样获取:
INSERT INTO tableName (fieldname ...) values (value ...) SELECT @@IDENTITY AS returnName; 

在sql语句中加入

SELECT @@IDENTITY AS returnName;

用来获取主键的值,

在程序中获取返回值: 

public int sqlexecutereader(string sql){         
    DBopen();         
    SqlCommand myComm = new SqlCommand(sql, Connection);         
    int newID = Convert.ToInt32(myComm.ExecuteScalar());
    DBclose();
    return newID;     
} 

官方微信
官方QQ群
31647020