您的位置:首页 > 其它

JDBC新增记录获取主键的方式总结

2011-02-23 11:02 465 查看
在HIBERNATE中,我们直接session.save(obj)然后直接可以拿到obj的主键。JDBC接口中没有这样的功能。我们就要用一些特殊的方式。
1. 采用HIBERNATE SEQ的保存,先获取当前最大的SEQUENCE增量,然后作为保存记录的方式。
2. 当每张表是自增主键的时候,比如MYSQL表的方式。这样我们就可以采用Statement的接口。
代码如下:

/**
* 添加一个供应商
* @param supplierVO SupplierVO
* @return int
*/
public int addSupplier(SupplierVO supplierVO) {
int flag = 0; //默认失败
this.checkConn();
StringBuffer sbqInsertSql = new StringBuffer();
sbqInsertSql.append("insert into df_supplier (supplier_account,supplier_name,supplier_password,company_name,create_time,site_id )");
sbqInsertSql.append(" values ");
sbqInsertSql.append(" (?,?,?,?,?,?) ");
try {
PreparedStatement pstmt = this.connection.prepareStatement(
sbqInsertSql.toString(), Statement.RETURN_GENERATED_KEYS);

pstmt.setString(1, supplierVO.getSupplierAccount());
pstmt.setString(2, supplierVO.getSupplierName());
String md5SupplierPassword = "";
String supplierPassword = supplierVO.getSupplierPassword();
if (supplierPassword == null || "".equals(supplierPassword)) {
md5SupplierPassword = new MD5().toMD5("888888");
} else {md5SupplierPassword = new MD5().toMD5(supplierPassword);
}

pstmt.setString(3, md5SupplierPassword);
pstmt.setString(4, supplierVO.getCompanyName());
Date date1 = new Date();
pstmt.setDate(5, new java.sql.Date(date1.getTime()));
pstmt.setString(6, supplierVO.getSiteId());
flag = pstmt.executeUpdate();

ResultSet rs = pstmt.getGeneratedKeys();
//设置回主键
if (rs.next()) {
supplierVO.setSupplierId(Long.valueOf(String.valueOf(rs.getLong(
1))));
}
rs.close();rs=null;
pstmt.close();
pstmt = null;
} catch (SQLException ex) {
ex.printStackTrace();
} finally {
this.releaseConn();
}
return flag;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: