java执行sql文件
方式一:直接读取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文件相关推荐
- java执行sql文件_面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他
初识 MyBatis MyBatis 是第一个支持自定义 SQL.存储过程和高级映射的类持久框架.MyBatis 消除了大部分 JDBC 的样板代码.手动设置参数以及检索结果.MyBatis 能够支持 ...
- java执行sql文件_面试官:MyBatis SQL是如何执行的?把这篇文章甩给他
初识 MyBatis MyBatis 是第一个支持自定义 SQL.存储过程和高级映射的类持久框架.MyBatis 消除了大部分 JDBC 的样板代码.手动设置参数以及检索结果.MyBatis 能够支持 ...
- java scriptrunner,java使用ScriptRunner执行sql文件
/** * 使用ScriptRunner执行sql文件 */ public class ExecuteSql { private static final Logger LOGGER = Logger ...
- sh执行文件 参数传递_sh 脚本执行sql文件传参数
一.前言 今天做数据删除,用的命令行输入参数,并且调用执行的sql文件,我采用了sed命令,进行替换. sh脚本如下 #! /bin/sh echo "Please enter the ba ...
- java生成sql文件
java生成sql文件 场景 场景 用于清理数据库数据,生成sql语句脚本,方便DBA执行 @RequestMapping("/cleanQuestion")@ResponseBo ...
- 使用Python批量修改数据库执行Sql文件
由于上篇文章中批量修改了文件,有的时候数据库也需要批量修改一下,之前的做法是使用宝塔的phpMyAdmin导出一个已经修改好了的sql文件,然后依次去其他数据库里导入,效率不说极低,也算低了,且都是些 ...
- python 选择不同数据库环境执行SQL文件
在有很多SQL文件,或者很多SQL语句的时候,如果手动每个文件执行会很麻烦:另外有的时候SQL语句的执行会影响用户的使用效果,需要在晚上没有用户使用网站的情况下执行SQL语句,也就是晚上定时执行SQL ...
- python数据库操作批量sql执行_使用Python批量修改数据库执行Sql文件
由于上篇文章中批量修改了文件,有的时候数据库也需要批量修改一下,之前的做法是使用宝塔的phpMyAdmin导出一个已经修改好了的sql文件,然后依次去其他数据库里导入,效率不说极低,也算低了,且都是些 ...
- sqlite创建表联合主键的sql写法、执行sql文件、不支持右连接、获取年份、case when 的使用
sqlite创建表时,联合主键,要写在建表语句最后一行,primary key (),括号里面: 执行sql文件:使用 .read xxx.sql 命令: 下图执行错误,应该是字段名含有中文,不能读取 ...
最新文章
- 黑龙江专科大学计算机专业,黑龙江10大最好的专科学校,有你心仪的学校吗?...
- float浮动的学习
- GET和POST提交乱码解决方案
- Linux之不删除指定文件夹,其他都删(文件和文件夹)
- 通过×××路由器实现跨网段访问
- 《Java 核心技术卷1 第10版》学习笔记------异常
- linux 433发送驱动
- java postconstruct_spring框架中@PostConstruct的实现原理
- 图像的灰度级和动态范围(转)
- c语言123报数,新人求解一道C语言题。。。麻烦了
- android仿饿了么筛选,Android仿饿了么搜索功能
- 大数据Hadoop学习记录(2)----基于Java语言的HDFS文件数据载入(判断文件是否存在、写入文本文件、上传本次文件到HDFS、读取HDFS文件内容)
- 过半博士后考虑退出原领域,Nature呼吁不能因疫情失去科学的下一代
- Protel 99SE详细安装教程(附安装包)
- nmap扫描服务器端口不稳定,nmap端口扫描问题
- java 自动生成密码_java 自动生成密码
- android studio 使用夜神模拟器
- SAST、DAST、IAST几种测试工具的比较
- 886_AUTOSAR_TPS_GenericStructureTemplate33_变体处理例子
- PCB拼板和工艺边教程