try-with-resources的使用问题
try(ResultSet rs=ps.getResultSet()){
//省略
}
java.sql.ResultSet有接口AutoCloseable,以上代码在jre7下运行没有错误,貌似一切正常。
但我通过jmap检查内存泄露时却发现com.microsoft.sqlserver.jdbc.TypeInfo、com.microsoft.sqlserver.jdbc.Column占用了大量内存(这是jdbc-sqlserver驱动中的类型),且对象量持续上升。
我怀疑rs根本没被close掉,于是在try块中加了rs.close();
结果正如我猜的那样,内存泄露的情况没有了。
这是我使用上有什么问题?还是try-with-resources有问题?
------解决方案--------------------
jdk7的东西吗?确实没用过
------解决方案--------------------OH jdk7还真没有用过。好像增加了不少新的东西。ResutlSet肯定是需要关闭的嘛,这能有什么问题呢?
------解决方案--------------------你不关闭肯定会这样啊。。一定要关闭 最好放在finally块里
------解决方案--------------------换个数据库试试,看看是jre的问题,还是M$ jdbc驱动的问题
------解决方案--------------------public static void viewTable(Connection con) throws SQLException {
String query = "select COF_NAME, SUP_ID, PRICE, SALES, TOTAL from COFFEES";
try (Statement stmt = con.createStatement()) {
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
String coffeeName = rs.getString("COF_NAME");
int supplierID = rs.getInt("SUP_ID");
float price = rs.getFloat("PRICE");
int sales = rs.getInt("SALES");
int total = rs.getInt("TOTAL");
System.out.println(coffeeName + ", " + supplierID + ", " + price +
", " + sales + ", " + total);
}
} catch (SQLException e) {
JDBCTutorialUtilities.printSQLException(e);
}
}
看官方例子
http://docs.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html
不知道你代码是不是写错了.