-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