要将数据库中的不同对象添加到ArrayList
,这是我使用的代码:
try {
Statement stat = con.createStatement();
ResultSet rs = stat.executeQuery("SELECT DISTINCT Id, Username, FirstName, LastName FROM USER WHERE Username LIKE '%"+name+"%' or FirstName LIKE '%"+name+"%' or LastName LIKE '%"+name+"%'");
while (rs.next()){
finded.setUsername(rs.getString("Username"));
finded.setFirstName(rs.getString("FirstName"));
finded.setLastName(rs.getString("LastName"));
finded.setId(rs.getInt("Id"));
findList.add(finded);
Log.d("this is the content of the List:",((Integer) findList.get(j).getId()).toString());
Log.d("this is the content of the List 0:",((Integer) findList.get(0).getId()).toString());
}
con.close();
这就是Log.d每次给我的东西。
10-18 08:31:39.407: D/this is the content of the List:(427): 3
10-18 08:31:39.407: D/this is the content of the List 0:(427): 3
10-18 08:31:39.427: D/this is the content of the List:(427): 15
10-18 08:31:39.427: D/this is the content of the List 0:(427): 15
10-18 08:31:39.437: D/this is the content of the List:(427): 13
10-18 08:31:39.437: D/this is the content of the List 0:(427): 13
10-18 08:31:39.447: D/this is the content of the List:(427): 50
10-18 08:31:39.447: D/this is the content of the List 0:(427): 50
10-18 08:31:39.460: D/this is the content of the List:(427): 34
10-18 08:31:39.460: D/this is the content of the List 0:(427): 34
10-18 08:31:39.467: D/this is the content of the List:(427): 49
10-18 08:31:39.467: D/this is the content of the List 0:(427): 49
10-18 08:31:39.479: D/this is the content of the List:(427): 53
10-18 08:31:39.479: D/this is the content of the List 0:(427): 53
如您所见,它会在ArrayList
的所有位置复制相同的对象。我也尝试使用findList.add(index, finded)
(index
是int
正在递增)但是我得到了相同的结果。
答案 0 :(得分:4)
您需要在循环
中为finded
创建一个新对象
while (rs.next()){
finded = new Finded(); // <<-- here
finded.setUsername(rs.getString("Username"));
否则你只需反复添加同一个对象
答案 1 :(得分:2)
更改为以下内容:
int j=0;
try {
Statement stat = con.createStatement();
ResultSet rs = stat.executeQuery("SELECT DISTINCT Id, Username, FirstName, LastName FROM USER WHERE Username LIKE '%"+name+"%' or FirstName LIKE '%"+name+"%' or LastName LIKE '%"+name+"%'");
while (rs.next()){
Finded finded=new Finded();
finded.setUsername(rs.getString("Username"));
finded.setFirstName(rs.getString("FirstName"));
finded.setLastName(rs.getString("LastName"));
finded.setId(rs.getInt("Id"));
findList.add(finded);
Log.d("this is the content of the List:",((Integer) findList.get(j).getId()).toString());
Log.d("this is the content of the List 0:",((Integer) findList.get(0).getId()).toString());
j++;
}
con.close();
答案 2 :(得分:1)
您的查询返回多条记录但是,您将覆盖finded
对象,而不是在循环内创建新对象。
在循环中创建一个新对象
Finded finded =null;
while (rs.next()){
finded = new Finded();
finded.setUsername(rs.getString("Username"));
finded.setFirstName(rs.getString("FirstName"));
finded.setLastName(rs.getString("LastName"));
finded.setId(rs.getInt("Id"));
findList.add(finded);
}
答案 3 :(得分:0)
也许你可以使用“group by”而不是“distinct”。
从....分组中选择....
试试这个怎么样?