【问题标题】:Usage of SQL parsers for java for search scenarios在搜索场景中使用 Java 的 SQL 解析器
【发布时间】:2012-01-18 09:49:46
【问题描述】:

谁能推荐一些SQL解析器可用于java的好的实现示例或使用场景。

我有一个应用程序,我们需要根据某些参数、排序标准等过滤要在 UI 上显示的数据。 我对此有一些疑问:

1)这可以是一个理想的解决方案吗?

2)UI如何发挥作用,为Java层提供查询?

【问题讨论】:

    标签: java search sql-parser


    【解决方案1】:

    您想在您的 java 应用程序中动态构建 sql 查询,然后使用此 sql 获取数据吗?假设你有一个这样的 sql:

    select salary from emp where dept='sales'
    

    用户从 UI 中选择其他一些过滤器后,例如年龄 > 40,那么 sql 将是这样的:

    select salary from emp where dept='sales' and age > 40
    

    当然,您可能还想添加更复杂的过滤器或添加排序子句。

    为了实现这一点,完整的SQL Parser 很有帮助,这里有一个演示,说明如何基于 Java SQL 解析器Deconstruct, Modify, Rebuild a SQL statement

    【讨论】:

    • 我的用例就像基于用户过滤数据,UI应该创建一些选择表达式而不是发送多个请求参数。例如docs.amazonwebservices.com/AmazonSimpleDB/latest/DeveloperGuide/…所以会有一个像select field1,field2 from mydomain where field1 ='abc' and field2='cde' orderby field1 desc limit 10,20这样的选择表达式像这样的表达式将从 UI 传递到 java API。我希望 Java API 解析该选择表达式以获取这些参数并形成要传递给 DB 的动态 SQL 字符串。你有什么建议?
    • 是否需要形成这样的动态sql:select field1,field2 from mydomain where field1 = '@p1' and field2= '@p2' orderby field1 desc limit 10,20 that replace literal with parameter ,还是别的什么?
    【解决方案2】:

    我不知道 SQL 解析器应该是什么。应用程序不必解析 SQL。 Thay 必须执行 SQL 查询,因此可能会动态生成 SQL 查询。但解析 SQL 的是数据库,而不是应用程序。

    UI 通常不向服务层提供查询。 UI 不必知道数据是如何持久化的以及要执行哪些查询。这不是它的责任。 UI 应该只将 Filter 或 Criteria 对象传递给服务层,服务层将过滤器或条件转换为 SQL 查询,执行查询,将结果转换为 Java 对象,并将这些对象返回给 UI,UI 显示这些对象。

    【讨论】:

    • 我说的是与jsqlparserzql 相关的事情。知道这些的任何示例实现吗?
    • 为什么要解析SQL?您的问题说您要过滤数据。您不需要 SQL 解析器吗?将数据存储在数据库中,并使用 SQL 查询对其进行过滤。如果您想实现一个数据库,SQL 解析器会很有用。你想使用一个数据库。
    猜你喜欢
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 2011-06-18
    • 2015-02-17
    相关资源
    最近更新 更多