首页 网站首页 商业信息 脚本 查看内容

ScriptRunner执行SQL脚本

全网营销 2023-2-5 21:40 6415人围观 脚本

明天有人征询我ScriptRunner的相关题目,我也没研讨过,就百度了一些材料起头写一个小测试demo出来,碰到了一些题目,也处理了一些题目,我们接下来看吧。

实在还可以改成MySQL,大概其他DB,样例今朝是Oracle的demo。

一、pom文件增加引入

需要引入oracle以及mybatis的包,具体以下。

<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc8</artifactId>
<version>12.2.0.1.0</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>

二、编写测试履行的SQL剧本

留意看下面的每条SQL的最初,我写了&&标记,这个是为了针对ScriptRunner的,&&标记暗示每条SQL的竣事,留意不能用分号,由于ScriptRunner也支持declare剧本和存储进程,这时辰就会出现紊乱了,是以每一条SQL完成要用分歧于分号的标记来区分,是以挑选了&&。

剧本我我们别离测试了,删除表,建立表,插入表数据,查询表数据,以及Declare语句块,并将成果插入到履行成果的表中,以便存储剧本的履行成果。

drop table test_script_runer&&
drop table test_script_runer_result&&
create table test_script_runer
(id number(22,0) not null,
num number(22,0) not null)&&
create table test_script_runer_result
(count number(22,0) not null)&&
insert into TEST_SCRIPT_RUNER values (1,2)&&
insert into TEST_SCRIPT_RUNER values (2,3)&&
insert into TEST_SCRIPT_RUNER values (3,3)&&
insert into TEST_SCRIPT_RUNER values (4,3)&&
insert into TEST_SCRIPT_RUNER values (5,3)&&
insert into TEST_SCRIPT_RUNER values (6,3)&&
insert into TEST_SCRIPT_RUNER values (7,3)&&
SELECT id||','||num FROM TEST_SCRIPT_RUNER&&
declare
vn_count number;
begin
SELECT count(1) into vn_count FROM TEST_SCRIPT_RUNER;
insert into test_script_runer_result values (vn_count);
end;&&

三、java实现

新增TestScriptRunner.java,留意其中的scriptRunner.setDelimiter("&&")这一句,就是与上面的SQL中的&&标记对应的,你还可以变动成其他的,别的假如点窜成分号的话,就不可以在sql文件中写存储进程之类的了,只能写SQL。

package com.buxuesong.account;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.jdbc.ScriptRunner;
import org.springframework.boot.CommandLineRunner;

import java.io.*;
import java.nio.charset.Charset;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class TestScriptRunner implements CommandLineRunner {

public static void main(String[] args) throws Exception {
TestScriptRunner test = new TestScriptRunner();
test.run("");
}

@Override
public void run(String... args) throws Exception {
try {
Connection conn = getConnection();
ScriptRunner scriptRunner = new ScriptRunner(conn);
// 设备字符集,否则中文乱码插入毛病
Resources.setCharset(Charset.forName("UTF-8"));
scriptRunner.setEscapeProcessing(false);
scriptRunner.setRemoveCRs(true);
scriptRunner.setSendFullScript(false);
scriptRunner.setAutoCommit(true);
// 分隔符,还未考证具体功用
scriptRunner.setFullLineDelimiter(false);
// 每条号令间的分隔符,留意这个不倡议用分号分隔
// 由于SQL剧本中可以写存储进程,中心存在分号,致使存储进程履行失利
scriptRunner.setDelimiter("&&");
// 从class目录下间接读取
List<String> files = getFiles("/Users/XuesongBu/Documents/NoSQLBooster/");
for (String file : files) {
InputStream inputStream = new FileInputStream(new File(file));
Reader reader = new InputStreamReader(inputStream, "utf-8");
scriptRunner.runScript(reader);
}
scriptRunner.closeConnection();
conn.close();
System.out.println("sql剧本履行终了");
} catch (Exception e) {
System.out.println("sql剧本履行发生异常");
e.printStackTrace();
}
}

// 获得某个目录下一切间接下级文件,不包括目录下的子目录的下的文件,所以不用递归获得
public List<String> getFiles(String path) {
List<String> files = new ArrayList<String>();
File file = new File(path);
File[] tempList = file.listFiles();

for (int i = 0; i < tempList.length; i++) {
if (tempList[i].isFile() && tempList[i].getName().endsWith("sql")) {
files.add(tempList[i].toString());
}
}
return files;
}

// 获得数据库Connection
private Connection getConnection() throws ClassNotFoundException, SQLException {
Class.forName("oracle.jdbc.OracleDriver");
//需要点窜成你的数据库url,以及账号密码
return DriverManager.getConnection(
"ORACLE_URL",
"USER_NAME", "PASSWORD");
}
}

