간단한 Java 데이터베이스 연결 및 폐쇄 도구 클래스
JDBC 응용 프로그램을 작성하는 사람들은 종종 자원 폐쇄에 대한 두통이 있습니다. 이 코드는 지루합니다. 간단한 코드로 어떻게 닫을 수 있습니까? 아래에서 나는 당신의 고통을 완화하는 방법을 작성했습니다.
/ *** 모든 폐쇄 리소스 닫기** @param objs 폐쇄 자원 객체는 연결, 명령문 및 결과 세트이며 다른 유형의 리소스는 자동으로 무시됩니다*/ public static void closeall (object ... objs) {for (object obj : objs) {if (obj instancef) connect (connection) obj); if (obj instanceof 문) close ((Statement) obj); if (obj instanceof resultset) close ((resultset) obj); }} 이 메소드에는 "..."매개 변수가 있으며 실제로 Java 5의 변수 매개 변수 메소드입니다. 순서 또는 번호에 관계없이 호출 할 때 닫으려고하려는 리소스 개체를 직접 닫을 수 있습니다. 예를 들어:
catch (sqlexception e) {e.printstacktrace (); } 마침내 {dbtools.closeall (stmt, pstmt1, pstmt2, conn); }
이 수업의 완전한 글쓰기 방법은 다음과 같습니다.
패키지 com.lavasoft.ibatistools.common; com.lavasoft.ibatistools.bean.table 가져 오기; com.lavasoft.ibatistools.metadata.datasourcemetadata import; com.lavasoft.ibatistools.metadata.mysqldatasourcemetadata import; import java.io.ioexception; import java.io.inputstream; Java.sql.*; Java.util.list 가져 오기; java.util.properties import; / ** * 간단한 Java 데이터베이스 연결 및 폐쇄 도구 클래스 * * @Author Leizhimin 11-12-20 4:32 PM */ public class dbtools {private static string driver className, URL, 사용자, 비밀번호; 정적 {init (); } private static void init () {inputStream in = dbtools.class.getResourceasStream ( "/com/lavasoft/ibatistools/jdbc.properties"); 속성 preps = 새로운 속성 (); try {preps.load (in); DriverClassName = preps.getProperty ( "jdbc.driver"); url = preps.getProperty ( "jdbc.url"); user = preps.getProperty ( "jdbc.username"); password = preps.getProperty ( "jdbc.password"); } catch (ioexception e) {e.printstacktrace (); }} / *** JDBC 연결을 만듭니다** @return A JDBC 연결* / public static connection MakeConnection () {Connection Conn = null; try {class.forname (DriverClassName); conn = drivermanager.getConnection (URL, 사용자, 암호); } catch (classNotFoundException e) {e.printstacktrace (); } catch (sqlexception e) {e.printstacktrace (); } return conn; } public static void close (Connection Conn) {if (conn! = null) try {conn.close (); } catch (sqlexception e) {e.printstacktrace (); }} public static void close (resultSet rs) {if (rs! = null) try {rs.close (); } catch (sqlexception e) {e.printstacktrace (); }} public static void close (Statement stmt) {if (stmt! = null) try {stmt.close (); } catch (sqlexception e) {e.printstacktrace (); }} / *** 모든 폐쇄 자원을 닫습니다** @param objs 폐쇄 자원 객체는 연결, 명령문 및 결과 세트이며 다른 유형의 리소스가 자동으로 무시됩니다* / public static void closeall (object ... objs) {for (object obj : objs) {if (obj instanceof connection) close ((연결) obj); if (obj instanceof 문) close ((Statement) obj); if (obj instanceof resultset) close ((resultset) obj); }} public static void main (String [] args) {dataSourcemetAdata dbmd = mysqldatasourcemetadata.instatnce (); 목록 <pable> tableList = dbmd.getAllTableMeTadata (dbtools.makeConnection ()); for (표 : tableList) {System.out.println (표); }}}
쓰기 도구이기 때문에 연결은 거의 몇 번 사용되므로 JDBC 모드가 여기에 사용되며 연결 풀이 사용되지 않습니다. 마감 방법은 사용하기가 매우 좋으며 코드의 양을 줄이고 프로그램의 안정성과 품질을 향상시킵니다.
간단한 JDBC 범용 도구
여러 데이터베이스를 지원하고 통합 방식으로 연결을 생성하며 최적의 가장 간단한 방식으로 리소스를 출시합니다.
사진을 찍는 데 오신 것을 환영합니다!
import org.apache.commons.logging.log; import org.apache.commons.logging.logfactory; Java.sql.*; Java.util.list 가져 오기; java.util.properties import; /*** 데이터베이스 연결 획득, SQL 실행, 리소스 마감 및 기타 기능 제공 일반 데이터베이스 작동 도구. 지원되는 데이터베이스는 Oracle10G 및 MySQL5.x입니다. </ p> * * @author leizhimin 2012-03-05 11:22 */ public class dbtoolkit {private static log = logfactory.getLog (dbtoolkit.class); static {try {class.forname ( "oracle.jdbc.driver.oracledriver"); class.forname ( "com.mysql.jdbc.driver"); } catch (classNotFoundException e) {log.error ( "데이터베이스 드라이버를로드하는 오류가 발생했습니다!"); e.printstacktrace (); }} /** * 데이터베이스 연결 생성 * * @Param URL 데이터베이스 연결 URL 문자열 * @param 속성 연결 매개 변수에 대한 문자열 태그 /값 쌍의 목록; 일반적으로 최소한 "사용자"및 "비밀번호"속성이 포함되어야합니다 * @return JDBC 데이터베이스 연결 * @Throws 연결이 실패 할 때 SQLEXCeption이 발생합니다 */ public static connection (문자열 URL, 속성 속성)은 sqlexception {connection conn = null; try {conn = drivermanager.getConnection (url, properties); } catch (sqlexception e) {log.error ( "데이터베이스 연결을 얻을 때 예외가 발생했습니다", e); e 던지기; } return conn; } / *** 데이터베이스 연결에서 정적 SQL 문 쿼리를 실행하십시오* @param conn 데이터베이스 연결* @param stanticsql static sql string* @return return return query results set set set set set 객체* @throws sqlexception은* / public static executequery (connection staticsql) sqlemet rs = null; try {// sql 문을 실행하는 객체를 만듭니다. stmt = conn.createstatement (); // SQL을 실행하고 반환 결과를 얻습니다. RS = stmt.executeQuery (STATICSQL); } catch (sqlexception e) {log.error ( "SQL 문을 실행할 때 오류가 발생했습니다! /n" + staticsql); e 던지기; } rs; } / *** 데이터베이스 연결에서 정적 SQL 문을 실행하십시오* @param conn 데이터베이스 연결* @param stanticsql static sql string* @throws sqlexception exception* / public static void executesQl (Connection Conn, String stanticsql) sqlexcection {stret stmt = null; try {// sql stmt = conn.createstatement ()를 실행하는 객체를 만듭니다. // SQL을 실행하고 결과를 가져옵니다. } catch (sqlexception e) {log.error ( "SQL 문을 실행할 때 오류가 발생했습니다! /n" + staticsql); e 던지기; } 마침내 {Close (stmt); }} /*** 데이터베이스 연결** @param conn 데이터베이스 연결* @param sqllist static sql string collection* @throws sqlexception exception* /public static void executebatchsql (connection conn, list <string> sqllist) strows strows {// static state {// static a an stect and a an object {// stmt = conn.createstatement (); for (string sql : sqllist) {stmt.addbatch (sql); } // SQL을 실행하고 반환 결과를 얻습니다. stmt.executebatch (); } catch (sqlexception e) {log.error ( "배치 SQL 문을 실행할 때 오류가 발생했습니다. 확인하십시오!"); e 던지기; }} / *** 지정된 시퀀스 다음 값* @param conn database connection* @param seq_name 시퀀스 이름* @return 시퀀스 다음 값* / public static long sequencextval (connection conn, string seq_name) {long val = -1l; 문자 stmt = null; resultSet rs = null; try {// sql stmt = conn.createstatement ()를 실행하는 객체를 만듭니다. // SQL을 실행하고 반환 결과를 얻습니다. RS = stmt.executeQuery ( "" + seq_name + ".nextVal에서 듀얼에서"); if (rs.next ()) val = rs.getLong (1); } catch (sqlexception e) {log.error ( "#error#: 시퀀스 값을 얻는 데 오류가 있었는데! /n" + seq_name을 확인하십시오); e.printstacktrace (); 새로운 runtimeexception (e)을 던지십시오. } 마침내 {Close (rs); 닫기 (STMT); } return val; } / *** 순서에 관계없이 모든 폐쇄 된 JDBC 리소스를 닫으십시오.* @param objs 폐쇄 자원 객체는 연결, 명령문 및 결과 세트이며 다른 유형의 리소스는 자동으로 무시됩니다* / public static void closeall (object ... objs) {(object objs) {obj : instancef results). for (object obj : objs) if (obj instanceof 문) close ((Statement) obj); for (object obj : objs) if (obj instancef Connection) Clos ((Connection) obj); } private static void close (Connection Conn) {if (conn! = null) try {conn.close (); } catch (sqlexception e) {log.error ( "데이터베이스 연결을 닫을 때 예외가 발생했습니다!"); }} private static void close (resultSet rs) {if (rs! = null) try {rs.close (); } catch (sqlexception e) {log.error ( "결과 세트를 닫을 때 예외가 발생했습니다!"); }} private static void close (Statement stmt) {if (stmt! = null) try {stmt.close (); } catch (sqlexception e) {log.error ( "SQL 문을 닫을 때 예외가 발생했습니다!"); }}/** * 테스트 코드, 쓸모없는 * * @param args * @throws sqlexception */public static void main (string [] args)은 sqlexception {string tns = "jdbc : oracle : thin : @/n" + "(description =/n" + "/t (address_list =/n" + ? "/t/t(Address=(Protocol=Tcp)(host=10.87.30.46)(Port=1521)/N" + "/t/t (load_balance = yes)/n" + "/t)/n" + "/t (connect_data =/n" + "/t/t (service_name = kfcs)/n" + "/t/t/t (service_name = kfcs). =/n " +"/t/t/t (type = session)/n " +"/t/t/t (method = basic)/n " +"/t/t/t (retries = 5)/n " +"/t/t/t (Delain = 15)/n " +"/t)/n " +"/t)/n " +"/n " +"; 속성 p_ora = 새로운 속성 (); p_ora.put ( "사용자", "base"); p_ora.put ( "password", "1qaz! qaz"); p_ora.put ( "interner_logon", "normal"); 연결 ORA_CONN = MAKECONNECTION (TNS, P_ORA); resultSet rs1 = ora_conn.createstatement (). executeQuery ( "base.cfg_static_data에서 count (1)를 선택한 count (1)); rs1.next (); System.out.println (rs1.getint (1)); rs1.close (); ora_conn.close (); 속성 p_mysql = 새로운 속성 (); p_mysql.put ( "사용자", "루트"); p_mysql.put ( "password", "leizm"); 문자열 URL = "jdbc : mysql : // localhost : 3306/tdmc"; 연결 mysql_conn = makeconnection (url, p_mysql); resultSet rs2 = mysql_conn.createstatement (). executeQuery ( "cfg_code에서 count (1)); rs2.next (); System.out.println (rs2.getint (1)); rs2.close (); mysql_conn.close (); }}