public int addEmail(Email e) {
  log.info("------------addEmail方法开始----------------");
  int result = 0;
  String sql = "insert into email(emailTypeID,sendUserID,sentTime,title,emailContent) values(?,?,?,?,?)";
  Connection conn = DBAccess.getConnection();
  PreparedStatement pst = null;
  ResultSet rs = null;
  try {
    pst = conn.prepareStatement(sql);
    pst.setInt(1, e.getEmailTypeID());
    pst.setInt(2, e.getSendUserID());
    pst.setTimestamp(3, new Timestamp(e.getSendTime().getTime()));
    pst.setString(4, e.getTitle());
    pst.setString(5, e.getEmailContent());
    pst.execute();
    rs = pst.executeQuery("select @@identity ");
    if(rs.next()){
      result = rs.getInt(0);
    }
  }catch (SQLException e1) {
    e1.printStackTrace();
  }finally{
    DBAccess.close(conn, pst, rs);
  }
    return result;
}为什么我这样获不到插入数据的标识?

解决方案 »

  1.   

    pst.execute();
    感觉这句应该是pst.executeUpdate();
      

  2.   

    恩,楼上说的对rs = pst.executeQuery("select @@identity ");
    这句会抛exception因为它是prepareStatement,而不是Statement
      

  3.   

    public int addEmail(Email e) {
      log.info("------------addEmail方法开始----------------");
      int result = 0;
      String sql = "insert into email(emailTypeID,sendUserID,sentTime,title,emailContent) values(?,?,?,?,?)";
      Connection conn = DBAccess.getConnection();
      PreparedStatement pst = null;
      ResultSet rs = null;
      try {
        pst = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS); //The constant indicating that generated keys should be made available for retrieval
        pst.setInt(1, e.getEmailTypeID());
        pst.setInt(2, e.getSendUserID());
        pst.setTimestamp(3, new Timestamp(e.getSendTime().getTime()));
        pst.setString(4, e.getTitle());
        pst.setString(5, e.getEmailContent());
        pst.execute();
        rs = pst.executeQuery("select @@identity ");
        if(rs.next()){
          result = rs.getInt(0);
        }
    ResultSet rsKey = pst.getGeneratedKeys(); 
    rsKey.next();
    int key = reKey.get(1); //得到自增主键值
    rsKey.close();
      }catch (SQLException e1) {
        e1.printStackTrace();
      }finally{
        DBAccess.close(conn, pst, rs);
      }
        return result;
    }JDBC3.0的特性,返回自动自增的主键值!