2012-03-15 13 views
-2

私はmysqlデータベースに接続するサーブレットを持っており、結果セットは数値の列からいくつかの値を取得し、これらの値は結果として画像としてグラフを生成するGoogleのリンクに入れられます...これは私のコードですそれ:サーブレットのwrite.outメソッドを10秒ごとに更新するにはどうすればよいですか?

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

      //OutputStreamWriter writer = new OutputStreamWriter(response.getOutputStream()); 
      //System.out.println("SensorGraph"); 

      response.setContentType("text/html"); 
      PrintWriter out = response.getWriter(); 
      //sensor Id 
      String id = request.getParameter("id"); 
      // limit in the query 
      String limit = request.getParameter("limit"); 
      DatabaseConnection db_connection = new DatabaseConnection()._instance; 
      Connection connection = null; 
      try { 
       connection = db_connection.getConnection(); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
      Statement statement; 
      ResultSet resultSet; 
      try { 
       statement = (Statement) connection.createStatement(); 
       resultSet = statement.executeQuery("select * from Sensor_Entries order by EntryTime asc limit 100"); 
       String values = ""; 
       while(resultSet.next()) { 
        String value = resultSet.getString("EntryValue"); 
        values += (value) + ","; 
       } 
       //System.out.println(values); 
       values = values.substring(0, values.length()-1); 


       String image = "http://chart.apis.google.com/chart?" + 
         "chxr=0,0,1000" + 
         "&chxs=0,676767,12.167,-0.5,l,676767" + 
         "&chxt=y" + 
         "&chs=1000x300" + 
         "&cht=ls" + 
         "&chco=3D7930" + 
         "&chds=0,1000" + 
         "&chd=t:" + values+ 
         "&chg=14.3,-1,1,1" + 
         "&chls=2,4,0" + 
         "&chma=0,6%7C3" + 
         "&chm=B,C5D4B5BB,0,0,0" + 
         "&chtt=Sensor+Values" + 
         "&chts=F00D0D,14.5"; 

       //if(request.getParameter("img") != null) 
        out.write("<img src=\"" + image + "\" />"); 

       statement = (Statement) connection.createStatement(); 
       /*resultSet = statement.executeQuery("select * from Sensors join " + 
         "(select * from Sensor_Entries order by EntryTime desc) as Sensor_Entries on " + 
         "(Sensors.SensorID=Sensor_Entries.SensorID) where Sensors.SensorID='" + id + "' " + 
         "group by Sensors.SensorID;");*/ 

       resultSet = statement.executeQuery("select * from Sensors join " + 
         "(select * from Sensor_Entries order by EntryTime desc) as Sensor_Entries on " + 
         "(Sensors.SensorID=Sensor_Entries.SensorID)"); /*where Sensors.SensorID='" + id + "' " + 
         "group by Sensors.SensorID;");*/ 

       ResultSetMetaData resultSetMetaData = (ResultSetMetaData) resultSet.getMetaData(); 
       if(resultSet.next()) { 
        out.write("<table>"); 
        for(int i = 1; i < resultSetMetaData.getColumnCount() + 1; i++) { 
         String value = ""; 
         int type = resultSetMetaData.getColumnType(i); 
         if(type == Types.INTEGER || type == Types.TINYINT) { 
          value = "" + resultSet.getInt(i); 
         } else if(type == Types.VARCHAR) { 
          value = resultSet.getString(i); 
         } else if(type == Types.TIMESTAMP) { 
          value = resultSet.getTimestamp(i).toString(); 
         } else if(type == Types.DOUBLE) { 
          value = "" + resultSet.getDouble(i); 
         } 

         //out.write("<tr>" + 
           // "<td>" + resultSetMetaData.getColumnName(i) + "</td>" + 
           // "<td>" + value + "</td>" + 
           //"</tr>"); 
        } 
        out.write("</table></center>"); 
       } 
       else 
        out.write(image); 
       out.flush(); 
       out.close(); 
      } catch (SQLException ignored) { ignored.printStackTrace(); } 
     } 

/** 
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
*/ 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    doGet(request, response); 

}

どのように私はNEW GRAPH私はVALUESは、値を持つ列に変更されますことを知っていることを条件とする10秒ごとに得ることができますか? ...私に助けてください...

答えて

1

ServletOutputStreamを複数回フラッシュすることはできません。それは不平を言うでしょう。いくつかの種類の識別子を持つバックグラウンド処理スレッドを作成し、クライアント側からajaxを使用して、現在の計算セットを取得してレンダリングする必要があります。

+0

私はそのことをどのようにしているのかわかりません...あなたが持っている以上に私を助けてくれますか? ..コードなんか? ...助けてください... – Becks

関連する問題