java的一个变态问题,怀疑是JVM的BUG
kenli 2004-07-01 06:05:09 看下面的代码,如果直接使用PreparedStatement就会出AbstractMethodError,但是如果做了强制类型转换,就执行正确。
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
Connection con = DriverManager.getConnection("jdbc:db2:sample", "db2admin", "db2admin");
// DB2PreparedStatement pstat = (DB2PreparedStatement) con.prepareStatement("UPDATE EMPLOYEE SET PHONENO=? WHERE EMPNO=?");
PreparedStatement pstat = con.prepareStatement("UPDATE EMPLOYEE SET PHONENO=? WHERE EMPNO=?");
pstat.getParameterMetaData();
pstat.close();
下面是两段代码的bytecode的不同部分:
(做了类型转换)
24 checkcast #46 <COM/ibm/db2/jdbc/app/>
27 astore_2
28 aload_2
29 invokevirtual #50 <COM/ibm/db2/jdbc/app/DB2PreparedStatement.getParameterMetaData>
====================================
(未作类型转换)
24 astore_2
25 aload_2
26 invokeinterface #50 <java/sql/PreparedStatement.getParameterMetaData> count 1