sqlserver可以用:insert into book(xxx,xxx) values(?,?) select @@identitymysql我查了说是用,SELECT LAST_INSERT_ID(),那为什么我
insert into book(xxx,xxx) values(?,?)SELECTLAST_INSERT_ID() 报错呢?要是分2部那怎么得到SELECTLAST_INSERT_ID()的值呢?代码如下:
//添加图书
public boolean badd(Book book, bookdownload bd) {
boolean flag=false;
conn=new ConnectDB().getConn();
String sql="insert into book(book_name,book_value,book_author,book_photo,book_unit,book_time,book_bigclass,book_smallclass,book_abstract) values(?,?,?,?,?,?,?,?,?)";
try {
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, book.getBook_name());
pstmt.setFloat(2, book.getBook_value());
pstmt.setString(3, book.getBook_author());
pstmt.setString(4, book.getBook_photo());
pstmt.setString(5, book.getBook_unit());
pstmt.setString(6, book.getBook_time());
pstmt.setInt(7, book.getBook_bigclass());
pstmt.setInt(8, book.getBook_smallclass());
pstmt.setString(9, book.getBook_abstract());
int i=pstmt.executeUpdate();
if(i>0){
String sql1="SELECT LAST_INSERT_ID()";
pstmt=conn.prepareStatement(sql1);
rs=pstmt.executeQuery();
if(rs.next()){
String sql2="insert into bookdownload(book_id,filsize,address,port) VALUES("+ SELECT LAST_INSERT_ID()找出来的值 +",20,?,1)";
pstmt=conn.prepareStatement(sql2);
//pstmt.setString(1, bd.getFilsize());
pstmt.setString(1, bd.getAddress());
int count=pstmt.executeUpdate();
if(count>0){
return true;
}
}
}
} catch (SQLException e) {

e.printStackTrace();
}finally{
try {
if( pstmt != null )
pstmt.close();
if( conn != null )
conn.close();
} catch (SQLException e) {

e.printStackTrace();
}
}
return flag;
}
怎么才能得到SELECTLAST_INSERT_ID()的值

解决方案 »

  1.   

    首先要了解SELECTLAST_INSERT_ID的用法,SELECTLAST_INSERT_ID只对auto increment的字段惯用。用来当然更新或者插入操作的 最后自动增长id。对于不同连接,取到的id是不一样的。比如有两个用户操作数据库USER_Table首先 用户A 对table的操作:mysql> insert into USER_Table (name) values(userA');
    Query OK, 1 row affected (0.00 sec)mysql> insert into USER_Table (name) values('userB');
    Query OK, 1 row affected (0.00 sec)mysql> select last_insert_id();
    +------------------+
    | last_insert_id() |
    +------------------+
    |                2 |
    +------------------+
    1 row in set (0.00 sec)然后在另一终端,用户B 的操作:
    mysql> insert into USER_Table (name) values('peter');
    Query OK, 1 row affected (0.00 sec)mysql> select last_insert_id();
    +------------------+
    | last_insert_id() |
    +------------------+
    |                3 |
    +------------------+
    1 row in set (0.00 sec)此时,用户A 再一次执行
    mysql> select last_insert_id();
    +------------------+
    | last_insert_id() |
    +------------------+
    |                2 | 
    +------------------+
    1 row in set (0.00 sec)
    用户A取得到的last_insert_id 还是2。可见last_insert_id只能取得针对当前操作的id而且只有在执行更新操作之后,才可以使用last_insert_id()来取id,不知道我说的明白么
      

  2.   

    SELECT LAST_INSERT_ID()?没用过...设置id自增就可以了哇...
    如果是10001,10002之类的可select max(id) from table
    如果是book10001,book10002,截取一下后,跟上面一样操作...
      

  3.   

    我就想要实现着样的功能,如果像楼上说的不用SELECT LAST_INSERT_ID(),那具体这代码怎么改,我需要的就是像sqlserver:insert into book(xxx,xxx) values(?,?) select @@identity ;着样的MYSQL语句。和拿什么保存查出来的结果,有能力的请根据我的那段代码改,谢谢!