你的问题是一个很基本的问题
当st = con.creatstatement();st就指向了一个对象,也就是说st引用了那个对象
然后循环再执行这句话时st又指向了另一个对象
你的问题是原来的st去哪了?
很简单,st只是一个对象,他的引用是最后一个指向的对象
而之前由con.creatstatement();生成的对象都成了没人要的孤儿了
用javadoc的话说这些对象已经满足了垃圾回收的要求,但jvm什么时候回收就得看它什么时候心情好了

解决方案 »

  1.   

    比较好的办法是你把st=null;放到循环内部这样能够自动回收原来的内存。
      

  2.   

    to jFresH_MaN()"\\r\\n"(做人挺厚道的说)
    如果我把st.close();这句话也删掉,那么最后一个Statement会不会随着Connection的关闭而关闭!
    即最初的问题 当Connection关闭的时候由Connection生成的Statement会不会自动关闭?
      

  3.   

    to archerss(好梦日日游)
    有明确的理论根据吗?
      

  4.   

    看看jdk的文档怎么说的:
    Note: A Statement object is automatically closed when it is garbage collected. When a Statement object is closed, its current ResultSet object, if one exists, is also closed.
    注意:当垃圾回收的时候,一个Statement对象会自动被关闭,同时和它相关的结果集都将被关闭。
      

  5.   

    Note: A Connection object is automatically closed when it is garbage collected. Certain fatal errors also close a Connection object.
    注意:当垃圾回收的时候,一个Connection对象将被自动关闭。
      

  6.   

    虽然他没有说关闭connection的时候和它相关的statement会自动被关闭,但是从“注意:当垃圾回收的时候,一个Statement对象会自动被关闭,同时和它相关的结果集都将被关闭。”应该可以推断statement是被自动关闭的。个人推断。
      

  7.   

    如果我把st.close();这句话也删掉,那么最后一个Statement会不会随着Connection的关闭而关闭!
    ----------------------
    当然不会!
    Note: A Statement object is automatically closed when it is garbage collected. 
    也就是说,只有等到垃圾回收时才会自动关闭。
    Statement的对象引用不存在了,它符合垃圾回收的条件,但并不会被立即回收的