java执行sql脚本

使用工具:ibatis(目前以集成在MyBatis3.0.1或更高版本中部分3.x.x版本已移除ibatis,本文使用MyBatis3.0.1MyBatis2.5.x同样集成ibatis,但无法使用

支持JDK版本:1.5及以上

import org.apache.ibatis.jdbc.ScriptRunner;

//执行mysql数据库脚本示例

@Test

public void mulitSqlForIbatisOnMySql() {

try {

//执行日志文件配置

BufferedWriter log = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("src/account/mysql/log.txt")), "UTF-8"));

//执行sql语句报错时文件配置

BufferedWriter error = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("src/account/mysql/error.txt")), "UTF-8"));

Class.forName("com.mysql.jdbc.Driver").newInstance();

//获取数据源

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&reConnect=true;","root", "19821982");

//创建脚本执行对象

ScriptRunner r = new ScriptRunner(conn);

//设置日志输出流,将执行日志保存至流中,每次将会覆写

r.setErrorLogWriter(new PrintWriter(error));

//设置错误信息输出,将错误日志保存至流中,每次将会覆写,如果sql脚本无错误运行成功,则该文件内容为空

r.setLogWriter(new PrintWriter(log));

//执行sql脚本,默认位置为classpath,也就是与src文件夹同级

r.runScript(new BufferedReader(new InputStreamReader(new FileInputStream(new File("src/account/newAccount_mysql.sql")), "UTF-8")));

} catch (Exception e) {

e.printStackTrace();

} finally {

if(null != conn)

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

if(null != log)

try {

log.close();

} catch (IOException e) {

e.printStackTrace();

}

if(null != error)

try {

error.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

注意:在sql脚本中,每条语句使用",“分割,否则将引发异常;一般使用数据库工具,例如navicat将sqlserver表导出为sql时,可能每行语句使用GO批处理语句结束,则如果需要使用ScriptRunner对象执行sql脚本,则需要手动将GO批处理语句替换为”,"

其他可执行sql脚本的工具:flyway、ant(可自行百度,推荐使用ibatis,简单、易操作)

以下附上mybatis下载链接:

标签:脚本,error,java,log,sql,mysql,new

来源: https://blog.csdn.net/HyEISN/article/details/112719639

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