2016-12-04 86 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”]}