【问题标题】:expose database queries to users向用户公开数据库查询
【发布时间】:2018-09-23 16:24:27
【问题描述】:

假设我有一个包含“名称”、“年龄”、“城市”、“国家”列的表。我想把数据库查询接口暴露给用户,也就是他们应该能够执行sql让我们做的各种查询。

我能想到的唯一方法是为每一列设置一行,其中每一行的格式为:

column name | operator | value

活动中的示例查询是:

name | = | Bob 
age  | > | 25

然后有了这些信息,我可以让一个方法执行查询并返回结果。 对于这个简单的例子,它会起作用。但是还有更多有趣的事情可以问sql,而这种方法在很多问题上都会失败。

对此我能做些什么?

【问题讨论】:

  • 数据库和 JDBC 已经 provide metadata 关于您的表和列,因此您无需存储它们。只需让您的数据库告诉您表中有哪些列、它们的数据类型、它们的名称等。
  • 最通用的机制是允许 SQL 查询。

标签: java android sql sqlite


【解决方案1】:

首先,您需要考虑您将允许用户进行哪些操作。最常见的 SQL 查询是 SELECTINSERTUPDATEDELETE。获得要提供的操作列表后,您需要考虑用户在进行任何这些查询时可以选择的参数。例如,如果用户想要获取(SELECT)一些数据,他可以提供什么作为输入,在你的情况下是人的年龄。其他查询的情况类似。

因此,一旦您获得了上述信息,您就需要将其转换为查询。这可以通过创建一个实用程序或帮助类来完成,该类考虑用户查询以及参数并形成可以在数据库上执行的 SQL 查询。

例如,让我们以 StackOverflow 作业页面 (https://stackoverflow.com/jobs?med=site-ui&ref=jobs-tab) 为例。在这里您可以看到用户可以根据关键字、位置、远程等多个参数获取数据。考虑到这个示例,您的实用程序将创建一个 SELECT 查询并传递用户选择的参数并生成一个 SQL 查询形式

SELECT jobs WHERE is_remote=<user_param> AND tech=<user_param> AND compensation=<user_param>

这只是对需要做的事情的概述。根据您的确切用例,可能会有一些变化。但这几乎涵盖了您需要实现的目标。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    相关资源
    最近更新 更多