使用 App Engine java servlet 动态创建和存储 csv 文件
Using app engine java servlet to dynamically create and store csv file
我有一个 java Web 应用程序,它使用 amCharts 绘制数据图表。我要绘制图表的数据存储在 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)
已经存在的文件的路径,我觉得这是不正确的。我想要实际发生的是检查文件是否存在,如果存在,它应该用这个新内容覆盖文件。
您无法写入 App Engine 上的文件。您有两个选择:
将此文件作为长字符串对象存储在数据存储中(必须小于 1MB)。
将其写入 Google 云存储中的文件。
我有一个 java Web 应用程序,它使用 amCharts 绘制数据图表。我要绘制图表的数据存储在 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)
已经存在的文件的路径,我觉得这是不正确的。我想要实际发生的是检查文件是否存在,如果存在,它应该用这个新内容覆盖文件。
您无法写入 App Engine 上的文件。您有两个选择:
将此文件作为长字符串对象存储在数据存储中(必须小于 1MB)。
将其写入 Google 云存储中的文件。