四、测试成果

drop table test_script_runer

drop table test_script_runer_result

create table test_script_runer
(id number(22,0) not null,
num number(22,0) not null)

create table test_script_runer_result
(count number(22,0) not null)

insert into TEST_SCRIPT_RUNER values (1,2)

insert into TEST_SCRIPT_RUNER values (2,3)

insert into TEST_SCRIPT_RUNER values (3,3)

insert into TEST_SCRIPT_RUNER values (4,3)

insert into TEST_SCRIPT_RUNER values (5,3)

insert into TEST_SCRIPT_RUNER values (6,3)

insert into TEST_SCRIPT_RUNER values (7,3)

SELECT id||','||num FROM TEST_SCRIPT_RUNER

ID||','||NUM
1,2
2,3
3,3
4,3
5,3
6,3
7,3
declare
vn_count number;
begin
SELECT count(1) into vn_count FROM TEST_SCRIPT_RUNER;
insert into test_script_runer_result values (vn_count);
end;

sql剧本履行终了

Process finished with exit code 0

五、总结

以上就是我们常用ScriptRunner的利用方式,比力简单,中心需要留意的每一行SQL结束后的分隔符,依照我上面的设置即可实现。

谢列位的阅读,感谢您动脱手指导击下{\color{red}{附和/喜好}},万分感激列位。别的以下是我之前写过的文章,感爱好的可以点进去继续阅读。

别的假如感觉不错,可以扫码进入我的小法式来延续关注我总结的各类口试题调集。



历史文章

ScriptRunner履行Oracle SQL剧本

SpringBoot从入门到精通(一)搭建SpringBoot项目

SpringBoot从入门到精通(二)SpringBoot办事根基设置

SpringBoot从入门到精通(三)SpringBoot常见Rest接口

SpringBoot从入门到精通(四)SpringBoot接口权限控制

SpringBoot从入门到精通(五)SpringBoot毗连数据库

SpringBoot从入门到精通(六)SpringBoot考证validation

SpringBoot从入门到精通(七)SpringBoot集成MyBatis

SpringBoot从入门到精通(八)SpringBoot集成JPA

SpringBoot从入门到精通(九)SpringBoot集成RestTemplate请求接口

SpringBoot从入门到精通(十)SpringBoot集成ehcache内存缓存

SpringBoot集成Logback碰到的题目

SpringBoot根本之Spring Actuator

SpringBoot根本之Spring Expression Language(Spring表达说话SpEL)

SpringBoot根本之Spring Data Jpa

SpringBoot根本之AOP&AspectJ

SpringBoot根本之JDBCTemplate

Spring Cloud根本之Discovery Service办事发现简单搭建

Spring Cloud根本之Intelligent Routing智能路由

Spring Cloud根本之Config Server设置中心简单搭建

Spring Cloud根本之Load Balancing负载平衡

Spring Cloud根本之Hystrix熔断器

高端人脉微信群

高端人脉微信群

人脉=钱脉,我们相信天下没有聚不拢的人脉,扫码进群找到你所需的人脉,对接你所需的资源。

商业合作微信

商业合作微信

本站创始人微信,13年互联网营销经验,擅长引流裂变、商业模式、私域流量,高端人脉资源丰富。

精彩点评

相关推荐

有哪些超神的油猴脚本?

有哪些超神的油猴脚本?

小编在之前就介绍过很多油猴里的神器插件,这里给大家总结几款经典中的经典。01Usersc

一篇教会你写90%的shell脚本

一篇教会你写90%的shell脚本

shell是外壳的意思,就是操作系统的外壳。我们可以通过shell命令来操作和控制操作系统

脚本怎么写?250+个万能脚本,可直接套用!

脚本怎么写?250+个万能脚本,可直接套用!

作者:厚昌学院特聘讲师,厚昌学院顾问团队核心成员,从事互联网行业从事互联网行业8

