/** * sqlite의 relation을 만든다. * * @param userDB * @return */ private static List<ReferencedTableDAO> makeSQLiteRelation(UserDBDAO userDB) { List<ReferencedTableDAO> listRealRefTableDAO = new ArrayList<ReferencedTableDAO>(); try { // 실제 레퍼런스를 생성합니다. for (SQLiteRefTableDAO sqliteRefTableDAO : getSQLiteRefTbl(userDB)) { int indexKey = StringUtils.indexOf(sqliteRefTableDAO.getSql(), "FOREIGN KEY"); String forKey = sqliteRefTableDAO.getSql().substring(indexKey); if (logger.isDebugEnabled()) logger.debug("\t full text:" + sqliteRefTableDAO.getSql()); if (logger.isDebugEnabled()) logger.debug("\t=================>[forKeys]\n" + forKey); String[] foreignInfo = forKey.split("FOREIGN KEY"); for (int i = 1; i < foreignInfo.length; i++) { try { String strForeign = foreignInfo[i]; if (logger.isDebugEnabled()) logger.debug("\t ==========================> sub[\n" + strForeign + "]"); ReferencedTableDAO ref = new ReferencedTableDAO(); // 테이블 명 ref.setTable_name(sqliteRefTableDAO.getTbl_name()); // 컬럼명, 첫번째 ( 시작 부터 ) 끝날때까지... String colName = StringUtils.substringBetween(strForeign, "(", ")"); // 참조 테이블, REFERENCES 로 시작 하는 다음 부터 (까지 String refTbName = StringUtils.substringBetween(strForeign, "REFERENCES", "("); // 참조 컬럼, refTbName의 끝나는 것부터 ) 까지... String refCol = StringUtils.substringBetween(strForeign, refTbName + "(", ")"); ref.setColumn_name(moveSpec(colName)); ref.setReferenced_table_name(moveSpec(refTbName)); ref.setReferenced_column_name(moveSpec(refCol)); // sqlite는 인덱스 네임이 없으므로.... 생성합니다. ref.setConstraint_name(ref.toString()); listRealRefTableDAO.add(ref); } catch (Exception e) { logger.error("SQLLite Relation making", e); } } // inner if } // last for } catch (Exception e) { logger.error("SQLite Relation check 2", e); } return listRealRefTableDAO; }