java - 表达式语言到 SQL where 子句的转换?

标签 java sql parsing

我们有一个域对象,

Person
    firstName
    lastName
    role

我正在寻找一种简单的表达式语言,我们可以编写它来生成 SQL。 (特别是SQL的where子句)

例如。

firstName contains "joe"

翻译为

FIRST_NAME LIKE '%joe%'

是否存在这样的东西,还是我必须自己编写?

如果您认为我可能正在寻找青春之泉,或者您认为我写这篇文章是在浪费时间,请告诉我!

最佳答案

"However, there is also a large class of users who, while they are not computer specialists, would be willing to learn to interact with a computer in a reasonably high-level, non-procedural query language. Examples of such users are accountants, engineers, architects, and urban planners."

来自 Donald D. Chamberlin 和 Raymond F. Boyce 的 1974 paper引入 SQL(然后是 SEQUEL)。从他们的介绍来看,我猜他们是为非技术用户设计 SQL 的。

这并不是说 SQL 是一种完美的语言。尽管经历了三十多年的变迁,但它仍然存在缺陷。您有可能构建出更好的东西,但有两件事可能会出错:

  1. 你的语言可能会更糟糕。
  2. 如果您的一位非技术用户想要增强他们的关系数据技能,他们将受到您的语言与 SQL 的限制。提高 SQL 技能的资源有很多很多,而提高新语言技能的方法却少之又少。

也许可以考虑一个折衷方案:提供一个构建表达式的 UI。技术水平较低的用户可以选择一个属性、一个运算符,然后输入随后出现在表达式文本区域中的值。他们可以逐段构建中等复杂的 SQL 表达式,而无需记住 SQL 语法。更熟练的用户可以直接编辑 SQL。

这并不能解决您的所有问题。您仍然需要一种方法来限制 SQL,以便用户不会损坏您的数据库或通过令人难以置信的笛卡尔连接无意中耗尽所有数据库资源。

关于java - 表达式语言到 SQL where 子句的转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4348383/

相关文章:

java - 在 GAE 上解析完全有效的 XML 时出现 "Content is not allowed in prolog"

php - 解析 html 表 tr 标签丢失

java - 如何测试junit中是否抛出并捕获异常

mysql - SQL 连接与子查询

java - 在Java中使用省略号来表示可选参数是一个好主意吗?

mysql - 用于在 MySQL 中插入值的 Bash 脚本

sql - 按列分组不存在

mysql - 将 XML 文件数据填充到 Rails 中的数据库

java 替换重复字符

java - 如何自动从 Firebase 中删除?