java

@ResponseBody
@RequestMapping(value = "/sqlMap", method = RequestMethod.POST)
public String executeSql(HttpServletRequest req) {
JSONObject jsona = new JSONObject();
try { Map<String, Object> params = HttpServiceUtils.getParamsFromReq(req);
String sqlStr = null;
if (!params.containsKey("sql")) {
throw new Exception("不存在sql");
}
sqlStr = params.get("sql").toString(); //不处理insert update delete drop alter create all_ user_避免动态注入
if(sqlStr.indexOf("insert") > -1
|| sqlStr.indexOf("update") >-1
|| sqlStr.indexOf("delete") > -1
|| sqlStr.indexOf("drop") > -1
|| sqlStr.indexOf("alter") >-1
|| sqlStr.indexOf("create") >-1
|| sqlStr.indexOf("all_") >-1
|| sqlStr.indexOf("user_") >-1){
throw new Exception("避免sql注入,不允许执行");
} //处理特殊字符
sqlStr = sqlStr.replaceAll(";",""); List<LinkedHashMap<String, Object>> resultList = sqlMapper.executeSql(sqlStr); //clob处理
Iterator<LinkedHashMap<String,Object>> itA = resultList.iterator();
while(itA.hasNext()){
LinkedHashMap jsonObj = itA.next();
Iterator<String> it = jsonObj.keySet().iterator(); while(it.hasNext()){
String key = it.next();
Object value = jsonObj.get(key);
if(value instanceof oracle.sql.CLOB){
value = ClobUtil.clobToString((CLOB)value);
jsonObj.put(key, value);
}else if(value instanceof java.sql.Timestamp){
value = value.toString();
jsonObj.put(key, value);
}
}
} JSONArray resultJa = JSONArray.fromObject(resultList);
jsona.accumulate("data", resultJa);
jsona.accumulate("total", 0); return ResponseUtils.success(jsona);
} catch (Exception e) {
log.error("执行脚本失败:{}", e);
return ResponseUtils.failure(e.getMessage());
}
}

mapper.xml

 <select id="executeSql" parameterType="String" resultType="java.util.LinkedHashMap">
${sqlStr}
</select>

mapper.java

	public List<LinkedHashMap<String, Object>> executeSql(@Param(value="sqlStr") String sqlStr);

html

<div class='sql-map'>
<el-input v-model='sql' type="textarea" autosize></el-input>
<el-button @click='executeSql' type="success">提交</el-button>
<el-input v-model='result' type="textarea"></el-input>
<el-table v-if='data.length>0' :data="data" :border=true :stripe=true :fit=true style="width: 100%" v-loading.body="loading">
<el-table-column v-for='item in keys' :prop="item" :label="item" show-overflow-tooltip sortable>
</el-table-column>
</el-table>
</div>

js

Vue.component('sql-map',{
template: '#sqlMap',
mixins: [mixin_basic],
created: function () { },
mounted: function () { },
beforeDestroy: function () {
},
data: function(){return{
name:'sqlMap',
title: "sqlMap",
pageSize: GetPageSize(),
loading: false,
sql:'select * from component_inst a where rownum<5;',
result:'',
data:[],
keys:[]
}},
methods: { executeSql: function (inParams, callBack) {
//条数限制
if(this.sql.indexOf('where') <= -1 || this.sql.length == 0){
this.$alert('请输入where子句', '服务异常');
return;
} this.loading = true
var vueThis = this; //重置
vueThis.data = [];
vueThis.keys =[];
if(this.sql.indexOf('and rownum<20;') <= -1 ){
if(this.sql.indexOf(';') > -1 ){
this.sql = this.sql.replace(';',' and rownum<20;');
}else{
this.sql = this.sql + ' and rownum<20;';
}
} //参数
var params = {};
Object.assign(params, { 'sql': this.sql }); callServicePolyfill(this, 'executeSql', params, function (res) {
try {
vueThis.result = res;
res = JSON.parse(res);
if (!!res.statusCd && res.statusCd != '200') {
throw res.message;
} else {
vueThis.data = res.data;
for(var key in vueThis.data){
var item = vueThis.data[key];
for(var j in item){ if(vueThis.keys.indexOf(j)<=-1){
vueThis.keys.push(j);
} if(vueThis.isJsonObj(item[j])){
item[j] = JSON.stringify(item[j]);
}else if(Array.isArray(item[j])){ item[j] = item[j] +'';
}
}
}
};
} catch (err) {
console.error(err)
console.error(res)
vueThis.info('执行sql失败,' + err);
} finally {
vueThis.loading = false;
}
})
}, isJsonObj:function(obj){
var isjson = typeof(obj) == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length;
return isjson;
} },
computed: { } })

