Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用正则表达式从sql create语句提取数据_Java_Sql_Regex_Java.util.scanner - Fatal编程技术网

Java 使用正则表达式从sql create语句提取数据

Java 使用正则表达式从sql create语句提取数据,java,sql,regex,java.util.scanner,Java,Sql,Regex,Java.util.scanner,我必须从简单的SQLCREATE语句中提取一些数据。 为此,我决定使用正则表达式。 在我将NOT istead of NOT NULL/NULL、NOT specyfiing“nullability”放入之前,一切都正常(按预期在组中返回NULL)。 当仅放置NOT时,它跳过columnname 我有以下代码(仅包括atm打印,不包括事件处理提取的数据) (在地平线内使用查找,因为语句的格式可能不同) 任何关于提取等整体的建议也将不胜感激 第二个正则表达式的NULL部分是按要求写入的,而NOT后

我必须从简单的SQLCREATE语句中提取一些数据。 为此,我决定使用正则表达式。 在我将NOT istead of NOT NULL/NULL、NOT specyfiing
“nullability”
放入之前,一切都正常(按预期在组中返回NULL)。 当仅放置NOT时,它跳过columnname

我有以下代码(仅包括atm打印,不包括事件处理提取的数据) (在地平线内使用查找,因为语句的格式可能不同)


任何关于提取等整体的建议也将不胜感激

第二个正则表达式的
NULL
部分是按要求写入的,而
NOT
后面的空格是按要求写入的,因为您将
\s+
放在它前面,至少需要一个空格(由
NOT
后面的空格匹配),所以
主键的单词不匹配,这里有一个修改过的正则表达式(第一个和第二个正则表达式的组合),它与主键列部分匹配

\s*CREATE\s+TABLE(?:\s+IF\s+NOT\s+EXISTS)?\s+(\w+)[(]\s*(\w+)\s+(\w+)(?:\s+((?:NOT)?(?:NULL)?)?)?(?:\s+(PRIMARY KEY)?)?,
这是一个很好的互动网站,用于玩regex比赛,并解释正在发生的事情:


我不得不问,你为什么要这样做?你想做什么(大局)?如果您想要数据库中使用的类型列表,您可能会更幸运地查找信息架构表,数据库将在其中为您收集所有这些信息。@Clockwork Muse感谢您的回答,正如我所说的,我们非常感谢您提供的任何建议。目的是将sql表映射到java中的类。信息模式不提供null或NOTNULL数据,idk键如何?我可能取决于您的RDBMS是什么,但它当然会提供—首先检查任何包含约束信息的表。如果没有这些信息,您如何获得
createtable
语句?下一个问题-表和类通常不会完美地映射,或者至少对于某些设计良好的系统不会。键关系通常是向后的,至少在OO中,父对象将有一个子对象的集合,但在db中,子对象有一个对父对象的引用。审核输出。。。不管怎么说,可能已经有一个图书馆会把这些东西吐出来。
Types_of_classes
INTEGER
NOT
null
PRIMARY KEY
\s*CREATE\s+TABLE(?:\s+IF\s+NOT\s+EXISTS)?\s+(\w+)[(]\s*(\w+)\s+(\w+)(?:\s+((?:NOT)?(?:NULL)?)?)?(?:\s+(PRIMARY KEY)?)?,