1. package com.athena.ckx.util;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.InputStream;
  5. import java.sql.Connection;
  6. import java.sql.Statement;
  7. import java.util.ArrayList;
  8. import java.util.Arrays;
  9. import java.util.List;
  10.  
  11. /**
  12. * SQL 脚本执行类
  13. * @author kong
  14. *
  15. */
  16. public final class SqlFileExecutor {
  17.  
  18. public static void main(String[] args) {
  19. try {
  20. List<String> sqlList = loadSql("src/test/resources/config/script.sql");
  21. System.out.println("size:" + sqlList.size());
  22. for (String sql : sqlList) {
  23. System.out.println(sql);
  24. }
  25.  
  26. } catch (Exception e) {
  27. // TODO Auto-generated catch block
  28. e.printStackTrace();
  29. }
  30. }
  31.  
  32. /**
  33. * 读取 SQL 文件,获取 SQL 语句
  34. * @param sqlFile
  35. * SQL 脚本文件
  36. * @return List<sql> 返回所有 SQL 语句的 List
  37. * @throws Exception
  38. */
  39. private static List<String> loadSql(String sqlFile) throws Exception {
  40. List<String> sqlList = new ArrayList<String>();
  41. try {
  42. InputStream sqlFileIn = new FileInputStream(sqlFile);
  43. StringBuffer sqlSb = new StringBuffer();
  44. byte[] buff = new byte[1024];
  45. int byteRead = 0;
  46. while ((byteRead = sqlFileIn.read(buff)) != -1) {
  47. sqlSb.append(new String(buff, 0, byteRead));
  48. }
  49.  
  50. // Windows 下换行是 \r\n, Linux 下是 \n
  51. String[] sqlArr = sqlSb.toString()
  52. .split("(;\\s*\\r\\n)|(;\\s*\\n)");
  53. for (int i = 0; i < sqlArr.length; i++) {
  54. String sql = sqlArr[i].replaceAll("--.*", "").trim();
  55. if (!sql.equals("")) {
  56. sqlList.add(sql);
  57. }
  58. }
  59. return sqlList;
  60. } catch (Exception ex) {
  61. throw new Exception(ex.getMessage());
  62. }
  63. }
  64.  
  65. /**
  66. * 传入连接来执行 SQL 脚本文件,这样可与其外的数据库操作同处一个事物中
  67. *
  68. * @param conn
  69. * 传入数据库连接
  70. * @param sqlFile
  71. * SQL 脚本文件 可选参数,为空字符串或为null时 默认路径为 src/test/resources/config/script.sql
  72. * @throws Exception
  73. */
  74. public static void execute(Connection conn,String sqlFile) throws Exception {
  75. Statement stmt = null;
  76. if(sqlFile==null||"".equals(sqlFile)){
  77. sqlFile="src/test/resources/config/script.sql";
  78. }
  79. List<String> sqlList = loadSql(sqlFile);
  80. stmt = conn.createStatement();
  81. for (String sql : sqlList) {
  82. stmt.addBatch(sql);
  83. }
  84. int[] rows = stmt.executeBatch();
  85. System.out.println("Row count:" + Arrays.toString(rows));
  86. }
  87. }

