它只是一个非常简单的SQL解析过程,否HAVING
,ORDER BY
或GROUP BY
将在需要解析的语句中,但是有关选择零件中的星号的某些东西不会工作(例如SELECT * .......
)
这是代码部分:
String span="SELECT * FROM table1 t, table2";
span=span.toUpperCase();
System.out.println(span);
// Segments
String column="(\w+\s*(\w+\s*){0,1})";
String columns=column+"(,\s*"+column+")*";
String ownerenable="((\w+\.){0,1}\w+\s*(\w+\s*){0,1})";
String ownerenables=ownerenable+"(,\s*"+ownerenable+")*";
String from="FROM\s+"+columns;
String condition="(\w+\.){0,1}\w+\s*(=|<|>|LIKE|IS)\s*'?(\w+\.){0,1}[\w%]+'?";
String conditions=condition+"(\s+(AND|OR)\s*"+condition+"\s*)*";
String where="(WHERE\s+"+conditions+"){0,1}";
String pattern = "SELECT\s+(\*|" + ownerenables + "\s+" + from + ")\s+" + where + "\s*" + "(;){0,1}";
System.out.println(pattern);
System.out.println(span.matches(pattern));
现在如果我设置为
之类的跨度"SELECT t.id, product p FROM table1 t, table2 WHERE t.id=10;"
匹配结果将为true
==============================
,但是如果我将其设置为这样的东西:
"SELECT * FROM table1 t, table2 WHERE t.id=10;"
(这是我用于选择的星号)
在这种情况下它不起作用
我在那个星号上做错了吗?
必须在 from
之前关闭括号:
String pattern = "SELECT\s+(\*|" + ownerenables + ")\s+" + from + "\s+" + where + "\s*" + "(;){0,1}";
您选择table2,但不要从中选择任何东西。如果要进行 *选择,则必须在Table1和Table2之间指定联接。
这是您的问题。