web执行sql----vue mybatis的更多相关文章

  1. 在mybatis执行SQL语句之前进行拦击处理

    转载自:http://blog.csdn.net/hfmbook/article/details/41985853 比较适用于在分页时候进行拦截.对分页的SQL语句通过封装处理,处理成不同的分页sql ...

  2. springboot中使用mybatis显示执行sql

    springboot 中使用mybatis显示执行sql的配置,在properties中添加如下 logging.你的包名=debug 2018-11-27 16:35:43.044 [DubboSe ...

  3. Mybatis执行sql(insert、update、delete)返回值问题

    数据库:Mysql 在使用mybatis的过程中对执行sql的返回值产生疑问,顺手记录一下. 结论: insert:   插入n条记录,返回影响行数n.(n>=1,n为0时实际为插入失败) up ...

  4. 如何优雅的将Mybatis日志中的Preparing与Parameters转换为可执行SQL

    原文链接 疫情期间大家宅在家里是不是已经快憋出“病”了~~ ​ 公司给开了VPN,手机电脑都能连,手机装上APP测试包,就能干活了,所以walking从2020.02.01入京以来,已经窝在家里11天 ...

  5. Mybatis源码解析之执行SQL语句

    作者:郑志杰 mybatis 操作数据库的过程 // 第一步:读取mybatis-config.xml配置文件 InputStream inputStream = Resources.getResou ...

  6. Mybatis源码分析之Mapper执行SQL过程(三)

    上两篇已经讲解了SqlSessionFactory的创建和SqlSession创建过程.今天我们来分析myabtis的sql是如何一步一步走到Excutor. 还是之前的demo    public  ...

  7. springmvc 项目完整示例04 整合mybatis mybatis所需要的jar包 mybatis配置文件 sql语句 mybatis应用

    百度百科: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBat ...

  8. Quartz动态添加定时任务执行sql(服务启动添加+手动添加)

    系统用来每天插入视图数据... 一.数据库表设计 1.接口配置表(t_m_db_interface_config) 2.接口日志表(t_m_db_interface_log) 3.前端配置页面 查询页 ...

  9. Yearning v1.3.0 发布,Web 端 SQL 审核平台

    企业级MYSQL web端 SQL审核平台. Website 官网 www.yearning.io Feature 功能 数据库字典自动生成 SQL查询 查询工单 导出 自动补全,智能提示 查询语句审 ...

  10. Java Web开发SpringMVC和MyBatis框架开发环境搭建和简单有用

    1.下载SpringMVC框架架包,下载地址: 点击下载 点击打开地址如图所看到的.点击下载就可以 然后把相关的jar拷贝到lib下导入 2.MyBatis(3.4.2)下载 X-Amz-Algori ...

随机推荐

  1. JavaWeb 验证码

    package com.gen; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.s ...

  2. shm

    进程间共享内存访问及读写 目录 进程间共享内存访问及读写 1. 进程间共享内存相关linux_C函数 2. 进程间共享内存基本流程 3. demo code 1. 进程间共享内存相关linux_C函数 ...

  3. 对PTA题目集1~3的总结

    一.作业总结 这几次的PTA作业主要考察我们对Java语言中的字符串的输入和输出.转换.有关它们的方法的运用和相关的一些运算,还有我们对题目需求的了解和书写代码的规范:其次还有强化我们对"类 ...

  4. BLP(Bell–LaPadula模型)(MAC)

    Bell-LaPadula模型侧重于数据的保密性和对机密信息的受控访问 基于状态机,该状态机在一个计算机系统中具有一组允许的状态,并且从一个状态到另一种状态的转换由状态转移函数定义. 该模型定义了一个 ...

  5. Qt设置程序图标

    修改.pro文件添加一下代码:要求.pro文件和.ico文件在同一文件夹下 RC_ICONS = xxx.ico (你的程序图标)最后重新构建一次即可

  6. redis-creating server tcp listening socket 127.0.0.1:6379: bind No error

    安装redis,出现如下错误: 解决方法: 步骤1:命令行下输入:redis-cli.exe(注意不是redis-server.exe) 然后输入:shutdown exit 退出后输入.\redis ...

  7. slitaz中tazpkg更改软件源

    在tazpkg手册中可以查到保存tazpkg软件源网址的文件,/var/lib/tazpkg/mirror

  8. 为开源项目贡献代码-pycharm使用git-登录注册功能分析-判断手机号存在接口-多种方式登录接口-腾讯云短信申请

    目录 为开源项目贡献代码-pycharm使用git-登录注册功能分析-判断手机号存在接口-多种方式登录接口-腾讯云短信申请 git内容大回顾 今日内容概要 今日内容详细 1 为开源项目贡献代码 2 p ...

  9. 使用layui+jQuery实现点击删除单行数据

    使用layui+jQuery实现点击删除单行数据 首先要用到layui的官网手册 地址:https://www.layui.com/ 注意1.  此功能是在使用layui展示数据的基础上实现 3.  ...

  10. 从零搭建hadoop集群之CentOS7配置网卡为静态IP

    CentOS7默认网卡设备文件存放于   /etc/sysconfig/network-scripts/  CentOS7的网卡设备名称是  ifcfg-ens33 vim /etc/sysconfi ...