private static List<String> selectCoordinateIdsByNodeIds( Connection con, List<String> fatherPaths, CoordinatePK pk) throws SQLException { ResultSet rs = null; String fatherPath = ""; String whereClause = ""; String fatherId = ""; String rootFatherId = ""; int axisToMatch = fatherPaths.size(); if (fatherPaths != null) { Iterator<String> it = fatherPaths.iterator(); while (it.hasNext()) { fatherPath = it.next(); // enleve le premier /0/ fatherPath = fatherPath.substring(1); fatherPath = fatherPath.substring(fatherPath.indexOf('/') + 1, fatherPath.length()); // extrait l'id fatherId = fatherPath.substring(fatherPath.lastIndexOf('/') + 1, fatherPath.length()); // extrait l'id de la racine rootFatherId = fatherPath.substring(0, fatherPath.indexOf('/')); whereClause += " nodeId = " + fatherId; whereClause += " or (nodeId = " + rootFatherId + " and coordinatesLeaf = '1') "; if (it.hasNext()) { whereClause += " Or "; } } } String selectStatement = "select coordinatesId, count(*) " + "from " + pk.getTableName() + " "; if (fatherPaths != null && fatherPaths.size() > 0) { selectStatement += "where " + whereClause; } selectStatement += " And instanceId = '" + pk.getComponentName() + "' "; selectStatement += " GROUP BY coordinatesId"; PreparedStatement prepStmt = null; try { prepStmt = con.prepareStatement(selectStatement); rs = prepStmt.executeQuery(); List<String> list = new ArrayList<String>(); int coordinateId = 0; int nbMatches = 0; while (rs.next()) { coordinateId = rs.getInt(1); nbMatches = rs.getInt(2); if (nbMatches == axisToMatch) { list.add(new Integer(coordinateId).toString()); } } return list; } finally { DBUtil.close(rs, prepStmt); } }