我在查询数据库中使用ResultSet,先贴上代码片段ArrayList aListQueryResult = new ArrayList();ResultSet rs = stmt.executeQuery(sql);
Postalcode postalcode = new Postalcode();while(rs.next()) {
System.out.println("-----------数据库数据记录-----------");
postalcode.setStrPostalcode(rs.getString("Postalcode"));
postalcode.setStrDistrictName(rs.getString("District"));
postalcode.setStrDistrictNum(rs.getString("DistrictNum"));
postalcode.setStrProvinceName(rs.getString("Province"));
aListQueryResult.add(postalcode);
}
这个是查询邮编数据库的代码,现在的问题是,当我查询一些数据,如果数据库应经有相关的数据记录,如数据库中已经有南京的一些信息了,查询结果淡然就返回了从数据库中查询的关于南京的信息了,问题就出在当我查询一些数据库中没有的信息数据时,返回的竟然还是上次数据库查询结果的数据,比如上次查询南京的数据,则返回数据库中的南京相关记录,这次查询上海的信息,(数据库中没有上海的信息),奇妙的是返回的信息还是南京的信息,怎么回事?怎么解决啊?高手们请作答
Postalcode postalcode = new Postalcode();while(rs.next()) {
System.out.println("-----------数据库数据记录-----------");
postalcode.setStrPostalcode(rs.getString("Postalcode"));
postalcode.setStrDistrictName(rs.getString("District"));
postalcode.setStrDistrictNum(rs.getString("DistrictNum"));
postalcode.setStrProvinceName(rs.getString("Province"));
aListQueryResult.add(postalcode);
}
这个是查询邮编数据库的代码,现在的问题是,当我查询一些数据,如果数据库应经有相关的数据记录,如数据库中已经有南京的一些信息了,查询结果淡然就返回了从数据库中查询的关于南京的信息了,问题就出在当我查询一些数据库中没有的信息数据时,返回的竟然还是上次数据库查询结果的数据,比如上次查询南京的数据,则返回数据库中的南京相关记录,这次查询上海的信息,(数据库中没有上海的信息),奇妙的是返回的信息还是南京的信息,怎么回事?怎么解决啊?高手们请作答
我觉得应该不是ResultSet的问题,肯定是你别的地方搞错了。
while(rs.next()) {
System.out.println("-----------数据库数据记录-----------");
postalcode.setStrPostalcode(rs.getString("Postalcode"));
postalcode.setStrDistrictName(rs.getString("District"));
postalcode.setStrDistrictNum(rs.getString("DistrictNum"));
postalcode.setStrProvinceName(rs.getString("Province"));
aListQueryResult.add(postalcode);
}
Postalcode postalcode = new Postalcode();应该放在循环里new
this.openConnection();
ArrayList aListQueryResult = null;
try {
String sql = null;
//声明SQL语句
Statement stmt = conn.createStatement();
if(QUERYMODE==QueryMode.DISTRICT_to_POSTAL) { //按地区名查询邮编
sql="SELECT Province,District,Postalcode,DistrictNum FROM postalcode_china WHERE District LIKE '%" + strQueryCond + "%'";
}
else if(QUERYMODE==QueryMode.POSTAL_to_DISTRICT) { //按邮编查询地区名
sql="SELECT Province,District,Postalcode,DistrictNum FROM postalcode_china WHERE Postalcode LIKE '%" + strQueryCond + "%'";
}
//执行查询语句
aListQueryResult = new ArrayList();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) {
Postalcode postalcode = new Postalcode();
postalcode.setStrPostalcode(rs.getString("Postalcode")); postalcode.setStrDistrictName(rs.getString("District"));
postalcode.setStrDistrictNum(rs.getString("DistrictNum"));
postalcode.setStrProvinceName(rs.getString("Province"));
aListQueryResult.add(postalcode);
}
} catch(Exception e) {
e.printStackTrace();
} finally {
this.closeConnection();
}
return aListQueryResult;
}
rs.close();
st.close();
conn.close();
具体的实现贴出来
另外可以将sql先在数据库里执行看看结果
查询都有的,比如南京、北京都有记录,分别查询看下结果有什么异常
返回之前把list循环打印一下,看看结果如何
查询完成后return前将ArrayList打印一下
基本上就知道问题出在三块中哪一块了
2. 再在servlet里判断一下返回值是否为空。
3. 对比一下后台打印出来的结果与页面显示的是否一致,如果不一致就检查一下缓存。
while(rs.next()) {
Postalcode postalcode = new Postalcode();
postalcode.setStrPostalcode(rs.getString("Postalcode")); postalcode.setStrDistrictName(rs.getString("District"));
postalcode.setStrDistrictNum(rs.getString("DistrictNum"));
postalcode.setStrProvinceName(rs.getString("Province"));
aListQueryResult.add(postalcode); System.out.println(postalcode.getStrPostalcode());
System.out.println(postalcode.getStrDistrictName());
System.out.println(postalcode.getStrDistrictNum());
System.out.println(postalcode.getStrProvinceName());}