我用的是MSSQL数据库表的ID是自动增长的类型是int在插入数据时我不去特意指定ID多少(貌似指定了就非法)后来需要在插入一条数据的同时得到该条数据在表中的ID请问如何得到?用JAVA代码应该如何取出?

解决方案 »

  1.   

    这个我刚问过,哎,用HBnet倒可以搞定,如果不方便用的话,只好用插入的数据查了
      

  2.   

    String sql=select * from table where name="";
    int id=ResutSet.executeQuery(sql);
      

  3.   

    http://www.quandi.cn/WebForm1.aspx?quandi_id=asdex1999
      

  4.   

    String sql=select * from table where name="";
    int id=ResutSet.executeQuery(sql);
    这个方法已经试过了但是如果是重名的怎么办??而且返回的数字是查询结果的条数并不是ID数吧
      

  5.   

    而且最重要的是ResutSet.executeQuery(sql);根本就没有这个方法我试过类似的思路依然是不行的当ID是唯一,而名字不唯一的时候如何获得其ID呢?
      

  6.   

    Insert后,可以用这个系统变量得到:@@IDENTITYYou can try:INSERT INTO [table]( [column] ) VALUES ( "value" )
    PRINT( @@IDENTITY )
      

  7.   

    那么我在JAVA应该怎么写呢INSERT INTO [table]( [column] ) VALUES ( "value" )
    PRINT( @@IDENTITY )这个东西我明白但是却不知道在JAVA中怎么取出@@IDENTITY
      

  8.   

    String strSql = "INSERT INTO [table]( [column] ) VALUES ( "value" );SELECT @@IDENTITY AS 'result'";
    int intResult = (int)ResultSset.ExecuteScalar( strSql );
      

  9.   

    Java我不是很懂。哈。不过既然你是用SQL server那就是一样D。
    在SQL server中,SQL语句可以用分号分开即可。Oracle则是不行。下面的code可以参考下:
    String strSql = "INSERT INTO [table]( [column] ) VALUES ( 'value' );SELECT @@IDENTITY AS 'result'";
    int intResult = (int)ResultSset.ExecuteScalar( strSql );
      

  10.   

    最好不要用自增长的ID,要么自己增长,要么用uuid我推荐uuid,任何环境下都没有问题,包括集群
      

  11.   

    String strSql = "INSERT INTO [table]( [column] ) VALUES ( "value" );SELECT @@IDENTITY AS 'result'";
    int intResult = (int)ResultSset.ExecuteScalar( strSql );
    -------------------------------------------------------------------------ResultSset这个类并不是系统自己带的吧----------------------------------------------------------------------------
    最好不要用自增长的ID,要么自己增长,要么用uuid我推荐uuid,任何环境下都没有问题,包括集群-----------------------------------------------------------------------------uuid是什么呢??数据库方面有许多东西是我并不知道的
      

  12.   

    ID不能认为指定只允许数据库自己生成目前我只能时候插入后再查询一次并且按照降序排列才能保证获得刚插入的数据的ID
      

  13.   

    用存储过程,添加成功以后回产生一个ID
    CREATE   PROCEDURE TT_Add
    (
    @变量
    )
    ASINSERT INTO 表名
    (

    )
    VALUES
    (   


    )SELECT
        @@Identity AS EntryLogIDGO
      

  14.   

    插入后再查询一次获得的可不一定是正确的ID,如果两个用户同时插入了数据,顺序是:
    user1: do insert
    user2: do insert
    user1: do query
    user2: do queryuser1得到的id是user2的最好的办法是不要用自增主键,自己管理增长,但是也比较麻烦
    或者,用uuid做主键,每次用UUID.randomUUID().toString()获得唯一的主键,这种方式不但保证无重复,还保证集群环境下无冲突
      

  15.   

    oracle 下还有sequence可以用.
      

  16.   

    ID不能认为指定只允许数据库自己生成目前我只能时候插入后再查询一次并且按照降序排列才能保证获得刚插入的数据的ID
    ----------------------------------------------------------
    这样有个问题,就是并发操作的时候,有可能产生错误.以前也遇到过这中情况.插入一条数据的时候,要修改另外一个表,而这个表的外键是第一个表的主键. 最后使用出发器解决的.
      

  17.   

    是刚插如的吗?
    如果刚插入的可以用
    sql = "select max(id列名) from 表名"
    RequestSet rs = stmt.executeQuery(sql);
    while(rs.next()){
      System.out.println(rs.getInt(1));//这里是取得rs返回结果集的第一列的值.
    }
    是个苯方法.
      

  18.   

    SQL server 里的 @@IDENTITY 是线程安全的。
    不会出现有:
    --------------插入后再查询一次获得的可不一定是正确的ID,如果两个用户同时插入了数据,顺序是:
    user1: do insert
    user2: do insert
    user1: do query
    user2: do queryuser1得到的id是user2的
    --------------这样的情况。可以查SQL server的帮助
      

  19.   

    简单,你在用JAVA进行插入的时候,在代码前面定义一个用来接受的字符串数组,每插入一条成功后,就select id出来,然后放到字符串数组里,等下要的时候,就去取就是了。Do you know?
      

  20.   

    这个问题困扰了很久,想了很多办法,可还是没搞定。
    下次得去看一下UUID了。
      

  21.   

    用存储过程,添加成功以后回产生一个ID
    CREATE   PROCEDURE TT_Add
    (
    @变量
    )
    ASINSERT INTO 表名
    ()
    VALUES
    (   
    )SELECT
        @@Identity AS EntryLogIDGO---------------------------------------------------这个是我看好的解决方法 但是存储过程目前我是不会写的还得回去看书了11月10日结贴吧