首页 > 数据库 >SpringBoot:如何读取 .sql文件的内容并执行

SpringBoot:如何读取 .sql文件的内容并执行

时间:2024-03-21 10:23:25浏览次数:29  
标签:return 读取 JSONObject resultSet columnName params sql SpringBoot

摘要:

在复杂查询、统计等应用场景,直接写 sql 并执行是一种高效的方法。此文记录工作中解决的将查询统计sql直接写在文件中,代码中读取相应的文件即可获得要执行的 sql。

要点:.sql 文件要放到 Resource 目录下,读取时路径要正确

一种正确的方式 和关键代码

这里提供的是一种尝试过的正确的方式,可能不是唯一的方式。
数据库读取方面使用的是JDBCTemplate

数据源配置

读取对应数据源

JDBCTemplate 的简单封装,查询结果转 JSONArray 或 JSONObject

点击查看代码
  /**
     * 查询
     *
     * @return JSONArray json数组
     */
    @Override
    public JSONArray getJSONArray(String sql, Object[] params) {
        return getJSONArray(sql, params, false);
    }
    private JSONArray getJSONArray(String sql, Object[] params, final boolean toUpper) {
        return jdbcTemplate.query(sql, params, new ResultSetExtractor<JSONArray>() {
            @Override
            public JSONArray extractData(ResultSet resultSet) throws SQLException, DataAccessException {
                ResultSetMetaData rsd = resultSet.getMetaData();
                int clength = rsd.getColumnCount();
                JSONArray jsonArray = new JSONArray();
                String columnName;
                try {
                    while (resultSet.next()) {
                        JSONObject jo = new JSONObject();

                        for (int i = 0; i < clength; i++) {
                            columnName = rsd.getColumnLabel(i + 1);
                            columnName = toUpper ? columnName.toUpperCase() : columnName.toLowerCase();
                            jo.put(columnName, resultSet.getObject(i + 1));
                        }
                        jsonArray.add(jo);
                    }
                } catch (Exception e) {

                }
                return jsonArray;
            }
        });

    }

    public JSONObject getJSONObject(String sql) {
        return getJSONObject(sql, new Object[]{});
    }

    /**
     * 说明:查询,返回的是Json对象
     *
     * @return JSONObject
     */
    @Override
    public JSONObject getJSONObject(String sql, Object[] params) {
        return getJSONObject(sql, params, false);
    }

    private JSONObject getJSONObject(String sql, Object[] params, final boolean toUpper) {

        return jdbcTemplate.query(sql, params, new ResultSetExtractor<JSONObject>() {
            @Override
            public JSONObject extractData(ResultSet resultSet) throws SQLException, DataAccessException {
                ResultSetMetaData rsd = resultSet.getMetaData();
                int clength = rsd.getColumnCount();
                String columnName;
                try {
                    if (resultSet.next()) {
                        JSONObject jo = new JSONObject();

                        for (int i = 0; i < clength; i++) {
                            columnName = rsd.getColumnLabel(i + 1);
                            columnName = toUpper ? columnName.toUpperCase() : columnName.toLowerCase();
                            jo.put(columnName, resultSet.getObject(i + 1));
                        }
                        return jo;
                    }
                } catch (Exception e) {

                }
                return null;
            }
        });

    }

具体使用

Service

BaseService,提供读 sql 文件的功能,供应用层 service 扩展

一个应用层 Service 的例子

.sql 文件位置

Controller层对应例子

参考资料:

springboot 如何读取 .sql文件的内容并执行
https://blog.csdn.net/qq_35387940/article/details/109719468
https://blog.csdn.net/hzbooks/article/details/121347339

标签:return,读取,JSONObject,resultSet,columnName,params,sql,SpringBoot
From: https://www.cnblogs.com/ltsgsh/p/18086734

相关文章

  • springboot实现拦截器
    在springboot中实现拦截器分为两步:1、创建普通拦截器,需要实现HandlerInterceptor并重写接口中相关方法;2、将上一步创建的拦截器加入到springboot配置中,配置拦截规则下面是相关代码和demo请求:定义一个普通拦截器:importorg.springframework.stereotype.Component;importorg......
  • SpringBoot Maven继承
    Maven继承方案一特点:全面<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.3.RELEASE</version></parent>方案二特点:不用继承父模块,解决了单继承问题;即可以继承......
  • MySQL InnoDB Instant schema 变更注意点
    在MySQL8.0.12中为DDL引入了新的算法,在修改表的定义的时候不会阻塞。第一个instant操作是在表的最后增加一个列,这是腾讯游戏团队贡献的。在8.0.29中,官方增加在任意位置增加或删除列的instant操作。本文要讲的是盲目使用该特性会带来的危害。 默认算法从MySQL8.0......
  • 基于Java的桃花峪滑雪场租赁系统(Vue.js+SpringBoot)
    目录一、摘要1.1项目介绍1.2项目录屏二、功能模块2.1游客服务2.2雪场管理三、数据库设计3.1教练表3.2教练聘请表3.3押金规则表3.4器材表3.5滑雪场表3.7售票表3.8器材损坏表四、系统展示五、核心代码5.1查询教练5.2教练聘请5.3查询滑雪场5.4滑雪场预......
  • 通过Docker安装MySQL数据库
    1.安装Docker首先,确保你的系统上已经安装了Docker。如果还没有安装,可以访问Docker官网查看安装指南。对于大多数Linux发行版,可以使用以下命令安装Docker:sudoapt-getupdatesudoapt-getinstalldocker.io安装完成后,启动Docker服务并设置开机自启:sudosystemctlstart......
  • QT6实现创建与操作sqlite数据库三种方式方式对比(二)
    一.概述Qt访问Sqlite数据库的三种方式(即使用三种类库去访问),QSqlQuery、QSqlQueryModel、QSqlTableModel,对于这三种类库,可看为一个比一个上层,也就是封装的更厉害,甚至第三种QSqlTableModel,根本就不需要开发者懂SQL语言,也能操作Sqlite数据库。二.Qt读写Sqlite数据库的三种方......
  • mysql-存储引擎
    1.mysql的体系结构下面这张图值得注意的是不同的存储引擎的Index不一样,从5.5版本以后存储引擎默认的就是InnoDB了。2.存储引擎 --查询建表语句---默认存储引擎:InnoDBshowcreatetablecourse;--查询当前数据库支持的存储引擎showengines;--创建表my_myisam,......
  • 基于Java+Springboot技术仓库管理系统的实现+项目全套源码+完整文档源码说明+毕业论文
    摘 要现如今,许多企业存在的问题:信息化不足,计算机使用率不高,大量的日常工作皆是手工处理,因此工作效率低,企业内部沟通不良等等问题很难克服。要提升企业竞争力,企业内部信息化是不可缺少的一个步骤。所以要实施先进的自动化系统,实现企业内部信息管理、共享及交流,才能让企业在......
  • 免费分享一套SpringBoot+Vue大学新生报到管理系统,帅呆了~~
    大家好,我是java1234_小锋老师,看到一个不错的SpringBoot+Vue大学新生报到管理系统,分享下哈。项目视频演示【免费】SpringBoot+Vue大学新生报到管理系统Java毕业设计_哔哩哔哩_bilibili【免费】SpringBoot+Vue大学新生报到管理系统Java毕业设计项目来自互联网,免费开源分享,严......
  • 写入和读取剪切板内容
    写入剪切板使用clipboard.js第三方插件:clipboard.js安装clipboard.jsyarnyarnaddclipboardnpmnpminstallclipboard--save使用示例(vue)<template> <div> <spanv-copy>复制这段文本</span></div></template><script>importC......