aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2015-06-29 09:41:29 +1200
committerAnton Tananaev <anton.tananaev@gmail.com>2015-06-29 09:41:29 +1200
commit88b3f00f3855aa408c7859051efdcb5b37fe559f (patch)
tree7cb87b275298c7b15679fe07c19bf0ca1dd6dda8
parentcc893062eb540a198dc8c20c1379e94b5719fd5c (diff)
downloadtraccar-server-88b3f00f3855aa408c7859051efdcb5b37fe559f.tar.gz
traccar-server-88b3f00f3855aa408c7859051efdcb5b37fe559f.tar.bz2
traccar-server-88b3f00f3855aa408c7859051efdcb5b37fe559f.zip
Fix postgres generated keys problem (fix #480)
-rw-r--r--src/org/traccar/database/DataManager.java6
-rw-r--r--src/org/traccar/database/QueryBuilder.java18
2 files changed, 16 insertions, 8 deletions
diff --git a/src/org/traccar/database/DataManager.java b/src/org/traccar/database/DataManager.java
index 8b1ff2c2e..496a5a1b6 100644
--- a/src/org/traccar/database/DataManager.java
+++ b/src/org/traccar/database/DataManager.java
@@ -227,7 +227,7 @@ public class DataManager {
}
public void addUser(User user) throws SQLException {
- user.setId(QueryBuilder.create(dataSource, getQuery("database.insertUser"))
+ user.setId(QueryBuilder.create(dataSource, getQuery("database.insertUser"), true)
.setObject(user)
.executeUpdate());
Context.getPermissionsManager().refresh();
@@ -269,7 +269,7 @@ public class DataManager {
}
public void addDevice(Device device) throws SQLException {
- device.setId(QueryBuilder.create(dataSource, getQuery("database.insertDevice"))
+ device.setId(QueryBuilder.create(dataSource, getQuery("database.insertDevice"), true)
.setObject(device)
.executeUpdate());
}
@@ -306,7 +306,7 @@ public class DataManager {
}
public void addPosition(Position position) throws SQLException {
- position.setId(QueryBuilder.create(dataSource, getQuery("database.insertPosition"))
+ position.setId(QueryBuilder.create(dataSource, getQuery("database.insertPosition"), true)
.setObject(position)
.setDate("time", position.getFixTime()) // tmp
.setLong("device_id", position.getDeviceId()) // tmp
diff --git a/src/org/traccar/database/QueryBuilder.java b/src/org/traccar/database/QueryBuilder.java
index 23d8c6bfa..5e5c163a3 100644
--- a/src/org/traccar/database/QueryBuilder.java
+++ b/src/org/traccar/database/QueryBuilder.java
@@ -41,14 +41,18 @@ public class QueryBuilder {
private PreparedStatement statement;
private final String query;
- private QueryBuilder(DataSource dataSource, String query) throws SQLException {
+ private QueryBuilder(DataSource dataSource, String query, boolean returnGeneratedKeys) throws SQLException {
indexMap = new HashMap<String, List<Integer>>();
connection = dataSource.getConnection();
this.query = query;
if (query != null) {
- String parsedQuery = parse(query, indexMap);
+ String parsedQuery = parse(query.trim(), indexMap);
try {
- statement = connection.prepareStatement(parsedQuery, Statement.RETURN_GENERATED_KEYS);
+ if (returnGeneratedKeys) {
+ statement = connection.prepareStatement(parsedQuery, Statement.RETURN_GENERATED_KEYS);
+ } else {
+ statement = connection.prepareStatement(parsedQuery);
+ }
} catch (SQLException error) {
connection.close();
throw error;
@@ -115,9 +119,13 @@ public class QueryBuilder {
return parsedQuery.toString();
}
-
+
public static QueryBuilder create(DataSource dataSource, String query) throws SQLException {
- return new QueryBuilder(dataSource, query);
+ return new QueryBuilder(dataSource, query, false);
+ }
+
+ public static QueryBuilder create(DataSource dataSource, String query, boolean returnGeneratedKeys) throws SQLException {
+ return new QueryBuilder(dataSource, query, returnGeneratedKeys);
}
private List<Integer> indexes(String name) {