关于java连接数据库的问题

来源:百度知道 编辑:UC知道 时间:2024/06/25 00:28:16
package Cheaper3;
import java.sql.*;
import java.util.LinkedList;
import java.util.List;

public class SqlChaxun {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection conn=null;
ResultSet resset=null;
PreparedStatement pstaStatement=null;

String sqlstr="select * from Admin";
ConnectionManager connManager=new ConnectionManager();
conn=connManager.getConnection();
try {
pstaStatement=conn.prepareStatement(sqlstr);
resset=pstaStatement.executeQuery();
List<Admin>adminList=new LinkedList<Admin>();
Admin admin=new Admin();//位置1
while (resset.next()) {
// Admin admin=new Admin(); 位置2
admin.setAdminid(resset.getInt("adminid"));
admin.setAdminname(resset.getString("adminname"));
admin.setLoginID(resset.getString("loginid"));

第一个位置只创建了一次对象,所以数据库查询出来的每一个结果都会覆盖原先的结果。
而第二个位置,是每循环一次便会创建一个对象,每次的查询结果也都保存在相对的对象中。

当然不能用位置1啦。

因为如果是位置1,那你每次循环中装入list的都是同一个对象。因为你每次修改他的值,你前几次装到list里的那些的值也会变,因为他们都是同一个对象的引用啊

在位置一进行new对象:始终是new了一个对象,而在while循环里list一直是加入的这一个对象,如果没错,list对象里的值一定是最后一个。
所以位置二才行....
明白么.........
在教你一点代码规范,
Admin admin=null;
while (resset.next()) {
admin=new Admin();
..........
adminList.add(admin);
}
这样来写,因为像你那样new对象是很浪费资源的....

当然不一样啦,Java和许多其他的语言都一样,有域的概念,在1位置定义了一次,在循环中对唯一定义的一个admin进行修改赋值,在2位置上,每次进入循环都定义了一个admin,每单次循环完成就被当作垃圾回收的对象了,是在后面是无法引用的对象。