源代码如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class TestDataSource {
private static Connection cn = null;private static int ORACLE10G = 0;private static int ORACLE9i = 1;private static Connection getConnection(int oraver)
{
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
if (oraver==TestDataSource.ORACLE10G)
cn = DriverManager.getConnection("jdbc:Oracle:thin:@192.168.0.1:1521ra10g", "sf", "sf");
else
cn = DriverManager.getConnection("jdbc:Oracle:thin:@192.168.0.2:1521ra9i", "sf", "sf");
}catch(Exception ex){
ex.printStackTrace();
}return cn;
}public static void main(String[] args) throws Exception {
try {
String sql = "select * from cat";Statement stmt = null;
ResultSet rs = null;// 10g
System.out.println("----------------------10g---------------------");
stmt = getConnection(TestDataSource.ORACLE10G).createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql);
while (rs.next()) {
System.out.println(rs.getString("TABLE_NAME"));
}
rs.close();
stmt.close();
cn.close();// 9i
System.out.println("----------------------9i----------------------");
stmt = getConnection(TestDataSource.ORACLE9i).createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql);
while (rs.next()) {
System.out.println(rs.getString("TABLE_NAME"));
}
rs.close();
stmt.close(); 
cn.close();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
System.exit(0);
}
}
}结果:
只要classes12.jar、数据库服务器任一使用了Oracle10g,Statement即无法关闭。只有使用classes12.jar连接Oracle9iStatement才能被正确关闭。为什么会这样?是我的代码的问题么?