diff --git a/src/main/java/it/unibz/inf/isochrone/db/Database.java b/src/main/java/it/unibz/inf/isochrone/db/Database.java index 697909fe84058c426090115ac9758745340bf672..201f307b61423df28b04e67502d784aba141f22c 100644 --- a/src/main/java/it/unibz/inf/isochrone/db/Database.java +++ b/src/main/java/it/unibz/inf/isochrone/db/Database.java @@ -42,6 +42,7 @@ import java.util.Set; * @version 2.2 */ public class Database { + private static final String[] PRECACHED_PLACEHOLDERS; protected static final byte NW_MODE_CONTINUOUS = 0; protected static final byte NW_MODE_DISCRETE = 1; private final String queryEarliestArrivalTimeHomo; @@ -67,6 +68,16 @@ public class Database { protected Mode mode; protected boolean isIncoming; + // Static block + + static { + final int preachingLength = 10; + PRECACHED_PLACEHOLDERS = new String[preachingLength]; + for (int i = 0; i < preachingLength; ++i) { + PRECACHED_PLACEHOLDERS[i] = preparePlaceHolders(i); + } + } + // Constructor public Database(final ConfigDataset config, final Mode mode, final Direction direction) { @@ -84,7 +95,7 @@ public class Database { + " WHERE SOURCE = ? AND TARGET = ? AND ROUTE_ID IN (%S) AND (TIME_D BETWEEN ? AND ?) AND SERVICE_ID IN (%S) AND TIME_A <= ?"; queryLatestDepartureTimeHomo = "SELECT TIME_D, TIME_A, ROUTE_ID FROM " + configSchedule - + " WHERE SOURCE = ? AND TARGET = ? AND ROUTE_ID IN (%S) AND (TIME_A BETWEEN ? AND ?) AND SERVICE_ID IN (%S) AND TIME_D >= ?"; + + " WHERE SOURCE = ? AND TARGET = ? AND ROUTE_ID IN (%S) AND (TIME_A BETWEEN ? AND ?) AND SERVICE_ID IN (%S) AND TIME_D >= ?"; queryGetAllEdges = "SELECT ID, SOURCE, TARGET, LENGTH, EDGE_MODE, ROUTE_ID FROM " + configEdges; @@ -742,6 +753,9 @@ public class Database { if (length <= 0) { return ""; } + if (length < PRECACHED_PLACEHOLDERS.length) { + return PRECACHED_PLACEHOLDERS[length]; + } final StringBuilder builder = new StringBuilder((2 * length) - 1); builder.append("?");