需要java API来解析SQL语句

时间:2011-05-04 10:21:31

标签: java sql parsing

我需要一个java API来解析SQL语句。

例如,我有一个SQL查询

SELECT
  PRODUCTS.PROD_ID,
  PRODUCTS.PROD_NAME,
  PRODUCTS.PROD_CATEGORY,
  PRODUCTS.PROD_TOTAL_ID
FROM
  PRODUCTS

我需要检索表名“Products”,列名称为“Prog_ID”等。

如果可能,请提供教程或代码段的任何链接。

4 个答案:

答案 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解析器实现所需的功能: