in signature/src/main/java/com/chemistry/enotebook/signature/database/DatabaseConnector.java [320:374]
public Set<Map> resultSetToHashSet(ResultSet rs) throws SQLException{
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
Set<Map> table = new HashSet<Map>();
while (rs.next()){
HashMap row = new HashMap();
for(int i=1; i<=columns; i++){
String columnName = md.getColumnName(i);
Object columnData = rs.getObject(i);
if (columnName != null) {
// In PostgreSQL - sql type UUID, in Oracle - sql type varchar
if (uuidColumns.contains(columnName.toLowerCase())) {
if (columnData instanceof String) {
columnData = UUID.fromString((String) columnData);
}
}
// In PostgreSQL - sql type BOOLEAN, in Oracle - CHAR
if (booleanColumns.contains(columnName.toLowerCase())) {
if (columnData instanceof String) {
columnData = Boolean.valueOf((String) columnData);
}
}
// In PostgreSQL - SMALLINT maps to Integer, in Oracle - to BigDecimal
if (columnData instanceof Number) {
columnData = ((Number) columnData).intValue();
}
// oracle.sql.CLOB - to String
if (columnData instanceof Clob) {
columnData = ((Clob) columnData).getSubString(1, (int) ((Clob) columnData).length());
}
// oracle.sql.BLOB - to byte[]
if (columnData instanceof Blob) {
columnData = ((Blob) columnData).getBytes(1, (int) ((Blob) columnData).length());
}
// Oracle TIMESTAMP - to Java Timestamp
if (columnData != null && columnData.getClass().getName().contains("oracle.sql.TIMESTAMP")) {
try {
Method method = columnData.getClass().getMethod("timestampValue");
columnData = method.invoke(columnData);
} catch (Exception e) {
columnData = null;
}
}
// In Oracle - column names in UPPER CASE, we should use lower case
columnName = columnName.toLowerCase();
}
row.put(columnName, columnData);
}
table.add(row);
}
return table;
}