//提示:DML、DDL语句都可执行
import javax.servlet.http.HttpServletRequest;
import javax.sql.DataSource;
import java.io.File;
import java.sql.Connection;
@Autowired
private DataSource dataSource;
@RequestMapping("/doSqlFile")
@ResponseBody
public JsResult doSqlFile(HttpServletRequest request, String filename) throws Exception {
JsResult jsResult = new JsResult();
String realPath = request.getSession().getServletContext().getRealPath("/template/");
realPath = realPath.replaceAll("\\\\","/");
Connection conn = null;
try {
String filepath = realPath + filename;//绝对路径
PathResource resource = new PathResource(filepath);//获得文件资源
conn = dataSource.getConnection();//获得数据库连接
conn.setAutoCommit(false);//关闭数据库自动提交
ScriptUtils.executeSqlScript(conn, resource);//ScriptUtiles工具类,处理sql文件并执行
conn.commit();//手动提交
conn.close();//关闭连接
jsResult.setResultStatus("01");
jsResult.setMessage("执行成功");
} catch (Exception e) {
try {
conn.rollback();//回退,如果文件中有一条sql报异常,则之前执行的sql不奏效
conn.close();//关闭连接
} catch (Exception ec) {
ec.printStackTrace();
String message = ec.getMessage();
jsResult.setResultStatus("02");
jsResult.setMessage(message);
}
e.printStackTrace();
String message = e.getMessage();
jsResult.setResultStatus("02");
jsResult.setMessage(message);
}
return jsResult;
}