[英]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上寫入文件。 您有兩種選擇:
將此文件作為長String對象存儲在數據存儲區中(該文件必須小於1MB)。
將其寫入Google Cloud Storage中的文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.