数据库某表中有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();
} }
}
谢谢了
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();
} }
}
所以
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其实是一个对象
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