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;
}为什么我这样获不到插入数据的标识?
感觉这句应该是pst.executeUpdate();
这句会抛exception因为它是prepareStatement,而不是Statement
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的特性,返回自动自增的主键值!