浏览器辅助神器:油猴脚本使用教程

浏览器辅助神器:油猴脚本使用教程

前言「油猴脚本」是一段脚本代码,通过它可以让浏览器实现各种各样的扩展功能,和浏览

这100个shell脚本案例,你都知道吗?一篇教会你写90%的 ...

这100个shell脚本案例,你都知道吗?一篇教会你写90%的 ...

shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成

最新一波油猴脚本推荐:有了它们,你的浏览器就无敌了

最新一波油猴脚本推荐:有了它们,你的浏览器就无敌了

关注扩展迷、喜欢折腾电脑的小伙伴们,应该都对各种各样的浏览器插件不陌生了。浏览器

最强浏览器插件:油猴脚本的安装及使用教程

最强浏览器插件:油猴脚本的安装及使用教程

Tampermonkey 是一款免费的浏览器扩展和最为流行的用户脚本管理器,它适用于 Chrome,

油猴脚本管理器的超详细下载安装使用教程——新手必看

油猴脚本管理器的超详细下载安装使用教程——新手必看

油猴脚本管理器的超详细下载安装使用教程——新手必看油猴可以帮你干什么:全网VIP视

iPad随航脚本(Mac13.0Ventura)

iPad随航脚本(Mac13.0Ventura)

参考文章和视频:将iPad作为Mac Mini主屏幕的实现方法视频:无屏自动启动随航 iPad作为M

模板很齐全,视频脚本怎么写?50个短视频脚本文案模板 ...

模板很齐全,视频脚本怎么写?50个短视频脚本文案模板 ...

在运营短视频时,你有没有遇到过这样的问题:1、拍了一半发现拍摄场景不行;2、拍摄过

一个油猴脚本,让你体验真正的百度网盘下载不限速!

一个油猴脚本,让你体验真正的百度网盘下载不限速!

我们先看一下这个脚本的下载效果。我是100M的宽带,这直接能飙到20MB/s,所以下载速度

视频拍摄脚本怎么写?完整视频拍摄脚本范文实例分享

视频拍摄脚本怎么写?完整视频拍摄脚本范文实例分享

写脚本?对于没有视频背景的朋友来说可能就会有疑问,脚本是什么?不应该是电影,电视

「小白教程」让浏览器为所欲为!油猴脚本简介与使用心得

「小白教程」让浏览器为所欲为!油猴脚本简介与使用心得

本内容来源于@什么值得买APP,观点仅代表作者本人 |作者:Stark-C大家好,我是Stark-

Tampermonkey油猴插件——安装与使用教程

Tampermonkey油猴插件——安装与使用教程

​初次见面,大家好。相信熟悉浏览器的都知道,尤其是大名鼎鼎的Chrome浏览器,丰富的

这是我见过最牛的shell脚本100例,学习提升面试必备,建议收藏

这是我见过最牛的shell脚本100例,学习提升面试必备,建议收藏

从历史上看,shell一直是类Unix系统的原生命令行解释器。多年来,它已被证明是Unix的

网售几元钱的网红脚本,真是顶流主播的走红秘籍?

网售几元钱的网红脚本,真是顶流主播的走红秘籍?

有人说,网红行业的现状是江山代有才人出,各领风骚“好几天”。的确,即便是行业顶流

115最新转存脚本(可转存和提取SHA1版本)

115最新转存脚本(可转存和提取SHA1版本)

最近115调整了接口,导致115转存助手ui优化版3.8.1版本无法转存或获取SHA1。有大神在

视频脚本创作不完全指南

视频脚本创作不完全指南

根据第49次《中国互联网络发展状况统计报告》数据,截至2022年12月,我国网络视频(含

一文详解Shell脚本编程,从基础到进阶,通俗易懂一目了然

一文详解Shell脚本编程,从基础到进阶,通俗易懂一目了然

Shell脚本编程难,难于上青天!这话不假,尤其很多程序员新人,学了几个月Shell脚本写

好的短视频从脚本制作开始,学会这3招,还怕做不出好脚本?

好的短视频从脚本制作开始,学会这3招,还怕做不出好脚本?

在上期我们做了个形象的比喻,把短视频制作比喻成我们造房子,前面我们已经带领大家打

商业洽谈 文章投递 寻求报道
电话咨询: 15924191378
关注微信