aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/database/DataManager.java
diff options
context:
space:
mode:
authorVitaly Litvak <vitavaque@gmail.com>2014-10-10 00:00:10 +0400
committerVitaly Litvak <vitavaque@gmail.com>2014-10-10 11:34:09 +0400
commita46259ebcfeaeca70306886feb2bc424a1bdee52 (patch)
tree8da68c44f82b0cdce1bdc90eb0f57beba1dea187 /src/org/traccar/database/DataManager.java
parenta1edb0aefe22fbb2496c9f4c665750819dab9857 (diff)
downloadtraccar-server-a46259ebcfeaeca70306886feb2bc424a1bdee52.tar.gz
traccar-server-a46259ebcfeaeca70306886feb2bc424a1bdee52.tar.bz2
traccar-server-a46259ebcfeaeca70306886feb2bc424a1bdee52.zip
Refactored NamedParameterStatement to manage connections and prepared statements all by itself
Diffstat (limited to 'src/org/traccar/database/DataManager.java')
-rw-r--r--src/org/traccar/database/DataManager.java119
1 files changed, 46 insertions, 73 deletions
diff --git a/src/org/traccar/database/DataManager.java b/src/org/traccar/database/DataManager.java
index 27f4cb5c2..bb44c6389 100644
--- a/src/org/traccar/database/DataManager.java
+++ b/src/org/traccar/database/DataManager.java
@@ -91,45 +91,36 @@ public class DataManager {
query = properties.getProperty("database.selectDevice");
if (query != null) {
- queryGetDevices = new NamedParameterStatement(query);
+ queryGetDevices = new NamedParameterStatement(query, dataSource);
}
query = properties.getProperty("database.insertPosition");
if (query != null) {
- queryAddPosition = new NamedParameterStatement(query);
+ queryAddPosition = new NamedParameterStatement(query, dataSource, Statement.RETURN_GENERATED_KEYS);
}
query = properties.getProperty("database.updateLatestPosition");
if (query != null) {
- queryUpdateLatestPosition = new NamedParameterStatement(query);
+ queryUpdateLatestPosition = new NamedParameterStatement(query, dataSource);
}
}
- public synchronized List<Device> getDevices() throws SQLException {
-
- List<Device> deviceList = new LinkedList<Device>();
+ private final NamedParameterStatement.ResultSetProcessor<Device> deviceResultSetProcessor = new NamedParameterStatement.ResultSetProcessor<Device>() {
+ @Override
+ public Device processNextRow(ResultSet rs) throws SQLException {
+ Device device = new Device();
+ device.setId(rs.getLong("id"));
+ device.setImei(rs.getString("imei"));
+ return device;
+ }
+ };
+ public List<Device> getDevices() throws SQLException {
if (queryGetDevices != null) {
- Connection connection = dataSource.getConnection();
- try {
- PreparedStatement statement = queryGetDevices.prepare(connection);
- try {
- ResultSet result = statement.executeQuery();
- while (result.next()) {
- Device device = new Device();
- device.setId(result.getLong("id"));
- device.setImei(result.getString("imei"));
- deviceList.add(device);
- }
- } finally {
- statement.close();
- }
- } finally {
- connection.close();
- }
+ return queryGetDevices.prepare().executeQuery(deviceResultSetProcessor);
+ } else {
+ return new LinkedList<Device>();
}
-
- return deviceList;
}
/**
@@ -149,61 +140,41 @@ public class DataManager {
return devices.get(imei);
}
- public synchronized Long addPosition(Position position) throws SQLException {
+ private NamedParameterStatement.ResultSetProcessor<Long> generatedKeysResultSetProcessor = new NamedParameterStatement.ResultSetProcessor<Long>() {
+ @Override
+ public Long processNextRow(ResultSet rs) throws SQLException {
+ return rs.getLong(1);
+ }
+ };
+ public synchronized Long addPosition(Position position) throws SQLException {
if (queryAddPosition != null) {
- Connection connection = dataSource.getConnection();
- try {
- PreparedStatement statement = queryAddPosition.prepare(connection, Statement.RETURN_GENERATED_KEYS);
- try {
- assignVariables(queryAddPosition, statement, position);
- statement.executeUpdate();
-
- ResultSet result = statement.getGeneratedKeys();
- if (result != null && result.next()) {
- return result.getLong(1);
- }
- } finally {
- statement.close();
- }
- } finally {
- connection.close();
+ List<Long> result = assignVariables(queryAddPosition.prepare(), position).executeUpdate(generatedKeysResultSetProcessor);
+ if (result != null && !result.isEmpty()) {
+ return result.iterator().next();
}
}
-
return null;
}
public void updateLatestPosition(Position position, Long positionId) throws SQLException {
if (queryUpdateLatestPosition != null) {
- Connection connection = dataSource.getConnection();
- try {
- PreparedStatement statement = queryUpdateLatestPosition.prepare(connection);
- try {
- assignVariables(queryUpdateLatestPosition, statement, position);
- queryUpdateLatestPosition.setLong(statement, "id", positionId);
- statement.executeUpdate();
- } finally {
- statement.close();
- }
- } finally {
- connection.close();
- }
+ assignVariables(queryUpdateLatestPosition.prepare(), position).setLong("id", positionId).executeUpdate();
}
}
- private void assignVariables(NamedParameterStatement nps, PreparedStatement ps, Position position) throws SQLException {
+ private NamedParameterStatement.Params assignVariables(NamedParameterStatement.Params params, Position position) throws SQLException {
- nps.setLong(ps, "device_id", position.getDeviceId());
- nps.setTimestamp(ps, "time", position.getTime());
- nps.setBoolean(ps, "valid", position.getValid());
- nps.setDouble(ps, "altitude", position.getAltitude());
- nps.setDouble(ps, "latitude", position.getLatitude());
- nps.setDouble(ps, "longitude", position.getLongitude());
- nps.setDouble(ps, "speed", position.getSpeed());
- nps.setDouble(ps, "course", position.getCourse());
- nps.setString(ps, "address", position.getAddress());
- nps.setString(ps, "extended_info", position.getExtendedInfo());
+ params.setLong("device_id", position.getDeviceId());
+ params.setTimestamp("time", position.getTime());
+ params.setBoolean("valid", position.getValid());
+ params.setDouble("altitude", position.getAltitude());
+ params.setDouble("latitude", position.getLatitude());
+ params.setDouble("longitude", position.getLongitude());
+ params.setDouble("speed", position.getSpeed());
+ params.setDouble("course", position.getCourse());
+ params.setString("address", position.getAddress());
+ params.setString("extended_info", position.getExtendedInfo());
// DELME: Temporary compatibility support
XPath xpath = XPathFactory.newInstance().newXPath();
@@ -211,22 +182,24 @@ public class DataManager {
InputSource source = new InputSource(new StringReader(position.getExtendedInfo()));
String index = xpath.evaluate("/info/index", source);
if (!index.isEmpty()) {
- nps.setLong(ps, "id", Long.valueOf(index));
+ params.setLong("id", Long.valueOf(index));
} else {
- nps.setLong(ps, "id", null);
+ params.setLong("id", null);
}
source = new InputSource(new StringReader(position.getExtendedInfo()));
String power = xpath.evaluate("/info/power", source);
if (!power.isEmpty()) {
- nps.setDouble(ps, "power", Double.valueOf(power));
+ params.setDouble("power", Double.valueOf(power));
} else {
- nps.setLong(ps, "power", null);
+ params.setLong("power", null);
}
} catch (XPathExpressionException e) {
Log.warning("Error in XML: " + position.getExtendedInfo(), e);
- nps.setLong(ps, "id", null);
- nps.setLong(ps, "power", null);
+ params.setLong("id", null);
+ params.setLong("power", null);
}
+
+ return params;
}
}