我需要一个java API来解析SQL语句。
例如,我有一个SQL查询
SELECT
PRODUCTS.PROD_ID,
PRODUCTS.PROD_NAME,
PRODUCTS.PROD_CATEGORY,
PRODUCTS.PROD_TOTAL_ID
FROM
PRODUCTS
我需要检索表名“Products”,列名称为“Prog_ID”等。
如果可能,请提供教程或代码段的任何链接。
答案 0 :(得分:4)
ANTLR是一个具有SQL grammar的解析器生成器,但可能比你讨价还价的更多。
只要您的要求不会太疯狂,自己编写一个就会更简单。你需要多么普遍?
答案 1 :(得分:3)
如果您有与数据库的连接,则可以使用预准备语句执行此操作:
String sql = "....";
PreparedStatement pstmt = connection.prepareStatement(sql);
ResultSetMetaData meta = pstmt.getMetaData();
然后,您可以使用ResultSetMetaData.getColumnCount()
和getColumnName(int)
来检索列名称。如果您的JDBC驱动程序支持它,您甚至可以使用getTableName(int)
请注意,并非所有驱动程序都支持在实际执行语句之前获取元数据,您需要使用正在使用的驱动程序对其进行测试。
答案 2 :(得分:2)
使用http://zql.sourceforge.net/中的ZQL解析库结束。
如果您有简单的查询,那应该可以轻松完成工作
答案 3 :(得分:1)
正则表达式匹配仅适用于简单查询,SQL具有复杂的递归语法,并且总会有一些sub select,group by或literal会破坏基于正则表达式的解析器。
这里a demo说明了如何使用通用的sql解析器实现所需的功能: