System.out.println(buffer.toString());
这句话放到循环里面。

解决方案 »

  1.   

    如果你确定你的while只运新了一次,就是你的数据库里面的数据或者你的查询语句有问题。否则就是你的buffer的运用有问题。怎么知道while运行了几次?你可以把那条查询语句在客户端执行,看结果;又或者在while里面println一行信息来看看。
      

  2.   

    把Mysql.execQuery(sql); 的代码贴出来看一下。
    会不会是每次执行的时候使用同一个statement
      

  3.   

    我确定是使用了同一个statement的,这样就有问题是吧? 可是不理解,  notyy(notyy)  能讲一下原理性嘛?
      

  4.   

    我所有的数据操作都是使用一个数据库连接Connection和Statement。mysql的连接类我贴出来,也是网上找的程序。如下:
    //Mysql类:import java.sql.*;
    import java.io.*;
    /**
    * 处理数据库的连接和访问
    * @author 
    * @version 
    */
    public class Mysql{ private Connection conn = null;
    private Statement stmt = null;

    public Mysql(String dbUrl) throws Exception 
    {
    try
       {
         Class.forName("org.gjt.mm.mysql.Driver");
         conn = DriverManager.getConnection(dbUrl);
         stmt = conn.createStatement();
         
            }
       catch(java.lang.ClassNotFoundException e)
       {
       System.err.println("Unable to load driver:" + e.getMessage());
       }
       }
      
    /**
     * 返回连接
     * @return Connection 连接
     */
    public Connection getConnection() 
    {
    return conn;
    }
    /**
    * PreparedStatement
    * @return sql 预设SQL语句
    */ 
    public void clearParameters() throws SQLException
    {
    prepstmt.clearParameters();
    }

    /**
    * 返回状态
    * @return Statement 状态
    */
    public Statement getStatement() 
    {
    return stmt;
    }
    /**
    * 执行SQL语句返回字段集
    * @param sql SQL语句
    * @return ResultSet 字段集
    */
    public ResultSet executeQuery(String sql) throws SQLException 
    {
    if (stmt != null) 
    {
    return stmt.executeQuery(sql);
    }
    else 
    return null;
    }

    /**
    * 执行SQL语句返回字段集
    * @param sql SQL语句
    * @return ResultSet 字段集
    */
    public ResultSet execQuery(String sql) throws SQLException 
    {
    if (stmt != null) 
    {
    return stmt.executeQuery(sql);
    }
    else 
    return null;
    }

    /**
    * 执行SQL语句
    * @param sql SQL语句
    */
    public void executeUpdate(String sql) throws SQLException 
    {
    if (stmt != null) 
    stmt.executeUpdate(sql);
    }

    /**
    * 执行SQL语句
    * @param sql SQL语句
    */
    public void execUpdate(String sql) throws SQLException 
    {
    if (stmt != null) 
    stmt.executeUpdate(sql);
    }

    /**
    * 关闭连接
    */
    public void close() throws Exception 
    {
    if (stmt != null) 
    {
    stmt.close();
    stmt = null;
    }
    if (prepstmt != null) 
    {
    prepstmt.close();
    prepstmt = null;
    }
    conn.close();
    conn = null;
    }
    }
      

  5.   

    看看ResultSet的javadoc吧A ResultSet object is automatically closed when the Statement object that generated it is closed, re-executed, or used to retrieve the next result from a sequence of multiple results. 当ResultSet rs2 = db.execQuery(sql);//每个房间有多少人在线
    这句语句执行的时候,前面的rs就被自动关闭了。