Java执行SQL脚本文件到数据库详解
作者:夏夏_夏七七 发布时间:2023-08-08 08:30:00
标签:Java,SQL,数据库
本文实例为大家分享了Java执行SQL脚本文件到数据库的具体方式,供大家参考,具体内容如下
方式一:直接读取SQL脚本文件的内容,然后传递到SQL中。
代码:RunSqlService:
@Autowired
private 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<String,Object> map=new HashMap<String,Object>();
map.put("sqlStr", sqlStr);
sqlSessionTemplate.selectList("runSql.runSqlBySqlStr", map);
}
SQLMap:
<mapper namespace="runSql">
<select id="runSqlBySqlStr" parameterType="map">
<![CDATA[ ${sqlStr}]]>
</select>
</mapper>
这种写法:只支持数据的变化(新增、修改、删除),且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 8 中的 Map.replaceAll() 方法将所有的值转为 String 类型:Map<String, Obj
- 1. 启用HTTPS修改配置application.ymlserver:# port: 80 port: 443 s
- 前言春节要到了,看惯了前端各种小游戏,确实做得很好,很精致。但是我也要为后端程序员稍微做一点贡献,做一款java版本的【年兽大作战】。这个游
- 最近参与了开发一款旅行APP,其中包含实时聊天和动态评论功能,终于耗时几个月几个伙伴完成了,今天就小结一下至于实时聊天功能如果用户不多的情况
- 本文实例讲述了C#实现输入10个数存入到数组中并求max和min及平均数的方法。分享给大家供大家参考,具体如下:using System;u
- 1、需求 在Java项目中,需要读取resource资源目录下的文件,以及遍历指定资源目
- 先来看看效果图如何使用示例代码PromptViewHelper pvHelper = new PromptViewHelper(mActiv
- 本文接着上一篇,继续为大家分享了JavaWeb实现学生信息管理系统的第二篇,供大家参考,具体内容如下今日任务:实现学生管理系统的查找和添加功
- 本文实例为大家分享了Android屏幕适配工具类的具体代码,供大家参考,具体内容如下DimenToolgithub地址Android 屏幕适
- 我们来讲一下自定义组合控件,相信大家也接触过自定义组合控件吧,话不多说,直接干(哈~哈~):大家看到这个觉得这不是很简单的吗,这不就是写个布
- 继承(加上封装和多态性)是面向对象的编程的三个主要特性(也称为“支柱”)之一。 继承用于创建可重用、扩展和修改在其他类中定义的行为的新类。其
- 本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下首先来看一下我们要做成的而效果:主页面要显示一个view
- 1.Spring中的 * 在web开发中, * 是经常用到的功能。它可以帮我们预先设置数据以及统计方法的执行效率等等。今天就来详细的谈一下s
- Spring Security OAuth 默认提供OAuth2.0 的四大基本授权方式(authorization_code\implic
- /** * 朴素字符串算法通过两层循环来寻找子串, * 好像是一个包含模式的“模板”沿待查文本滑动。 * 算法的思想是:从主串S的第p
- 需求当游戏显示3d场景及其UI的时候。玩家左右晃动手机的时候,UI界面会随之左右偏移。上下晃动的时候,3D场景会随之上下偏移。手机停止晃动的
- JavaFx初探一,UI控件的使用,具体内容如下方式一:使用纯代码直接new view控件,这样就不涉及到与fxml文件之间的交互了方式二:
- 本文实例为大家分享了java查找图中两点之间所有路径的具体代码,基于邻接表,供大家参考,具体内容如下图类:package graph1;im
- 记录一下使用IDEA创建servlet并使用Tomcat本地部署的过程。需要安装好的软件首先IDEA社区版不支持Java EE,因此要使用U
- 这篇文章主要介绍了Java流程控制顺序结构原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可