GetGeneratedKeysHelper 与反射
此类中用了最基本的一些反射方法,应该说是检验反射功底的好东西。
例如:
RETURN_GENERATED_KEYS = Statement.class.getDeclaredField("RETURN_GENERATED_KEYS").getInt(PreparedStatement.class);
跟 PreparedStatement.RETURN_GENERATED_KEYS 是不一样的。
前者可以动态找到运行时参数的当前值,而后者得到的只是硬编码时的初始值。
另外,还有一个不明白的就是,代码中使用了:
PREPARE_STATEMENT_METHOD = Connection.class.getMethod( "prepareStatement", new Class[] {String.class, Integer.TYPE} );
public static PreparedStatement prepareStatement(Connection conn, String sql) throws SQLException {
Object[] args = new Object[] { sql, new Integer(RETURN_GENERATED_KEYS) } ;
//
return (PreparedStatement) PREPARE_STATEMENT_METHOD.invoke(conn, args);
}
public static PreparedStatement prepareStatement(Connection conn, String sql) throws SQLException {
Object[] args = new Object[] { sql, new Integer(RETURN_GENERATED_KEYS) } ;
//
return (PreparedStatement) PREPARE_STATEMENT_METHOD.invoke(conn, args);
}
为什么不直接使用conn.prepareStatement(...)呢?