CREATE TABLE test (
  tid int(11) NOT NULL auto_increment,
  tname varchar(20) default NULL,
  PRIMARY KEY  (tid)
) ;
String sql="insert into test (tname)values('一');";
int flag= conn.updateLog(sql); //一个已经写好的方法 ,方法没有问题
if(flag!=0){
   sql="select @@identity as tid;";
   ResultSet rs= conn.selectLog(sql); //一个已经写好的方法,方法没有问题
   if(rs.next()){
     System.out.println("rs.getInt(1)="+rs.getString(1));
   }else{
      System.out.println("select fail");
  }
}else{
  System.out.println("insert fail");
}
如上代码为什么取不出刚插入的值呢?
select @@identity as tid;这个方法不没有错误的
我用mysql的界面操作过,一切成功
1、插入
insert into test(tname)values('一');
Query OK, 1 row affected
2、查询刚插入的值
select @@identity as tid;
+-----+
| tid |
+-----+
|   6 |
+-----+
1 row in set
这就证明我的语句没错
只是不知道怎么样在java里写
希望高手能帮我解决一下
感激不尽

解决方案 »

  1.   

    @@identity 这个是 sql server里的吧?
    mysql 用last_insert_id() 这个函数就可以。
      

  2.   

    你的tid是autoincrease 的,所以你刚刚插入的记录tid得知当然是最大的了:
    select * from $table order by tid desc limit 0,1;
    查询叨叨的记录不是你刚刚插入的?
      

  3.   

    to:jeff1987
    你这样肯定不行,你确定就你一个数据库联接?
      

  4.   

    @@identity,5.0以后,确实能在mysql当中使用。它是last_insert_id的同义词因此select @@identity
    或者
    select last_insert_id()
    都可以。
      

  5.   

    我曾经看过有文中详细介绍
    select @@identity 和 select last_insert_id()的区别
    那文章说select @@identity 才是最安全的,所以就放弃了select last_insert_id()
    不过,今天又看到一文章说select last_insert_id()没问题
    http://www.gnuedu.org/php-mysql/mysqlc-last_insert_id-kekao.html
    所以结贴了,在此谢谢各位
      

  6.   

    我是这样获去刚插入ID的 /// <summary>
            /// 增加一条数据
            /// </summary>
            public int Add(XQ.Model.TNews model)
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append("insert into TNews(");
                strSql.Append("FNewsTypeId,FNewsTitle,FNewsContent,FNewsTime,FNewsLevel,FNewsUser,FNewsNum,Ext1,Ext2,Ext3,Ext4,Ext5)");
                strSql.Append(" values (");
                strSql.Append("@FNewsTypeId,@FNewsTitle,@FNewsContent,@FNewsTime,@FNewsLevel,@FNewsUser,@FNewsNum,@Ext1,@Ext2,@Ext3,@Ext4,@Ext5)");
                strSql.Append(";select @@IDENTITY");
                SqlParameter[] parameters = {
    new SqlParameter("@FNewsTypeId", SqlDbType.Int,4),
    new SqlParameter("@FNewsTitle", SqlDbType.VarChar,200),
    new SqlParameter("@FNewsContent", SqlDbType.Text),
    new SqlParameter("@FNewsTime", SqlDbType.DateTime),
    new SqlParameter("@FNewsLevel", SqlDbType.Int,4),
    new SqlParameter("@FNewsUser", SqlDbType.VarChar,100),
    new SqlParameter("@FNewsNum", SqlDbType.Int,4),
    new SqlParameter("@Ext1", SqlDbType.Int,4),
    new SqlParameter("@Ext2", SqlDbType.Int,4),
    new SqlParameter("@Ext3", SqlDbType.VarChar,100),
    new SqlParameter("@Ext4", SqlDbType.VarChar,100),
    new SqlParameter("@Ext5", SqlDbType.DateTime)};
                parameters[0].Value = model.FNewsTypeId;
                parameters[1].Value = model.FNewsTitle;
                parameters[2].Value = model.FNewsContent;
                parameters[3].Value = model.FNewsTime;
                parameters[4].Value = model.FNewsLevel;
                parameters[5].Value = model.FNewsUser;
                parameters[6].Value = model.FNewsNum;
                parameters[7].Value = model.Ext1;
                parameters[8].Value = model.Ext2;
                parameters[9].Value = model.Ext3;
                parameters[10].Value = model.Ext4;
                parameters[11].Value = model.Ext5;            object obj = DbHelperSQL.GetSingle(strSql.ToString(), parameters);
                if (obj == null)
                {
                    return 0;
                }
                else
                {
                    return Convert.ToInt32(obj);
                }
            }
    主要就是这一句:strSql.Append(";select @@IDENTITY");然后执行的时候就这样int i = Convert.ToInt32(newsBll.Add(newsMol));i 就是刚插入数据编号