如何确定用户在 java 中输入了哪种类型的 sql 查询

How to determine which type of sql query is entered by user in java

我正在做一个简单的项目,它接受来自用户的 sql 查询并在 JTable 中显示结果 我想确定是否输入了 select 语句或输入了任何其他 DML/DDL 语句,以便我可以相应地调用 executeQuery()executeUpdate()。 我想检查查询是否以 select 开头。有一个更好的方法吗。

无需尝试决定是否需要调用 executeQueryexecuteUpdate,您可以直接使用 execute

Statement.execute(String) 的 javadoc 说:

Executes the given SQL statement, which may return multiple results. In some (uncommon) situations, a single SQL statement may return multiple result sets and/or update counts. Normally you can ignore this unless you are (1) executing a stored procedure that you know may return multiple results or (2) you are dynamically executing an unknown SQL string.

(强调我的)

execute 方法有一个布尔值 return,意思是:

  • false: 第一个结果要么是更新计数,要么没有结果
  • true : 第一个结果是一个结果集

我故意说 第一个 结果,因为 JDBC 允许单个语句有多个结果(例如 SQL 服务器存储过程可以 return 多个结果集并以任意顺序更新计数)。

如果false,则需要调用getUpdateCount。这要么是 return 更新计数(0 或更高),要么是 -1 表示没有更多结果。顺便说一句:当结果为 true 时调用 getUpdateCount 也应该 return -1.

如果true,需要调用getResultSet获取结果集

要处理更多结果(也就是说,如果您刚刚处理了一个结果集,或者 getUpdateCount 不是 -1),那么您调用 getMoreResults,这也是 return是一个布尔值,与上面的含义完全相同,等等

这听起来很复杂,但大多数数据库只支持单个结果集,如果你只关心一个结果集,那么你只需要检查是否 execute returned true 然后使用 getResultset(如果 false 则不使用)。