Мне нужно извлечь некоторые данные из простого оператора создания sql. Я решил использовать регулярное выражение для этой цели. Все нормально, пока я не положил NOT istead из NOT NULL/NULL, а не specyfiing "nullability"
тоже работает (возвращается нуль в группе по назначению). При установке только NOT он пропускает имя столбца.Извлечение данных из оператора sql create с помощью regex
У меня есть следующий код (атм только отпечатки включены, не обрабатывают извлеченные данные событие) (Использование находок в пределах горизонта, потому что операторы могут быть отформатированы по-разному)
String input = "CREATE TABLE IF NOT EXISTS Types_of_classes("
+ "columnname INTEGER NOT PRIMARY KEY,"
+ "name TEXT,"
+ "name2 datatype);";
Scanner s = new Scanner(input);
s.findWithinHorizon("\\s*CREATE\\s+TABLE(?:\\s+IF\\s+NOT\\s+EXISTS)?\\s+(\\w+)[(]",input.length());
MatchResult result = s.match();
if (1 < result.groupCount())
return;
System.out.println(result.group(1));//printing tablename
s.findInLine("\\s*(\\w+)\\s+(\\w+)(?:\\s+((?:NOT)?NULL)?)?(?:\\s+(PRIMARY KEY)?)?,");
//there will be added somethind in that regexp to handle FK's too
result = s.match();
for (int i = 1; i <= result.groupCount(); i++)
System.out.println(result.group(i));
s.close();
выход:
Types_of_classes
INTEGER
NOT
null
PRIMARY KEY
Любые советы по всему извлечению и т. Д. Также будут оценены!
Я должен спросить, ** почему ** вы это делаете? Что вы пытаетесь сделать (общая картина)? Если вам нужен список типов, используемых в базе данных, вам, вероятно, повезло бы больше после таблиц схемы данных, где db будет собирать всю эту информацию для вас. –
@ Clockwork-Muse Спасибо за ваш ответ, так как я сказал, что любые советы приветствуются. Целью является сопоставление таблиц sql с классами в java. Информационная схема не содержит нулевые или не нулевые данные, idk как насчет ключей? – Rotek
Я могу зависеть от того, что такое ваша РСУБД, но, конечно же, это так - проверить, какая таблица содержит информацию о ограничениях, чтобы начать. Если у него не было этой информации, как вы получаете инструкции 'CREATE TABLE'? Следующая проблема - таблицы и классы обычно не отображаются идеально или, по крайней мере, не для определенных хорошо разработанных систем. Ключевые отношения обычно обратные, как минимум - в OO родитель будет иметь набор дочерних объектов, но в db у детей есть ссылка на родителя. Аудит вывода ... и, вероятно, уже есть библиотека, которая все это выплюнет. –