以下代码需要JDBC 3.0 支持。
受限于厂商提供的JDBC驱动程序
代码是来源于一个 叫Roman 的开源持久层组件,仅供你参考,不保证能够直接嵌入你的工程代码,里面的代码被我删除了部分,仅保留了功能实现的基本部分:
//声明需要返回的 主键列名(String 数组)
// instance 是一个po对象 有一个 getPrimaryKeyName的方法,返回这个PO的主键名
String[] generalColumns = new String[]{instance.getPrimaryKeyName()};
//执行更新
ResultSet rsKeys = null;
PreparedStatement s = null;
try
{
s = _cnn.prepareStatement(_insertString,generalColumns);//执行SQL,_cnn 是一个数据库连接
for(int i = 0 ; i < values.size(); i ++)
s.setObject(i+1, values.get(i)); // 写入除了主键外的其它参数
int ref = s.executeUpdate(); //执行
if (ref != 1 ) // 检查是否成功执行了 Insert
throw new SqlRuntimeException(" database inserted nothing ");
rsKeys = s.getGeneratedKeys(); // 接收返回值
ResultSetMetaData rsmd = rsKeys.getMetaData(); // 获取返回的列名
int rscolumnsCount = rsmd.getColumnCount();
//接受数据库端生成的返回值
if (rsKeys.next())
{
Object val = null;
String nam = null;
for(int i = 0; i < rscolumnsCount; i ++ )
{
val = rsKeys.getObject(i + 1); // JDBC 中的参数是从 1 开始的
nam = rsmd.getColumnLabel(i + 1);
instance.setValue(nam, val);
}
}
return instance;
}
catch (SQLException e)
{
throw e;
}
finally
{
if (null != rsKeys)
rsKeys.close();
if (null != s)
s.close();
}