SSM環境下,獲取指定資料庫連線執行sql檔案
阿新 • • 發佈:2019-02-20
1.需求場景
多資料來源下,獲取指定資料來源連線,執行原生sql語句。
2.專案環境
spring,spring mvc, mybatis,MySQL
3.實現方法
(1)利用spring 環境,獲取資料來源連線
package com.jlc.util.jdbc; import java.sql.Connection; import org.apache.commons.dbcp.BasicDataSource; import org.springframework.web.context.ContextLoader; import org.springframework.web.context.WebApplicationContext; /** * 資料庫連結幫助類 * * @author cch * @date 2014-09-11 */ public class DBConnection { private Connection connection = null; private static DBConnection instance = new DBConnection(); private DBConnection() { } /** * 單例項 */ public static DBConnection getInstance() { return instance; } /** * 獲得資料庫連結 */ public Connection getConnection(String dataSource) throws Exception { if (this.connection == null || this.connection.isClosed()) { WebApplicationContext ct = ContextLoader.getCurrentWebApplicationContext(); BasicDataSource datasource = (BasicDataSource) ct .getBean(dataSource); this.connection = datasource.getConnection(); } return this.connection; } /** * 關閉資料庫連線 */ public static void closeConnection(Connection conn) { try { if (conn != null && !conn.isClosed()) { conn.close(); conn = null; } } catch (Exception e) { e.printStackTrace(); } } /** * 釋放資源 **/ private void closeAll(ResultSet rs, PreparedStatement st) { try { if (rs != null) { rs.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if (st != null) { st.close(); } } catch (SQLException e) { e.printStackTrace(); } } }
(2)執行原生sql語句
package com.sql.tools; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.sql.Connection; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.ibatis.jdbc.ScriptRunner; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.jlc.util.jdbc.DBConnection; public class SqlRunDemo { private final static SimpleDateFormat sdfymdhm = new SimpleDateFormat("yyyyMMddHHmmss"); @RequestMapping(value = "/insertdata") public void runsql(@RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request){ String fileName=""; String filePath=""; Connection connection =null; ScriptRunner runner =null; String path = request.getSession().getServletContext().getRealPath("path"); //上傳指令碼檔案 fileName = FileUtil.uploadFileSQL(file,request,path); filePath = path+File.separator+fileName;//上傳檔案的真實路徑 try{ //獲取指定資料來源連線 connection = DBConnection.getInstance().getConnection("dataSource8"); runner = new ScriptRunner(connection); runner.setErrorLogWriter(null); runner.setLogWriter(null); runner.runScript(new InputStreamReader(new FileInputStream(filePath),"UTF-8")); }catch(Exception e){ e.printStackTrace(); }finally { DBConnection.closeConnection(connection); } } }