메뉴 건너뛰기

Cloudera, BigData, Semantic IoT, Hadoop, NoSQL

Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.


Mariadb에 접근하여 쿼리를 수행하고 필요시 정렬하여 List<Map<String, String>>에 담아서 리턴하는 메세드 예제


private final List<Map<String, String>> getResult (String query, String[] idxVals) throws Exception {
String db_server = ;
String db_port = ;
String db_name = ;
String db_user = ;
String db_pass = ;

Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;

List<Map<String, String>> list = new ArrayList<Map<String, String>>();

try {
Class.forName("org.mariadb.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mariadb://" + db_server + ":" + db_port + "/" + db_name, db_user,  db_pass);

pstmt = conn.prepareStatement(query);
rs = pstmt.executeQuery();

int cnt = 0;

ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
while (rs.next()){
   HashMap<String,String> row = new HashMap<String, String>(columns);
   for(int i=1; i<=columns; i++){           
   row.put(md.getColumnName(i), rs.getObject(i).toString());
   }
   //log.debug("row("+(cnt++)+")  ===========>"+row.toString());
    list.add(row);
}

// 정렬(test)
        // Collections.sort(list, new MapStringComparator("rest_type"));
        //Collections.sort(list, new MapStringComparator("corner_id"));
        //Collections.sort(list, new MapFloatComparator("cnt"));
        
return list;
} catch (Exception e) {
throw e;
} finally {
if (rs != null)
try {
rs.close();
} catch (SQLException sqle) {
}
if (pstmt != null)
try {
pstmt.close();
} catch (SQLException sqle) {
}
if (conn != null) {
try {
conn.close();
} catch (SQLException sqle) {
}
}
}
}


*정렬을 위해서 사용되는 클래스(문자열)

class MapStringComparator implements Comparator<Map<String, String>> {
private final String key;

public MapStringComparator(String key) {
this.key = key;
}

@Override
public int compare(Map<String, String> first, Map<String, String> second) {
String firstValue =first.get(key);
        String secondValue = second.get(key);
        
         // 내림차순 정렬
             return firstValue.compareTo(secondValue);
}
}


*정렬을 위해서 사용되는 클래스(숫자)

class MapFloatComparator implements Comparator<Map<String, String>> {
private final String key;

public MapFloatComparator(String key) {
this.key = key;
}

@Override
public int compare(Map<String, String> first, Map<String, String> second) {
float firstValue = Float.valueOf(first.get(key));
         float secondValue = Float.valueOf(second.get(key));
         
// 내림차순 정렬
         if (firstValue > secondValue) {
             return -1;
         } else if (firstValue < secondValue) {
             return 1;
         } else /* if (firstValue == secondValue) */ {
             return 0;
         }
}
}


위로