Мне нужно решить эту проблему:
- представьте, что у вас есть файл conf, содержащий один или несколько sql запросов.
- все sql запросы должны точно возвращаться такое же количество столбцов.
Как только конфигурация загружена и все sql запросы сохранены в строковом массиве, как я могу проанализировать каждый запрос, чтобы узнать количество возвращенных столбцов.
Если синтаксис простой (SELECT a, b, c FROM test WHERE ...), довольно просто разрезать между SELECT и FROM, а затем разделить на «,» и считать. Но этого недостаточно, если есть используемые функции (SELECT a, concat (b, c), d ОТ теста WHERE ...)
Чтобы уточнить, у меня есть такой код:
ArrayList<String> requests_list = new ArrayList<String>();
// ...
// ... loading requests from a file in requests_list
// ...
String[] requests_tab = requests_list.toArray(new String[requests_list.size()]);
int numcols = numberOfColumnsInSqlRequest(requests_tab[0]);
for(int i=1; i<requests_tab.length; i++){
int nbcols = numberOfColumnsInSqlRequest(requests_tab[i]);
if(nbcols != numcols){
logger.error("all sql requests does not return the same number of columns");
return false;
}
}
Пока у меня есть это:
private static int numberOfColumnsInSqlRequest(String request){
String lcrequest = request.toLowerCase();
String ln = System.getProperty("line.separator");
Pattern pattern = Pattern.compile("[\t "+ln+"]from[\t "+ln+"]");
Matcher matcher = pattern.matcher(lcrequest);
matcher.find();
String select = request.substring(0, matcher.start());
String[] tab = select.split(",");
return tab.length;
}
Но я бы хотел улучшить это
Спасибо за вашу помощь