Browse Source

Fix SQL upgrade script.

pull/619/head
Igor Kulikov 9 years ago
parent
commit
d6a3fff891
  1. 24
      application/src/main/java/org/thingsboard/server/service/install/sql/SqlDbHelper.java

24
application/src/main/java/org/thingsboard/server/service/install/sql/SqlDbHelper.java

@ -45,11 +45,7 @@ public class SqlDbHelper {
public static Path dumpTableIfExists(Connection conn, String tableName,
String[] columns, String[] defaultValues, String dumpPrefix, boolean printHeader) throws Exception {
DatabaseMetaData metaData = conn.getMetaData();
ResultSet res = metaData.getTables(null, null, tableName,
new String[] {"TABLE"});
if (res.next()) {
res.close();
if (tableExists(conn, tableName)) {
Path dumpFile = Files.createTempFile(dumpPrefix, null);
Files.deleteIfExists(dumpFile);
CSVFormat csvFormat = CSV_DUMP_FORMAT;
@ -61,9 +57,9 @@ public class SqlDbHelper {
try (ResultSet tableRes = stmt.executeQuery()) {
ResultSetMetaData resMetaData = tableRes.getMetaData();
Map<String, Integer> columnIndexMap = new HashMap<>();
for (int i = 0; i < resMetaData.getColumnCount(); i++) {
for (int i = 1; i <= resMetaData.getColumnCount(); i++) {
String columnName = resMetaData.getColumnName(i);
columnIndexMap.put(columnName, i);
columnIndexMap.put(columnName.toUpperCase(), i);
}
while(tableRes.next()) {
dumpRow(tableRes, columnIndexMap, columns, defaultValues, csvPrinter);
@ -77,6 +73,15 @@ public class SqlDbHelper {
}
}
private static boolean tableExists(Connection conn, String tableName) {
try (Statement stmt = conn.createStatement()) {
stmt.executeQuery("select * from " + tableName + " where 1=0");
return true;
} catch (Exception e) {
return false;
}
}
public static void loadTable(Connection conn, String tableName, String[] columns, Path sourceFile) throws Exception {
loadTable(conn, tableName, columns, sourceFile, false);
}
@ -89,7 +94,6 @@ public class SqlDbHelper {
csvFormat = CSV_DUMP_FORMAT.withHeader(columns);
}
try (PreparedStatement prepared = conn.prepareStatement(createInsertStatement(tableName, columns))) {
prepared.getParameterMetaData();
try (CSVParser csvParser = new CSVParser(Files.newBufferedReader(sourceFile), csvFormat)) {
csvParser.forEach(record -> {
try {
@ -122,13 +126,13 @@ public class SqlDbHelper {
}
private static String getColumnValue(String column, String defaultValue, Map<String, Integer> columnIndexMap, ResultSet res) {
int index = columnIndexMap.containsKey(column) ? columnIndexMap.get(column) : -1;
int index = columnIndexMap.containsKey(column.toUpperCase()) ? columnIndexMap.get(column.toUpperCase()) : -1;
if (index > -1) {
String str;
try {
Object obj = res.getObject(index);
if (obj == null) {
str = "";
return null;
} else {
str = obj.toString();
}

Loading…
Cancel
Save