java - 如何确定 JAVA 中 jdbcTemplate 的 sql 查询类型?

标签 java sql spring oracle jdbctemplate

我的要求是我想确定 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/

相关文章:

java - 如何通过 Jackson 传递原始 JSON?

java - 如何使用 java-lambda 按相似键进行分组?

php - 添加到我的 SQL 查询表的链接

java - 没有 'org.springframework.jms.core.JmsTemplate' 类型的合格 bean

java - 如何在maven项目中将javascript文件外部添加到JSP?

java - 导入maven依赖时出错

java - ParseException:遇到列表类型的 "/"content.xml

java - 如何切换 Eclipse 视角?

mysql - 是否可以在 MySQL 中创建具有 UNIX_TIMESTAMP 默认值的列?

mysql - 按父 ID 删除 SQL 树