如何确定用户在 java 中输入了哪种类型的 sql 查询
How to determine which type of sql query is entered by user in java
我正在做一个简单的项目,它接受来自用户的 sql 查询并在 JTable 中显示结果
我想确定是否输入了 select 语句或输入了任何其他 DML/DDL 语句,以便我可以相应地调用 executeQuery()
或 executeUpdate()
。
我想检查查询是否以 select 开头。有一个更好的方法吗。
无需尝试决定是否需要调用 executeQuery
或 executeUpdate
,您可以直接使用 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
则不使用)。
我正在做一个简单的项目,它接受来自用户的 sql 查询并在 JTable 中显示结果
我想确定是否输入了 select 语句或输入了任何其他 DML/DDL 语句,以便我可以相应地调用 executeQuery()
或 executeUpdate()
。
我想检查查询是否以 select 开头。有一个更好的方法吗。
无需尝试决定是否需要调用 executeQuery
或 executeUpdate
,您可以直接使用 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
则不使用)。