aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/database
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/traccar/database')
-rw-r--r--src/org/traccar/database/DataManager.java6
-rw-r--r--src/org/traccar/database/QueryBuilder.java35
2 files changed, 19 insertions, 22 deletions
diff --git a/src/org/traccar/database/DataManager.java b/src/org/traccar/database/DataManager.java
index f134f87cb..04695c4a5 100644
--- a/src/org/traccar/database/DataManager.java
+++ b/src/org/traccar/database/DataManager.java
@@ -37,6 +37,7 @@ import org.traccar.helper.Log;
import org.traccar.http.AsyncServlet;
import org.traccar.http.JsonConverter;
import org.traccar.model.Device;
+import org.traccar.model.MiscFormatter;
import org.traccar.model.Permission;
import org.traccar.model.Position;
import org.traccar.model.Server;
@@ -306,18 +307,17 @@ public class DataManager implements IdentityManager {
.setDate("time", position.getFixTime()) // tmp
.setLong("device_id", position.getDeviceId()) // tmp
.setLong("power", 0) // tmp
- .setString("extended_info", position.getOther()) // tmp
+ .setString("extended_info", MiscFormatter.toXmlString(position.getOther())) // tmp
.executeUpdate());
}
- // TODO: possibly remove this method
public void updateLatestPosition(Position position) throws SQLException {
QueryBuilder.create(dataSource, getQuery("database.updateLatestPosition"))
.setObject(position)
.setDate("time", position.getFixTime()) // tmp
.setLong("device_id", position.getDeviceId()) // tmp
.setLong("power", 0) // tmp
- .setString("extended_info", position.getOther()) // tmp
+ .setString("extended_info", MiscFormatter.toXmlString(position.getOther())) // tmp
.executeUpdate();
}
diff --git a/src/org/traccar/database/QueryBuilder.java b/src/org/traccar/database/QueryBuilder.java
index 17165db82..4afa5b992 100644
--- a/src/org/traccar/database/QueryBuilder.java
+++ b/src/org/traccar/database/QueryBuilder.java
@@ -15,6 +15,7 @@
*/
package org.traccar.database;
+import java.io.StringReader;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;
@@ -31,8 +32,11 @@ import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import javax.json.Json;
+import javax.json.JsonReader;
import javax.sql.DataSource;
import org.traccar.model.Factory;
+import org.traccar.model.MiscFormatter;
public class QueryBuilder {
@@ -224,23 +228,6 @@ public class QueryBuilder {
return this;
}
- public QueryBuilder setBytes(String name, byte[] value) throws SQLException {
- for (int i : indexes(name)) {
- try {
- if (value == null) {
- statement.setNull(i, Types.VARCHAR);
- } else {
- statement.setBytes(i, value);
- }
- } catch (SQLException error) {
- statement.close();
- connection.close();
- throw error;
- }
- }
- return this;
- }
-
public QueryBuilder setObject(Object object) throws SQLException {
Method[] methods = object.getClass().getMethods();
@@ -261,8 +248,8 @@ public class QueryBuilder {
setString(name, (String) method.invoke(object));
} else if (method.getReturnType().equals(Date.class)) {
setDate(name, (Date) method.invoke(object));
- } else if (method.getReturnType().equals(byte[].class)) {
- setBytes(name, (byte[]) method.invoke(object));
+ } else if (method.getReturnType().equals(Map.class)) {
+ setString(name, MiscFormatter.toJsonString((Map) method.invoke(object)));
}
} catch (IllegalAccessException | InvocationTargetException error) {
}
@@ -379,6 +366,16 @@ public class QueryBuilder {
}
}
});
+ } else if (parameterType.equals(Map.class)) {
+ processors.add(new ResultSetProcessor<T>() {
+ @Override
+ public void process(T object, ResultSet resultSet) throws SQLException {
+ try (JsonReader reader = Json.createReader(new StringReader(resultSet.getString(name)))) {
+ method.invoke(object, MiscFormatter.fromJson(reader.readObject()));
+ } catch (IllegalAccessException | InvocationTargetException error) {
+ }
+ }
+ });
}
}
}