public class Deal
{
   public ArrayList selClientByAddress(String address)  {
Connection connection = getConn.getCon();//数据库连接
PreparedStatement st = null;
Statement stmt;
ResultSet rs = null;
Client client = new Client();//是一个bean 
ArrayList list = new ArrayList();//用来保存client对象

String sql = "select * from client where address like '%?%'";
sql=sql.replaceFirst("\\?", address);

try {
stmt=connection.createStatement();
rs = stmt.executeQuery(sql);
while (rs.next()) {
client.setClientid(rs.getInt("clientid"));
client.setClientname(rs.getString("clientname"));
client.setPhone(rs.getString("phone"));
client.setMobile(rs.getString("mobile"));
client.setEmail(rs.getString("email"));
client.setHobby(rs.getString("hobby"));
client.setAddress(rs.getString("address"));
client.setCdescription(rs.getString("cdescription"));
list.add(client);
}
} catch (Exception e) {

}
return list;
} public static void main(String[] args) throws SQLException {
Deal deal=new Deal();
ArrayList list=deal.selClientByAddress("nt");
for(int i=0;i<list.size();i++)
{
Client client=(Client)list.get(i);
System.out.println(client.getAddress());

}

}}client (address列)表数据如下
            
江苏南通nt海门
江苏南通nt海安
江苏南通nt启东 问题
 查询得到三条同样的记录  江苏南通nt启东 ****江苏南通nt启东****江苏南通nt启东***是什么原因?

解决方案 »

  1.   

    你的这个好像问题出在sql=sql.replaceFirst("\\?", address); 这句话。
      

  2.   

    Client client = new Client();//是一个bean 
    你放到循环里面来,在这个地方当成总是指向的最后一条记录
      

  3.   

    不是这个问题,我放循环外面还是这样。。?
    我觉的还是 Statement的问题
      

  4.   

    你理解错啦,我是说把
    Client client = new Client();//是一个bean 放到while循环里while (rs.next()) { 
    Client client = new Client();//放在这
    client.setClientid(rs.getInt("clientid")); 
    client.setClientname(rs.getString("clientname")); 
    client.setPhone(rs.getString("phone")); 
    client.setMobile(rs.getString("mobile")); 
    client.setEmail(rs.getString("email")); 
    client.setHobby(rs.getString("hobby")); 
    client.setAddress(rs.getString("address")); 
    client.setCdescription(rs.getString("cdescription")); 
    list.add(client);
    }