中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Java如何將SQL腳本文件執行到數據庫中

發布時間:2020-11-24 17:06:32 來源:億速云 閱讀:852 作者:Leah 欄目:編程語言

使用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)的問題,完美了,喜歡的小伙伴們快拿去享用吧。

關于使用Java如何將SQL腳本文件執行到數據庫中問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南安市| 日土县| 朝阳市| 南城县| 肇东市| 宁城县| 临夏市| 丰顺县| 方山县| 邵东县| 乃东县| 南通市| 汝阳县| 梓潼县| 五原县| 江源县| 罗山县| 井冈山市| 阿拉尔市| 辽源市| 清流县| 五常市| 普陀区| 奈曼旗| 棋牌| 合阳县| 湟中县| 东兴市| 兴宁市| 萍乡市| 阜阳市| 晋中市| 特克斯县| 呈贡县| 来凤县| 新乐市| 绿春县| 江都市| 泸州市| 黄骅市| 石渠县|