From 946978e44223beb5b4b202c80dce6319f9a5cc14 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Wed, 15 Jul 2015 22:55:09 +1200 Subject: Store extra data in JSON format --- src/org/traccar/database/QueryBuilder.java | 35 ++++++++++++++---------------- 1 file changed, 16 insertions(+), 19 deletions(-) (limited to 'src/org/traccar/database/QueryBuilder.java') 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() { + @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) { + } + } + }); } } } -- cgit v1.2.3