我想往数据库中插入一条记录以后马上就能获得它在数据库中的ID号(自动增长),可以么?

时间:2021-12-17 23:46:14
我想往数据库中插入一条记录以后马上就能获得它在数据库
中的ID号(自动增长),是在MS_SQL SERVER,应该怎么办?JSP有函数可以获得么?

11 个解决方案

#1


String sql = "INSERT TableName ( x,x,x... ) VALUES(?,?,?,?,?,?) SELECT SCOPE_IDENTITY() AS 'obj_id'";

pstmt = con.prepareStatement(sql);
pstmt.setXXX()
 .
 .
 .
 .
ResultSet rs = pstmt.executeQuery();

#2


rs.next();
int id = rs.getInt("obj_id")
即你的id

#3


你查询倒着排序
取第一条记录就应该是你要的

#4


rs.refreshRow();
rs.getInt("id");

#5


如果不止一个人在输入数据,你的数据并不一定是最后一条?怎么办?
应该插入一个唯一的数作为主键。
或者先对表锁定,待插入完成后再解锁

#6


我先试试,听同学说PHP里有一个函数可以对MY SQL插入后立即获得这个插入的ID,JSP中有么?

#7


因为是在插入以后马上就检索
应该不会超过一秒
所以在并发不是很多的情况下
应该不会出错

#8


真ft.
我回复了这么多次,都失败!!!

呵呵,不知道你们还在争什么,
String sql = "INSERT TableName (xxx) VALUES(???) SELECT SCOPE_IDENTITY() AS 'obj_id'";
这句话就是插入完数据然后取它的自增id .
有什么问题吗?

#9


收藏
还有这好东西呢
以前都没用过:)

#10


我的记录集怎么不能返回?
   //将记录写入数据库
  代码如下:
  strSql="INSERT INTO t_bbscontent(btitle,bmasterid,bbsid,content,provide_time,"+
                     "reply_time,click_time,emote,type,chenji,breplytime) "+
 "VALUES('"+strTitle+"','"+strUserid+"','"+ibbsId+"','"+strContent+"','"+
         strDate+"',"+iReplytimes+","+iClicktimes+",'"+strEmote+"',"+
 iType+","+iChenji+",'"+strDate+"') SELECT SCOPE_IDENTITY() AS obj_id";
  
  //--------------
  Connection conn=null;
  Statement stmt=null;
  ResultSet rsInsertId=null;
  String url="jdbc:odbc:BBsnet";
  int iInsertId=0;
  
  try{
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn=DriverManager.getConnection(url);
stmt=conn.createStatement();
rsInsertId=stmt.executeQuery(strSql);
  //获得刚输入的记录的编号:
  
    if(rsInsertId.next())
      iInsertId=rsInsertId.getInt("obj_id"); //--
    rsInsertId.close();
  }
  catch(ClassNotFoundException cnfex)
  {
    cnfex.printStackTrace();
  }
  catch(SQLException sqlex)
  {
    sqlex.printStackTrace();
  }
  //--------------

我看了数据库,发现记录已经插入,但是iInsertId不能返回?这是为什么?

#11


up

#1


String sql = "INSERT TableName ( x,x,x... ) VALUES(?,?,?,?,?,?) SELECT SCOPE_IDENTITY() AS 'obj_id'";

pstmt = con.prepareStatement(sql);
pstmt.setXXX()
 .
 .
 .
 .
ResultSet rs = pstmt.executeQuery();

#2


rs.next();
int id = rs.getInt("obj_id")
即你的id

#3


你查询倒着排序
取第一条记录就应该是你要的

#4


rs.refreshRow();
rs.getInt("id");

#5


如果不止一个人在输入数据,你的数据并不一定是最后一条?怎么办?
应该插入一个唯一的数作为主键。
或者先对表锁定,待插入完成后再解锁

#6


我先试试,听同学说PHP里有一个函数可以对MY SQL插入后立即获得这个插入的ID,JSP中有么?

#7


因为是在插入以后马上就检索
应该不会超过一秒
所以在并发不是很多的情况下
应该不会出错

#8


真ft.
我回复了这么多次,都失败!!!

呵呵,不知道你们还在争什么,
String sql = "INSERT TableName (xxx) VALUES(???) SELECT SCOPE_IDENTITY() AS 'obj_id'";
这句话就是插入完数据然后取它的自增id .
有什么问题吗?

#9


收藏
还有这好东西呢
以前都没用过:)

#10


我的记录集怎么不能返回?
   //将记录写入数据库
  代码如下:
  strSql="INSERT INTO t_bbscontent(btitle,bmasterid,bbsid,content,provide_time,"+
                     "reply_time,click_time,emote,type,chenji,breplytime) "+
 "VALUES('"+strTitle+"','"+strUserid+"','"+ibbsId+"','"+strContent+"','"+
         strDate+"',"+iReplytimes+","+iClicktimes+",'"+strEmote+"',"+
 iType+","+iChenji+",'"+strDate+"') SELECT SCOPE_IDENTITY() AS obj_id";
  
  //--------------
  Connection conn=null;
  Statement stmt=null;
  ResultSet rsInsertId=null;
  String url="jdbc:odbc:BBsnet";
  int iInsertId=0;
  
  try{
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn=DriverManager.getConnection(url);
stmt=conn.createStatement();
rsInsertId=stmt.executeQuery(strSql);
  //获得刚输入的记录的编号:
  
    if(rsInsertId.next())
      iInsertId=rsInsertId.getInt("obj_id"); //--
    rsInsertId.close();
  }
  catch(ClassNotFoundException cnfex)
  {
    cnfex.printStackTrace();
  }
  catch(SQLException sqlex)
  {
    sqlex.printStackTrace();
  }
  //--------------

我看了数据库,发现记录已经插入,但是iInsertId不能返回?这是为什么?

#11


up