我的要求是我想确定 sql 查询的类型,以便我可以相应地选择 jdbcTemplate 方法。
假设我的sql查询是插入或更新类型那么我会选择
String sql ="insert/update sql query";
jdbcTemplate.update(sql);
jdbcTemplate 方法,如果我的 sql 查询类型是 select 那么我会选择
String sql ="select sql query";
jdbcTemplate.query(sql);
jdbcTemplate 方法。
java中如何有效判断sql查询的类型?
如果我的查询同时包含 update 和 select sql 语句,应该选择哪个 jdbcTemplate 方法?例如
update table set column_name="abc" where column_name in (select column_name from table where column_name ="xyz");
更新: 实际上,我正在接受来自 Web 表单的应用程序用户的 sql 查询,这就是实际问题出现的原因,因为用户可以通过表单发布任何类型的 sql 查询,我想根据查询类型选择特定的 jdbcTemplate 方法。
最佳答案
在 Oracle 中,您可以在执行之前解析查询
declare
l_theCursor integer default dbms_sql.open_cursor;
begin
dbms_sql.parse( l_theCursor, 'SELECT 1 FROM DUAL', dbms_sql.native );
end;
无论如何,这是一个很好的做法,因为您将从用户输入中接收 SQL。如果声明无效,您将收到相应的错误消息。当然上面的语句并没有执行。
解析语句后,您可以查询 v$sql 以找出命令类型:
select command_type, sql_text
from v$sql t
where sql_text = 'SELECT 1 FROM DUAL';
各种commands_types是这样的:
2 -- 插入
3 -- 选择
6 -- 更新
7 -- 删除
189 -- 合并
您可以通过select * from audit_actions order by action
获取完整列表
希望对您有所帮助:)
关于java - 如何确定 JAVA 中 jdbcTemplate 的 sql 查询类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54671452/