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)的问题,完美了,喜欢的小伙伴们快拿去享用吧。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java连接MYSQL数据库的实现步骤

    此文章主要向大家描述的是Java连接MYSQL 数据库(以MySQL为例)的实际操作步骤,我们是以相关实例的方式来引出Java连接MYSQL 数据库的实际操作流程,以下就是文章的主要内容描述. 当然,首先要安装有JDK(一般是JDK1.5.X).然后安装MySQL,这些都比较简单,具体过程就不说了.配置好这两个环境后,下载JDBC驱动mysql-connector-java-5.0.5.zip(这个是最新版的).然后将其解压缩到任一目录.我是解压到D盘,然后将其目录下的mysql-connect

  • java jdbc连接mysql数据库实现增删改查操作

    jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打交道非常基础的一个知识,也是比较接近底层的,在实际的工作中大家用得更多的其实还是比较成熟的框架,例如Hibernate.Mybatis. 但是作为这些成熟框架的底层的jdbc却也是我们应该去掌握的,只有了解了jdbc的增删改查,这样在以后如果有兴趣去研究Hibernate或者Mybatis的源代码的时候才能更好的去理解这些成熟的框架是如何去实现增删改查

  • java连接mysql数据库乱码的解决方法

    解决方法一: mysql安装时候的编码, 看下my.ini,有无 复制代码 代码如下: [mysql] default-character-set=utf8 [client] default-character-set=utf8 [mysqld] default-character-set=utf8创建表的时候设置: DROP TABLE IF EXISTS `Company`; CREATE TABLE IF NOT EXISTS `Company` ( `Cname` VARCHAR(10)

  • java连接sql server 2008数据库代码

    Java连接SQLServer 2008数据库的步骤: 1.到微软官方下载jdbc 并解压,得到sqljdbc.jar和sqljdbc4.jar,由于使用的是JDK1.7,所以使用sqljdbc4.jar, 2.复制文件sqljdbc4.jar到jdk目录\jdk1.7.0\jre\lib\ext下. 配置系统变量classpath 变量路径 D:\Java\jdk1.7.0\jre\lib\ext\sqljdbc4.jar 测试程序: 复制代码 代码如下: import java.sql.*;

  • 如何在Java程序中访问mysql数据库中的数据并进行简单的操作

    在上篇文章给大家介绍了Myeclipse连接mysql数据库的方法,通过本文给大家介绍如何在Java程序中访问mysql数据库中的数据并进行简单的操作,具体详情请看下文. 创建一个javaProject,并输入如下java代码: package link; import java.sql.*; /** * 使用JDBC连接数据库MySQL的过程 * DataBase:fuck, table:person: * 使用myeclipse对mysql数据库进行增删改查的基本操作. */ public

  • Java实现获得MySQL数据库中所有表的记录总数可行方法

    在MySQL中,可以通过SELECT COUNT(*) FROM table_name查询某个表中有多少条记录.如果想知道某个数据库中所有别的记录总数应该怎么做呢?本文给出两种可行的Java程序,解决该问题. 1. 首先确定数据库中有多少个表,然后对每个表执行SELECT COUNT(*) FROM table_name 复制代码 代码如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.Pr

  • java连接mysql数据库详细步骤解析

    第一步:下载一个JDBC驱动包,例如我用的是:mysql-connector-java-5.1.17-bin.jar 第二步:导入下载的JDBC驱动包,我用的是myeclipse,选中自己要导包的项目,右   击选中propertise,再选JavaBuild Path, 右边会出现libreries,点进去,再点Add External JARs  然后再找到你要导入的驱动包.完了之后再点Order andExport,下面再选中你导入的包. 第三步:加载驱动程序:Class.forName(

  • 通过java备份恢复mysql数据库的实现代码

    复制代码 代码如下: import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java

  • java使用jdbc连接数据库工具类和jdbc连接mysql数据示例

    这个工具类使用简单,实例化直接调用就可以了,大家还可以方便的根据自己的需要在里面增加自己的功能 复制代码 代码如下: package com.lanp.ajax.db; import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException; /** * 连接数据库的工具类,被定

  • java连接MySQl数据库实例代码

    复制代码 代码如下: package com.abc.dao; import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement; public class BaseDao { public Connection getConn() {  Connection conn=null;  tr

随机推荐