종속성 패키지 다운로드: http://xiazai.VeVB.COm/201407/tools/java-db-dependent(VeVB.COm).rar
데이터베이스 연결 클래스 소스 코드:
패키지 com.itjh.javaUtil;가져오기 java.sql.Connection;가져오기 java.sql.DriverManager;가져오기 java.sql.PreparedStatement;가져오기 java.sql.ResultSet;가져오기 java.sql.ResultSetMetaData;가져오기 java.sql.SQLException;가져오기 java.util.ArrayList;가져오기 java.util.Collections;가져오기 java.util.HashMap;가져오기 java.util.List;가져오기 java.util.Map;가져오기 org.apache.commons.dbcp.ConnectionFactory;가져오기 org.apache.commons.dbcp.DriverManagerConnectionFactory;가져오기 org.apache.commons.dbcp.PoolableConnectionFactory;가져오기 org.apache.commons.dbcp.PoolingDriver;import org.apache.commons.dbutils.DbUtils;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.MapListHandler;import org.apache. commons.pool.ObjectPool;가져오기 org.apache.commons.pool.impl.GenericObjectPool;/** * 데이터베이스 연결을 위한 포괄적인 클래스입니다. </br> * jar 패키지에 따라 다름: commons.dbcp-1.4, commons.dbutils-1.3, commons.pool-1.5.4 패키지. * * @author Song Lijun* @date 2014년 7월 3일*/public class DBUtil {private String dri = null;private String url = null;private String 사용자 이름 = null;private String 비밀번호 = null;private String poolName = null; / 연결 풀 이름 private ObjectPool ConnectionPool = null // 연결 풀 // 해당 예약 쿼리 클래스 private QueryThread queryThread = null; 함수: 생성자 * * @author Song Lijun * @date 2014년 7월 3일 * @param dri * 드라이버의 전체 클래스 이름(예: com.mysql.jdbc.Driver). * @param url * 데이터베이스 URL 연결(예: * "jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8" * @param userName * 데이터베이스 사용자 이름, 예: root * @param 비밀번호 * 데이터베이스 비밀번호(예: abc * @param poolName *) mypool과 같은 생성된 데이터베이스 연결 풀의 이름입니다. 웹 컨테이너에 대해 이 이름을 반복할 수 없습니다. */public DBUtil(문자열 dri, 문자열 url, 문자열 userName, 문자열 비밀번호, 문자열 poolName) {this.dri = dri;this.url = url;this.username = userName;this.password = 비밀번호;this.poolName = poolName ;}/** * SQL을 실행합니다. * * @param conn * Connection * @param pstm * preparedStatement * @return int sql 실행에 해당하는 영향을 받은 행입니다. * @throws SQLException * @author Song Lijun* @date 2014년 7월 3일*/public int Execution(Connection conn,PreparedStatement pstm)throws SQLException {try {return pstm.executeUpdate();} finally {Close(conn);} } /** * SQL을 쿼리합니다. * * @param conn * 연결 * @param pstm *PreparedStatement * @return List<Map<String,Object>> 쿼리 결과 집합 * @throws SQLException * @author Song Lijun * @date 2014년 7월 3일 */public List <Map <String, Object>> 쿼리(Connection conn,PreparedStatement pstm)에서 SQLException이 발생합니다. {try {return resultSetToList(pstm.executeQuery());} finally {Close(conn);}}/** * 함수: ResultSet은 List<Map<String,Object>>로 변환됩니다. * * * @param rs * ResultSet 원본 데이터 세트 * @ return List<Map<String,Object>> * @throws java.sql.SQLException * @author 송리준* @date 2014년 7월 3일*/private List<Map<String, Object>> resultSetToList(ResultSet rs)는 java.sql.SQLException을 발생시킵니다. {if (rs == null)return Collections.EMPTY_LIST;ResultSetMetaData md = rs.getMetaData() ; / 필드 수, 필드 이름 등과 같은 결과 세트(rs)의 구조적 정보를 가져옵니다. int columnCount = md.getColumnCount(); // 이 ResultSet 객체의 열 수를 반환합니다. List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();Map<String, Object> rowData = new HashMap<String, Object>();while (rs.next()) {rowData = new HashMap<String, Object>(columnCount);for (int i = 1; i <= columnCount; i++) {rowData.put(md.getColumnName(i), rs.getObject(i));}list.add(rowData);}return list;}/** * SQL 문을 쿼리합니다. * * @param sql * 실행된 sql 문 * @return List<Map<String,Object>> * @throws SQLException * @author Song Lijun* @date July 3, 2014 */public List<Map<String, Object >> 쿼리(String sql)에서 SQLException 발생 {List<Map<String, Object>> results = null;Connection conn = null;try {conn = getConnection();QueryRunner qr = new QueryRunner();results = qr.query(conn, sql, new MapListHandler());} finally {Close(conn);}결과 반환;}/** * 쿼리 SQL 기반 매개변수 명령문 * * @param sql * sql 명령문 * @param param * 매개변수 * @return List<Map<String,Object>> * @throws SQLException * @author Song Lijun* @date 2014년 7월 3일*/public List<Map<String, Object>> query(String sql, Object param)throws SQLException {List < Map<String, Object>> 결과 = null;Connection conn = null;try {conn = getConnection();QueryRunner qr = new QueryRunner();results = (List<Map<String, Object>>) qr.query(conn, sql, param,new MapListHandler());} catch (SQLException e) {e.printStackTrace();} finally {Close (conn);}return results;}/** * sql 문 실행* * @param sql * 실행된 sql 문* @return 영향을 받는 행* @throws 예외 * @author Song Lijun* @date 2014년 7월 3일*/public int Execution(String sql) throws Exception {Connection conn = getConnection();int 행 = 0;try {QueryRunner qr = new QueryRunner(); 행 = qr.update(conn, sql);} 마지막으로 {Close(conn);}return Rows;}/** * 매개변수가 포함된 SQL 문 실행* * @param sql * 실행된 SQL 문* @param params * 매개변수* @return 영향을 받은 행 반환* @throws 예외 * @ 작성자 Song Lijun* @date 2014년 7월 3일*/public int Execution(String sql, Object[] params) throws Exception {Connection conn = getConnection();int 행 = 0;try {QueryRunner qr = new QueryRunner();rows = qr.update(conn, sql, params);} 마지막으로 {Close(conn);} 행 반환;}/ ** * 연결 닫기 * * @param conn * @throws SQLException * @author Song Lijun * @date 2014년 7월 3일*/public void Close(Connection conn) throws SQLException {if (conn != null) {conn.close();}DbUtils.closeQuietly(conn);}/** * 연결 풀 시작* * @ 작성자 Song Lijun* @date 2014년 7월 3일*/private void StartPool() {try {Class.forName(dri);} catch (ClassNotFoundException e1) {e1.printStackTrace();}if (connectionPool != null) {ShutdownPool();}try {connectionPool = new GenericObjectPool(null);ConnectionFactory ConnectionFactory = new DriverManagerConnectionFactory(url, 사용자 이름, 비밀번호);PoolableConnectionFactory poolableConnectionFactory = 새로운 PoolableConnectionFactory(connectionFactory, ConnectionPool, null, "SELECT 1", false,true);Class.forName("org.apache.commons.dbcp.PoolingDriver");PoolingDriver 드라이버 = (PoolingDriver) DriverManager.getDriver("jdbc:apache: commons:dbcp:");driver.registerPool(풀이름, poolableConnectionFactory.getPool());} catch (Exception e) {e.printStackTrace();}//쿼리 프로그램 열기 queryThread = new QueryThread(this);queryThread.start();}/** * 연결 풀 닫기 * * @author Song Lijun* @date 2014년 7월 3일*/private void ShutdownPool() {try {PoolingDriver 드라이버 = (PoolingDriver) DriverManager.getDriver("jdbc:apache:commons:dbcp:");driver.closePool(poolName);//예약된 쿼리 닫기 queryThread.setStartQuery(false);} catch (SQLException e) {e.printStackTrace() ;}}/** * 연결하기* * @return * @author Song Lijun* @date 2014년 7월 3일*/공용 동기화 연결 getConnection() {연결 conn = null;try {if (connectionPool == null)StartPool();conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:"+ poolName) ;} catch (예외 e) {e.printStackTrace();}return conn;}}/** * 연결 풀이 시작되면 자동으로 데이터베이스에 정기적으로 쿼리하여 데이터베이스 연결 시간 초과를 방지합니다. * * @author Song Lijun* @date 2014년 7월 3일*/class QueryThread extends Thread {private DBUtil dbUtil = null;//쿼리 활성화 여부 private boolean startQuery = true;/** * 기능: 해당 데이터베이스 연결. * * @author Song Lijun* @date 2014년 7월 3일* @param dbUtil * 데이터베이스 연결*/public QueryThread(DBUtil dbUtil) {this.dbUtil = dbUtil;}public void run() {while (true) {try { if (startQuery) {this.dbUtil.query("select 1");}// System.out.println(startQuery+" 123");} catch (Exception e) {e.printStackTrace();} 마지막으로 {try {Thread.sleep(120000);} catch (InterruptedException e) {e.printStackTrace(); }}}}public void setStartQuery(boolean startQuery) {// System.out.println("startQuery 종료:"+startQuery);this.startQuery = startQuery;}}