方式一:直接读取SQL脚本文件的内容,然后传递到SQL中。

代码:RunSqlService:

     @Autowiredprivate RunSqlDao runSqlDao;/*** 读取文件内容到SQL中执行* @param sqlPath SQL文件的路径:如:D:/TestProject/web/sql/脚本.Sql*/public void runSqlByReadFileContent(String sqlPath) throws Exception {try {String sqlStr = readFileByLines(sqlPath);// System.out.println("获得的文本:" + sqlStr);if (sqlStr.length() > 0) {runSqlDao.runSqlBySqlStr(sqlStr);}} catch (Exception e) {e.printStackTrace();throw e;}}/*** 以行为单位读取文件,常用于读面向行的格式化文件*/private String readFileByLines(String filePath) throws Exception {StringBuffer str = new StringBuffer();BufferedReader reader = null;try {reader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "UTF-8"));String tempString = null;int line = 1;// 一次读入一行,直到读入null为文件结束while ((tempString = reader.readLine()) != null) {// 显示行号// System.out.println("line " + line + ": " + tempString);str = str.append(" " + tempString);line++;}reader.close();} catch (IOException e) {e.printStackTrace();throw e;} finally {if (reader != null) {try {reader.close();} catch (IOException e1) {}}}return str.toString();}

RunSqlDao :

/**
* @param sqlStr
*/
public void runSqlBySqlStr(String sqlStr) {Map map=new HashMap();map.put("sqlStr", sqlStr);sqlSessionTemplate.selectList("runSql.runSqlBySqlStr", map);
}

SQLMap:

这种写法:只支持数据的变化(新增、修改、删除),且SQL文件内容以begin开始,以end结束。无法更新表字段修改等操作。

方式二;使用ScriptRunner

代码:RunSqlService:

    /*** 执行sql脚本文件 使用ScriptRunner* @param sqlPath SQL文件的路径:如:D:/TestProject/web/sql/脚本.Sql*/public void runSqlByScriptRunner(String sqlPath) throws Exception {try {SqlSession sqlSession = sqlSessionFactory.openSession();Connection conn = sqlSession.getConnection();ScriptRunner runner = new ScriptRunner(conn);runner.setEscapeProcessing(false);runner.setSendFullScript(true);runner.runScript(new InputStreamReader(new FileInputStream(sqlPath), "UTF-8"));} catch (Exception e) {e.printStackTrace();throw e;}}

这种写法:只能有一行SQL,即一次执行一个SQL语句,否则就会报错。

方式三:使用ScriptUtils

代码:RunSqlService:(以下两种方式:脚本.Sql 和RunSqlService 在同一目录下)

方法(1)

    /*** 执行sql脚本文件 使用Spring工具类*/public void runSqlBySpringUtils() throws Exception {try {SqlSession sqlSession = sqlSessionFactory.openSession();Connection conn = sqlSession.getConnection();ClassPathResource rc = new ClassPathResource("脚本.Sql", RunSqlDao.class);ScriptUtils.executeSqlScript(conn, rc);} catch (Exception e) {e.printStackTrace();throw e;}}

方法(2)

/*** 执行sql脚本文件 使用Spring工具类*/public void runSqlBySpringUtils() throws Exception {try {SqlSession sqlSession = sqlSessionFactory.openSession();Connection conn = sqlSession.getConnection();ClassPathResource rc = new ClassPathResource("脚本.Sql", RunSqlDao.class);EncodedResource er = new EncodedResource(rc, "utf-8");ScriptUtils.executeSqlScript(conn, er);} catch (Exception e) {e.printStackTrace();throw e;}}

方法(1),脚本.Sql文件必须是ANSI的,否则执行到数据中汉字是乱码。

方法(2)解决了方法(1)的问题,完美了,喜欢的小伙伴们快拿去享用吧。

java执行sql文件相关推荐

  1. java执行sql文件_面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他

    初识 MyBatis MyBatis 是第一个支持自定义 SQL.存储过程和高级映射的类持久框架.MyBatis 消除了大部分 JDBC 的样板代码.手动设置参数以及检索结果.MyBatis 能够支持 ...

  2. java执行sql文件_面试官:MyBatis SQL是如何执行的?把这篇文章甩给他

    初识 MyBatis MyBatis 是第一个支持自定义 SQL.存储过程和高级映射的类持久框架.MyBatis 消除了大部分 JDBC 的样板代码.手动设置参数以及检索结果.MyBatis 能够支持 ...

  3. java scriptrunner,java使用ScriptRunner执行sql文件

    /** * 使用ScriptRunner执行sql文件 */ public class ExecuteSql { private static final Logger LOGGER = Logger ...

  4. sh执行文件 参数传递_sh 脚本执行sql文件传参数

    一.前言 今天做数据删除,用的命令行输入参数,并且调用执行的sql文件,我采用了sed命令,进行替换. sh脚本如下 #! /bin/sh echo "Please enter the ba ...

  5. java生成sql文件

    java生成sql文件 场景 场景 用于清理数据库数据,生成sql语句脚本,方便DBA执行 @RequestMapping("/cleanQuestion")@ResponseBo ...

  6. 使用Python批量修改数据库执行Sql文件

    由于上篇文章中批量修改了文件,有的时候数据库也需要批量修改一下,之前的做法是使用宝塔的phpMyAdmin导出一个已经修改好了的sql文件,然后依次去其他数据库里导入,效率不说极低,也算低了,且都是些 ...

  7. python 选择不同数据库环境执行SQL文件

    在有很多SQL文件,或者很多SQL语句的时候,如果手动每个文件执行会很麻烦:另外有的时候SQL语句的执行会影响用户的使用效果,需要在晚上没有用户使用网站的情况下执行SQL语句,也就是晚上定时执行SQL ...

  8. python数据库操作批量sql执行_使用Python批量修改数据库执行Sql文件

    由于上篇文章中批量修改了文件,有的时候数据库也需要批量修改一下,之前的做法是使用宝塔的phpMyAdmin导出一个已经修改好了的sql文件,然后依次去其他数据库里导入,效率不说极低,也算低了,且都是些 ...

  9. sqlite创建表联合主键的sql写法、执行sql文件、不支持右连接、获取年份、case when 的使用

    sqlite创建表时,联合主键,要写在建表语句最后一行,primary key (),括号里面: 执行sql文件:使用 .read xxx.sql 命令: 下图执行错误,应该是字段名含有中文,不能读取 ...

最新文章

  1. 黑龙江专科大学计算机专业,黑龙江10大最好的专科学校,有你心仪的学校吗?...
  2. float浮动的学习
  3. GET和POST提交乱码解决方案
  4. Linux之不删除指定文件夹,其他都删(文件和文件夹)
  5. 通过×××路由器实现跨网段访问
  6. 《Java 核心技术卷1 第10版》学习笔记------异常
  7. linux 433发送驱动
  8. java postconstruct_spring框架中@PostConstruct的实现原理
  9. 图像的灰度级和动态范围(转)
  10. c语言123报数,新人求解一道C语言题。。。麻烦了
  11. android仿饿了么筛选,Android仿饿了么搜索功能
  12. 大数据Hadoop学习记录(2)----基于Java语言的HDFS文件数据载入(判断文件是否存在、写入文本文件、上传本次文件到HDFS、读取HDFS文件内容)
  13. 过半博士后考虑退出原领域,Nature呼吁不能因疫情失去科学的下一代
  14. Protel 99SE详细安装教程(附安装包)
  15. nmap扫描服务器端口不稳定,nmap端口扫描问题
  16. java 自动生成密码_java 自动生成密码
  17. android studio 使用夜神模拟器
  18. SAST、DAST、IAST几种测试工具的比较
  19. 886_AUTOSAR_TPS_GenericStructureTemplate33_变体处理例子
  20. PCB拼板和工艺边教程

热门文章

  1. 【往届会议已EI检索】第六届管理工程、软件工程与服务科学国际会议
  2. RTX服务器信息存档,Rtx/RTX服务器端基本应用(一)
  3. java 下载网页,图片
  4. Win32窗口程序实例
  5. 单片机工程师面试题小计
  6. 【基于uml高校新闻发布管理系统】
  7. Perl Regular Expression Syntax Perl的正则表达式语法
  8. 基于web的家庭理财系统
  9. python里面的pip是什么意思_python中的pip是什么意思
  10. 新增11条新规约,阿里Java开发手册|黄山版,拥抱规范,远离伤害