对sql文件进行读取并通过JDBC批量执行
public class MySQLHandle {//mysql驱动包名private static final String DRIVER_NAME = "com.mysql.jdbc.Driver";//数据库连接地址private static final String URL = "jdbc:mysql://localhost:3306/test";//用户名private static final String USER_NAME = "root";//密码private static final String PASSWORD = "rootroot";//数据库连接对象private static Connection connection;public static void main(String[] args) {}static {try {//加载mysql的驱动类Class.forName(DRIVER_NAME);} catch (Exception e) {e.printStackTrace();}}//构造函数,包括连接数据库等操作public MySQLHandle(){try {//加载mysql的驱动类Class.forName(DRIVER_NAME);//获取数据库连接connection = DriverManager.getConnection(URL, USER_NAME, PASSWORD);} catch (Exception e) {e.printStackTrace();connection = null;}}//带参数构造函数,用于指定参数连接数据库public MySQLHandle(String Database,String User,String Password){try {//获取数据库连接connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/"+Database, User, Password);} catch (Exception e) {e.printStackTrace();connection = null;}}public Connection getConnection(){return connection;}public static void ReleaseConnect(){if (connection != null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}/*** @方法描述:批量执行SQL语句* @param sql 包含待执行的SQL语句的ArrayList集合* @return int 影响的函数*/public int batchDate(ArrayList<String> sql){try {Statement st = connection.createStatement();for(String subsql :sql){st.addBatch(subsql);}st.executeBatch();return 1;}catch (Exception e) {e.printStackTrace();return 0;}}/*** 以行为单位读取文件,并将文件的每一行格式化到ArrayList中,常用于读面向行的格式化文件*/private static ArrayList<String> readFileByLines(String filePath) throws Exception {ArrayList<String> listStr=new ArrayList<>();StringBuffer sb=new StringBuffer();BufferedReader reader = null;try {reader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "UTF-8"));String tempString = null;int flag=0;// 一次读入一行,直到读入null为文件结束while ((tempString = reader.readLine()) != null) {// 显示行号// System.out.println("line " + line + ": " + tempString);if(tempString.trim().equals(""))continue;if(tempString.substring(tempString.length()-1).equals(";")){if(flag==1){sb.append(tempString);listStr.add(sb.toString());sb.delete(0,sb.length());flag=0;}elselistStr.add(tempString);}else{flag=1;sb.append(tempString);}}reader.close();} catch (IOException e) {e.printStackTrace();throw e;} finally {if (reader != null) {try {reader.close();} catch (IOException e1) {}}}return listStr;}/*** 读取文件内容到SQL中执行* @param sqlPath SQL文件的路径:如:D:/TestProject/web/sql/脚本.Sql*/public void runSqlByReadFileContent(String sqlPath){try {ArrayList<String> sqlStr = readFileByLines(sqlPath);if (sqlStr.size() > 0) {int num=batchDate(sqlStr);if(num>0)System.out.println("执行成功");elseSystem.out.println("未有执行的SQL语句");}else{System.out.println("没有需要执行的SQL语句");}} catch (Exception e) {e.printStackTrace();}}
}
对sql文件进行读取并通过JDBC批量执行相关推荐
- jdbc 批量执行sql
最近有个需求是需要在java 后端执行导入,数据量比较大, 需要对数据进行很多操作,最后要执行插入数据操作, 一开始先组织好插入数据的sql语句放在数组中,使用的是 jdbcTemplate.batc ...
- 从sql文件中读取sql语句执行后报语法错误问题的解决办法
一般的sql文件保存时都为UTF-8编码,默认(如果sql文件中有中文字符)会有一个BOM头,读取并执行的时候会报syntax error语法错误(这个错误搞了好几天,郁闷),这个时候需要将sql文件 ...
- 金蝶ais账套文件数据库读取小工具,批量引出数据
金蝶AIS账套数据引出超级工具,免费小工具. 无需用户密码,无需安装金蝶,无需手工打开数据库,直接从账套文件读取科目表.核算项目表.记账凭证. 财务人不可错过的工具. 注意:可能会被360卫士.微软杀 ...
- Android读取sql文件并导入数据库
sql文件一般不应该由Android直接执行的,正常应该是先转成db文件直接放入Android中,Android只需执行一些简单sql命令. 但有时有这样的需求怎么办呢,比如你数据库是上个版本放进的, ...
- sh执行文件 参数传递_sh 脚本执行sql文件传参数
一.前言 今天做数据删除,用的命令行输入参数,并且调用执行的sql文件,我采用了sed命令,进行替换. sh脚本如下 #! /bin/sh echo "Please enter the ba ...
- 从属性资源文件中读取连接数据库信息
从属性资源文件中读取连接数据库信息 jdbc.properties 属性配置文件 driver=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:330 ...
- python数据库操作批量sql执行_利用Python如何批量修改数据库执行Sql文件
利用Python如何批量修改数据库执行Sql文件 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: 利用Python如何批量修改数据库执行Sql文件.txt ] (友 ...
- java scriptrunner,java使用ScriptRunner执行sql文件
/** * 使用ScriptRunner执行sql文件 */ public class ExecuteSql { private static final Logger LOGGER = Logger ...
- java执行sql文件
方式一:直接读取SQL脚本文件的内容,然后传递到SQL中. 代码:RunSqlService: @Autowiredprivate RunSqlDao runSqlDao;/*** 读取文件内容到SQ ...
- Metasploit从文件中读取目标地址
本文简单介绍如何使用Metasploit从文件中读取目标地址,来执行检测. 以检测MS17-010漏洞为例,在设定RHOSTS参数时,可设定目标地址范围和CIDR地址块,设定单个IP的目标也是可以的. ...
最新文章
- java b kb mb gb 转换_java 上传文件大小转换为 GB/MB/KB/B
- puppet集群之 Nginx and Passenger
- 几行简单代码实现DIV层上显示Tooltip效果
- 【算法21】从1到n的正数中1的出现次数
- 通过粘性仙人掌基元进行延迟加载和缓存
- 使用了css3动画的元素z-index失效解决办法
- 遍历josn的三种方式
- 11462 - Age Sort
- js 自定义DOM事件
- ArcView 9.3 安装帮助指南(针对Student Edition-One-Year版本)
- 从NASA获取全球气象数据
- 使用js获取移动端设备屏幕高度和宽度尺寸的方法
- linux执行jar的两种方式
- 2020年四川省大型舞台艺术创作申报材料流程及申请奖励补助
- token失效 判断access_微信怎么判断微信accesstoken是否过期
- 大数据开发的26个专业术语
- 上课案列-翻牌游戏(重置、历史记录)
- 前端学习——VUE组件基础
- Linux tar命令详解
- 跟着瑜伽老师一节课程序员锻炼身体