java解析sql文件的更多相关文章

  1. atitit.java解析sql语言解析器解释器的实现

    atitit.java解析sql语言解析器解释器的实现 1. 解析sql的本质:实现一个4gl dsl编程语言的编译器 1 2. 解析sql的主要的流程,词法分析,而后进行语法分析,语义分析,构建sq ...

  2. java解析xml文件并输出

    使用java解析xml文件,通过dom4j,代码运行前需先导入dom4j架包. ParseXml类代码如下: import java.io.File; import java.util.ArrayLi ...

  3. 使用Java解析XML文件或XML字符串的例子

    转: 使用Java解析XML文件或XML字符串的例子 2017年09月16日 11:36:18 inter_peng 阅读数:4561 标签: JavaXML-Parserdom4j 更多 个人分类: ...

  4. Java解析JSON文件的方法

    http://blog.sina.com.cn/s/blog_628cc2b70101dydc.html java读取文件的方法 http://www.cnblogs.com/lovebread/ar ...

  5. Java解析xml文件遇到特殊符号&会出现异常的解决方案

    文/朱季谦 在一次Java解析xml文件的开发过程中,使用SAX解析时,出现了这样一个异常信息: Error on line 60 of document : 对实体 "xxx" ...

  6. java解析XML文件

    dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源 ...

  7. java解析properties文件

    在自动化测试过程中,经常会有一些公用的属性要配置,以便后面给脚本使用,我们可以选择xml, excel或者json格式来存贮这些数据,但其实java本身就提供了properties类来处理proper ...

  8. JAVA解析XML文件(DOM,SAX,JDOM,DOM4j附代码实现)

    1.解析XML主要有四种方式 1.DOM方式解析XML(与平台无关,JAVA提供,一次性加载XML文件内容,形成树结构,不适用于大文件) 2.SAX方式解析XML(基于事件驱动,逐条解析,适用于只处理 ...

  9. Java解析XML文件的方式

    在项目里,我们往往会把一些配置信息放到xml文件里,或者各部门间会通过xml文件来交换业务数据,所以有时候我们会遇到“解析xml文件”的需求.一般来讲,有基于DOM树和SAX的两种解析xml文件的方式 ...

随机推荐

  1. 获取DataGridView上选中的一行并转换为一个DataRow类型

    ataGridViewRow gridrow = dataGridView1.SelectedRows[0]; DataRowView row_view = (DataRowView)gridrow. ...

  2. 使用ant时 出现 java.lang.OutOfMemoryErro r: Java heap space的解决办法

    在Linux的shell中,使用export设置ANT_OPTS变量,值为1G export ANT_OPTS=-Xmx1g ant 同理在windows的cmd中,使用set设置ANT_OPTS变量 ...

  3. 检测到"_ITERATOR_DEBUG_LEVEL"的不匹配项

    error: vtkCommon.lib(vtkSmartPointerBase.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项:值“0”不 ...

  4. HDU 3499【最短路】

    题意: 给你一幅图,然后起点终点,然后有一个条件是可以使某条边的花费减半,求最短路的最小花费. 思路: (来自大哥) 最短路的时候多一维,途中是否有花费减半的边: 然后转移,如果上一条有减半的,这一条 ...

  5. Unity(2) 脚本简单操作

    生命周期(按顺序排列) Awake():脚本唤醒,系统执行的第一个方法,在脚本声明周期内只执行一次,初始化一般可以在这里 Start():Awake之后,Update之前,只执行一次,一般在awake ...

  6. Unity Prefabs

    通过上一期的学习,我们知道为了如何向场景中添加一个物体.问题来了,如果需要对这个立方体进行修改应该怎么做呢?那我们肯定就得修改这段代码,能不能将立方体本身从我们的开发中单独提出来呢?这就涉及到我们今天 ...

  7. [Xcode 实际操作]八、网络与多线程-(18)PerformSelector消息处理方法:由运行时系统,负责去调用对象的指定方法

    目录:[Swift]Xcode实际操作 本文将演示PerformSelector消息处理方法. 在项目文件夹上点击鼠标右键弹出文件菜单. [New File]->[Swift File]-> ...

  8. 笔记-JavaWeb学习之旅8

    Window对象-定时器方法 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  9. C 语言实例 - 计算字符串长度

    C 语言实例 - 计算字符串长度 C 语言实例 C 语言实例 计算字符串长度. 实例 - 使用 strlen() #include <stdio.h> #include <strin ...

  10. 分布式通信-tcp/ip socket

    Socket通讯的过程 Server端Listen(监听)某个端口是否有连接请求,Client端向Server 端发出Connect(连接)请求,Server端向Client端发回Accept(接受) ...