数据库某表中有3条记录,且表有5个字段,运行下面的程序为什么全是打印15,而不是5,15,交替打印,请指教
谢谢了 
import java.sql.*;
import javax.swing.*;
import java.util.*;
public class TestJDBC {    public TestJDBC() {
    }    public static void main(String[] args) {
        Connection con = null;
        Statement sta = null;
        ArrayList arr = new ArrayList();
        ArrayList arrTemp = new ArrayList();
        try
        {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        }
        catch(Exception ex)
        {
            JOptionPane.showMessageDialog(null,"数据库加载驱动失败");
            ex.printStackTrace();
        }
        try
        {
           con = DriverManager.getConnection("jdbc:odbc:MyTest");
        }
        catch(Exception ex)
        {
            JOptionPane.showMessageDialog(null,"数据库连接失败");
            ex.printStackTrace();
        }
        try
        {            sta = con.createStatement();
            String sql = "Select * FROM StudentInfo";
            ResultSet rs = sta.executeQuery(sql);
            while(rs.next())
            {
                arrTemp.add(rs.getString(1));
                arrTemp.add(rs.getString(2));
                arrTemp.add(rs.getString(3));
                arrTemp.add(rs.getString(4));
                arrTemp.add(rs.getString(5));
                arr.add(arrTemp);
            }
            rs.close();
            sta.close();
            con.close();            ArrayList list = new ArrayList();
            for(int i = 0;i<arr.size();i++)
            {
                list = (ArrayList)arr.get(i);
                System.out.println(list.size());
                System.out.println(arrTemp.size());
            }        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }    }
}

解决方案 »

  1.   

    首先list = (ArrayList)arr.get(i); 就是arrTemp
    所以
    System.out.println(list.size()); 
    System.out.println(arrTemp.size()); 
    输出的是一个东西的size,也就是arrTemp的size其次
    while(rs.next()) 

      arrTemp.add(rs.getString(1)); 
      arrTemp.add(rs.getString(2)); 
      arrTemp.add(rs.getString(3)); 
      arrTemp.add(rs.getString(4)); 
      arrTemp.add(rs.getString(5)); 
      arr.add(arrTemp); 

    每次循环都将结果装进同一个arrTemp中,arrTemp始终保持同一个对象,循环一次arrTemp的size增加5
    3次正好是15,而3次循环向arr中装进了3个arrTemp,这3个arrTemp其实是一个对象
      

  2.   

    arr中的元素都是arrTemp, 所以打印全是15. 根据你的逻辑,应该改为:import   java.sql.*;
    import   javax.swing.*;
    import   java.util.*;
    public   class   TestJDBC   {        public   TestJDBC()   {
            }        public   static   void   main(String[]   args)   {
                    Connection   con   =   null;
                    Statement   sta   =   null;
                    ArrayList   arr   =   new   ArrayList();
                    ArrayList   arrTemp   =   new   ArrayList();
                    try
                    {
                            Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver ");
                    }
                    catch(Exception   ex)
                    {
                            JOptionPane.showMessageDialog(null, "数据库加载驱动失败 ");
                            ex.printStackTrace();
                    }
                    try
                    {
                          con   =   DriverManager.getConnection( "jdbc:odbc:MyTest ");
                    }
                    catch(Exception   ex)
                    {
                            JOptionPane.showMessageDialog(null, "数据库连接失败 ");
                            ex.printStackTrace();
                    }
                    try
                    {                        sta   =   con.createStatement();
                            String   sql   =   "Select   *   FROM   StudentInfo ";
                            ResultSet   rs   =   sta.executeQuery(sql);
                            while(rs.next())
                            {
                                    arrTemp.add(rs.getString(1));
                                    arrTemp.add(rs.getString(2));
                                    arrTemp.add(rs.getString(3));
                                    arrTemp.add(rs.getString(4));
                                    arrTemp.add(rs.getString(5));
                                    arr.add(arrTemp.clone() );
                                    arrTemp.clear();
                            }
                            rs.close();
                            sta.close();
                            con.close();                        ArrayList   list   =   new   ArrayList();
                            for(int   i   =   0;i <arr.size();i++)
                            {
                                    list   =   (ArrayList)arr.get(i);
                                    System.out.println(list.size());
                                    System.out.println(arrTemp.size());
                            }                }
                    catch(Exception   ex)
                    {
                            ex.printStackTrace();
                    }        }
    }改了之后打印应为:5,0,5,0,5,0