-2
我試圖檢索存儲在與傳感器名稱匹配的數據庫中的所有值。收集數據庫中的所有行
但是代碼運行,它只輸出數據庫中的最終值。
String info = "test info"
String sensorNameStr = "test sensor name";
String sensorValueStr = "test sensor value";
String selectSQL = "select sensorvalue from sensorUsage where "+
" sensorname = '" + sensorNameStr +
"' order by TimeInserted asc";
String retrievedSensorData = "no data available";
try {
PreparedStatement pst = conn.prepareStatement(selectSQL);
ResultSet rs = pst.executeQuery();
while (rs.next()) {
retrievedSensorData = rs.getString(1);
}
} catch (SQLException ex) {
System.out.println("Error in SQL " + ex.getMessage());
}
String json = "{\"sensor\": {\"" + sensorNameStr +
"\": \"" + retrievedSensorData + "\"}}";
System.out.println("DEBUG: json return: "+json);
我必須創建一個for循環,以便所有的值都返回並輸出到網頁上嗎?這就是我如何在不手動進入服務器的情況下查看數據。另外,如果我這樣做,是否有可能只接收最後幾個插入的傳感器值?
幫助將不勝感激!
你已經有一個循環。但是在每次迭代時,都會覆蓋下一個存儲在retrieveSensorData中的以前的值。將所有值存儲在列表中,並將該列表轉換爲JSON。您還需要了解準備好的語句(例如,如果名稱包含引號,會發生什麼情況)。而且你還應該使用像傑克遜這樣的JSON映射器,而不是自己生成JSON,並且再次無法轉義特殊字符。 –
與您的問題無關,但必須關閉Connection/PreparedStatement/ResultSet,否則會泄漏DB資源(在大多數數據庫驅動程序上)。使用try-with-resources自動關閉它們(https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html) – AlexC