У меня есть проблема, с которой я не могу разобраться.Я работал над этим в течение нескольких дней, но не могу найти проблему.
Я использую MySQLWorkBench для вставки и извлечения / чтения данных из.(Просто чтобы вы знали, откуда я получаю данные).
Проблема в том, что мой rs.next()
вызов захватит соответствующие данные, но перезапишет каждый индекс / запись в массиве более новой записью,Мой toString
метод в моем объектном классе также, кажется, делает это.
Обе эти проблемы неразрывно связаны.
Это мой класс объектов.
public class SensorData {
String tagid;
String attemptstatus;
String timestamp;
public SensorData(String tagid, String attemptstatus, String timestamp) {
super();
this.tagid = tagid;
this.attemptstatus = attemptstatus;
this.timestamp = timestamp;
}
// Constructors depending on which parameters are known
public SensorData(String timestamp, String attemptstatus) {
super();
this.timestamp = timestamp;
this.attemptstatus = attemptstatus;
this.tagid = "unknown";
}
public SensorData(String attempstatus) {
super();
this.tagid = "unknown";
this.attemptstatus = attempstatus;
this.timestamp = "unknown";
}
public String getTagIdValue() {
return tagid;
}
public void setTagIdValue(String tagid) {
this.tagid = tagid;
}
public String getTimeStampValue() {
return timestamp;
}
public void setTimeStampValue(String timestamp) {
this.timestamp = timestamp;
}
public String getAttemptStatus() {
return attemptstatus;
}
public void setAttemptStatus(String attemptstatus) {
this.attemptstatus = attemptstatus;
}
@Override
public String toString() {
return "SensorData [tagid=" + tagid + ", + attemptStatus=" + attemptstatus + ", timestamp=" + timestamp + "]";
}
И это мой вызов моей базы данных и попытка получить все соответствующиеинформация.
`private String retrieveSensorData (String sensorname) {
String selectSQL = "select * from sensorusage where tagid='" +
sensorname + "' order by timestamp asc";
ResultSet rs;
ArrayList<SensorData> allSensors = new ArrayList<SensorData>();
try {
rs = stmt.executeQuery(selectSQL);
SensorData oneSensor = new SensorData("","","");
while (rs.next()) {
oneSensor.setTagIdValue(rs.getString("tagid"));
oneSensor.setAttemptStatus(rs.getString("attemptstatus"));
oneSensor.setTimeStampValue(rs.getString("timestamp"));
allSensors.add(oneSensor);
System.out.println(allSensors.toString());
}
} catch (SQLException ex) {
System.out.println("Error in SQL " + ex.getMessage());
}
String allSensorsJson = gson.toJson(allSensors);
System.out.println("-----------------");
System.out.println(allSensorsJson);
return allSensorsJson;
}`
Теоретически это должно работать, однако это вывод в моей консоли.
Это вывод консоли массива allSensors
[{"tagid":"Card3","attemptstatus":"Failed","timestamp":"2018-11-29 00:09:53.0"},{"tagid":"Card3","attemptstatus":"Failed","timestamp":"2018-11-29 00:09:53.0"},{"tagid":"Card3","attemptstatus":"Failed","timestamp":"2018-11-29 00:09:53.0"},{"tagid":"Card3","attemptstatus":"Failed","timestamp":"2018-11-29 00:09:53.0"},{"tagid":"Card3","attemptstatus":"Failed","timestamp":"2018-11-29 00:09:53.0"}]
А это вывод моего toString()
в моем классе объектов, обратите внимание, как каждая запись (ключ метки времени будетпоможет вам увидеть это) перезаписывается последней записью:
[SensorData [tagid=Card3, + attemptStatus=Failed, timestamp=2018-11-28 23:43:26.0]]
[SensorData [tagid=Card3, + attemptStatus=Failed, timestamp=2018-11-28 23:53:05.0], SensorData [tagid=Card3, + attemptStatus=Failed, timestamp=2018-11-28 23:53:05.0]]
[SensorData [tagid=Card3, + attemptStatus=Failed, timestamp=2018-11-28 23:54:48.0], SensorData [tagid=Card3, + attemptStatus=Failed, timestamp=2018-11-28 23:54:48.0], SensorData [tagid=Card3, + attemptStatus=Failed, timestamp=2018-11-28 23:54:48.0]]
[SensorData [tagid=Card3, + attemptStatus=Failed, timestamp=2018-11-28 23:56:05.0], SensorData [tagid=Card3, + attemptStatus=Failed, timestamp=2018-11-28 23:56:05.0], SensorData [tagid=Card3, + attemptStatus=Failed, timestamp=2018-11-28 23:56:05.0], SensorData [tagid=Card3, + attemptStatus=Failed, timestamp=2018-11-28 23:56:05.0]]
[SensorData [tagid=Card3, + attemptStatus=Failed, timestamp=2018-11-29 00:09:53.0], SensorData [tagid=Card3, + attemptStatus=Failed, timestamp=2018-11-29 00:09:53.0], SensorData [tagid=Card3, + attemptStatus=Failed, timestamp=2018-11-29 00:09:53.0], SensorData [tagid=Card3, + attemptStatus=Failed, timestamp=2018-11-29 00:09:53.0], SensorData [tagid=Card3, + attemptStatus=Failed, timestamp=2018-11-29 00:09:53.0]]
В конце концов, у меня есть вывод на моей веб-странице, в котором указано правильное количество записей, но все с одинаковыми данными.
Программа выдает правильное количество результатов, например, правильное количество записей с данным tagid, но постоянно добавляет последнюю запись для максимально возможного количества записей, т. Е. Если есть 10 записей, где tagid = "card10", то яполучит 10 записей с одинаковыми данными.Программа добавит / сделает 10 экземпляров самой последней информации.
Кто-нибудь знает, в чем проблема?
Спасибо.