2016-12-04 70 views
-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循環,以便所有的值都返回並輸出到網頁上嗎?這就是我如何在不手動進入服務器的情況下查看數據。另外,如果我這樣做,是否有可能只接收最後幾個插入的傳感器值?

幫助將不勝感激!

+2

你已經有一個循環。但是在每次迭代時,都會覆蓋下一個存儲在retrieveSensorData中的以前的值。將所有值存儲在列表中,並將該列表轉換爲JSON。您還需要了解準備好的語句(例如,如果名稱包含引號,會發生什麼情況)。而且你還應該使用像傑克遜這樣的JSON映射器,而不是自己生成JSON,並且再次無法轉義特殊字符。 –

+1

與您的問題無關,但必須關閉Connection/PreparedStatement/ResultSet,否則會泄漏DB資源(在大多數數據庫驅動程序上)。使用try-with-resources自動關閉它們(https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html) – AlexC

回答

0

在您的SQL查詢中,您只檢索列sensorvalue中的行,全部屬於特定sensorname。沒有其他條件。 所以應該容易使一個Json with the Java EE API

// ... 
JsonObject model = null; 

try 
{ 
    // ... 
    ResultSet rs = stmt.executeQuery(); 

    JsonArrayBuilder jsonArrayBuilder = Json.createArrayBuilder(); 

    while(rs.next()) 
    { 
     jsonArrayBuilder.add(rs.getString("sensorvalue")); 
    } 

    JsonObjectBuilder jsonObjectBuilder = Json.createObjectBuilder(); 
    jsonObjectBuilder.add("sensorvalues", jsonArrayBuilder); 
    model = jsonObjectBuilder.build(); 
} 
catch (Exception e) 
{ 
    System.out.println(e); 
} 

response.setContentType("application/json; charset=utf-8"); 

StringWriter stWriter = new StringWriter(); 
JsonWriter jsonWriter = Json.createWriter(stWriter); 
jsonWriter.writeObject((JsonObject) model); 
jsonWriter.close(); 

response.getWriter().append(stWriter.toString()); 

輸出應該是這樣的:

{ 「sensorvalues」:[ 「1」, 「2」]}