public Set resultSetToHashSet()

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;
    }