【问题标题】:Using app engine java servlet to dynamically create and store csv file使用app engine java servlet动态创建和存储csv文件
【发布时间】:2015-05-25 21:05:57
【问题描述】:

我有一个使用 amCharts 绘制数据的 java web 应用程序。我要绘制的数据存储在 SQL 数据库中。我有一个 servlet,它查询数据库中我想要绘制的数据并将其格式化为逗号分隔的 csv 格式。我遇到问题的部分是在创建此格式化数据后将其存储到文件中,然后能够稍后(通过真实路径)访问此文件,以便我可以更新图表。

这是我目前所拥有的 servlet:

public class CreateCsvServlet extends HttpServlet{

public void doGet(HttpServletRequest req, HttpServletResponse response)  throws IOException, ServletException{
    String macAdd = (String) req.getSession().getAttribute("macAddress");

    String path =  getServletContext().getRealPath("/powerData.txt");   //the file "powerData.txt" is an empty file that was deployed with the web app

    final String DB_URL="jdbc:google:mysql://mydatabase:iot?user=root";
    Statement stmt = null;
    Connection conn = null;            

      try{
         // Register JDBC driver
         Class.forName("com.mysql.jdbc.GoogleDriver");

         // Open a connection
         conn = DriverManager.getConnection(DB_URL);

         // Execute SQL query
         stmt = conn.createStatement();

         String sql = "SELECT `wattSeconds`,`time` FROM `iot_data`.`Usage Data` WHERE `MACAddress`='" + macAdd +"'";

         rs = stmt.executeQuery(sql);

         PrintWriter csvWriter = new PrintWriter(new File(path));

         // Extract data from result set
         while(rs.next()){
            //Retrieve by column name
            String watt  = rs.getString("wattSeconds");
            String time = rs.getString("time");
            String row = watt + "," + time;

            csvWriter.println(row) ;
         } 

         csvWriter.close(); 

         // Clean-up environment
         rs.close();
         stmt.close();
         conn.close();
      }catch(SQLException se){
         //Handle errors for JDBC
         se.printStackTrace();
      }

我正在尝试使用 PrintWriter 写入文件,但我不确定这是否是正确的方法。另外,我将已经存在的文件的路径提供给new File(path),我觉得这是不正确的。我想要实际发生的是检查文件是否存在,如果存在,它应该用这个新内容覆盖文件。

【问题讨论】:

    标签: java mysql google-app-engine servlets amcharts


    【解决方案1】:

    您无法写入 App Engine 上的文件。你有两个选择:

    1. 将此文件作为长字符串对象存储在数据存储中(必须小于 1MB)。

    2. 将其写入 Google Cloud Storage 中的文件。

    【讨论】:

    • 哦,我不知道这个,谢谢你指出我正确的方向!
    • 很高兴为您提供帮助。如果它解决了您的问题,您可以接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    相关资源
    最近更新 更多