请问下面的执行结果是什么,为什么会是这样的结果,谢谢!
import java.sql.*;class Test {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
public Test() {
}
public void loadConn() {
try
{
if(conn == null) {
Class.forName("org.gjt.mm.mysql.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","625001993");
}
} catch(Exception e) {
e.printStackTrace();
}
}
public ResultSet query() {
loadConn();
try {
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from admins");
return rs;
} catch(Exception e) {
e.printStackTrace();
return null;
}
}
}public class TestObject
{
public static void main(String args[]) {
try {
Test test = new Test();
ResultSet rs = test.query();
if (rs == test.rs) {
System.out.println("equals");
}
test.rs.close();
test.rs = null;
if (rs !=null)
{
System.out.println("rs is not null");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.sql.*;class Test {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
public Test() {
}
public void loadConn() {
try
{
if(conn == null) {
Class.forName("org.gjt.mm.mysql.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","625001993");
}
} catch(Exception e) {
e.printStackTrace();
}
}
public ResultSet query() {
loadConn();
try {
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from admins");
return rs;
} catch(Exception e) {
e.printStackTrace();
return null;
}
}
}public class TestObject
{
public static void main(String args[]) {
try {
Test test = new Test();
ResultSet rs = test.query();
if (rs == test.rs) {
System.out.println("equals");
}
test.rs.close();
test.rs = null;
if (rs !=null)
{
System.out.println("rs is not null");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
解决方案 »
- Hibernate中的实体间的关系映射
- 为什么我定义的类型转换不起作用呢?
- hibernete关系映射的选择
- Flex Debug工具flashplayer_10_ax_debug装不了,啥原因??
- 项目里代码架构疑惑
- spring+hibernate 问题
- 求救,struts简单问题,在线等
- hibernate查询
- eclipse + easy struts的问题?
- java 后台返回大量记录,且记录的字段有段落、样式等,用什么方式返回显示好?
- 100分急求提示:想在AXIS2中使用SOCKET连接池 -- 需要连接池在TOMCAT6启动时一起启动,并且能在AXIS2的服务端取到已启动的SOCKET连接池实例
- struts中登录错误返回登录页面时,如何提示错误?
System.out.println("equals");
}rs为当前的局部变量,而test.rs为Test test = new Test(); 中定义的变量
其实你没用到Test中定义的ResultSet rs
class Test {
ResultSet rs = null;
}
public class TestObject 中可以改为
Test test = new Test();
test.rs = test.query();
loadConn();
try {
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from admins");
return rs;
} catch(Exception e) {
e.printStackTrace();
return null;
}
} 在调用的时候ResultSet rs = XX.query();
在对rs.close();rs=null;之后,XX.rs还存在,也就是存在对stmt.executeQuery("select * from admins"); 的引用,所以垃圾回收就不会回收
不过我以前用JDBC的时候LoadConn和ResultSet都放一块儿,如下
public class Untitled1 {
public Untitled1() {
}
public static void main(String[] args) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:odbc:pubs");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(
"select emp_id,fname+' '+lname as name from employee order by emp_id");
while (rs.next()) {
System.out.print(rs.getString(1)
}
rs.close();
stmt.close();
conn.close();
//如果再在这个地方调用就不行了,提示什么什么Closed
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}