1. 程式人生 > >SSM環境下,獲取指定資料庫連線執行sql檔案

SSM環境下,獲取指定資料庫連線執行sql檔案

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);
				
			}
	}
}