単純なJavaデータベース接続とクロージングツールクラス
JDBCアプリケーションを書いている人は、多くの場合、クロージングリソースについて頭痛を抱えています。これらのコードは退屈です。簡単なコードでそれらを閉じるにはどうすればよいですか?以下にあなたの痛みを和らげる方法を書きました:
/ ***すべての閉じたリソースを閉じる** @param objs閉じたリソースオブジェクトは接続、ステートメント、および結果セットであり、他のタイプのリソースは自動的に無視されます*/ public static closeall(object ... objs){for(object obj:objs){if(obj instancanceof connection)close(connection)obj); if(obj instanceofステートメント)close((statement)obj); if(obj instanceof resultSet)close((resultet)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をインポートします。 com.lavasoft.ibatistools.metadata.mysqldatasourcemetadata; java.io.ioexceptionをインポートします。 java.io.inputStreamをインポートします。 Java.sql。*をインポートします。 java.util.listをインポートします。 java.util.propertiesをインポートします。 / ** *単純なJavaデータベース接続とクロージングツールクラス * * @Author Leizhimin 11-12-20 4:32 PM */ public class dbtools {private static string driverclassName、url、user、password; static {init(); } private static void init(){inputstream in = dbtools.class.getResourceasStream( "/com/lavasoft/ibatistools/jdbc.properties");プロパティpreps = new Properties(); {preps.load(in); DriverClassName = preps.getProperty( "JDBC.Driver"); url = preps.getProperty( "jdbc.url"); user = preps.getProperty( "jdbc.username");パスワード= preps.getProperty( "jdbc.password"); } catch(ioexception e){e.printstacktrace(); }} / *** jdbc接続を作成** @return jdbc connection* / public static connection makeconnection(){connection conn = null; try {class.forname(driverclassname); conn = drivermanager.getConnection(url、user、password); } 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 closeall(object ... objs){for(object obj:objs){if(obj instancanceof connection)close(connection)obj); if(obj instanceofステートメント)close((statement)obj); if(obj instanceof resultSet)close((resultet)obj); }} public static void main(string [] args){datasourcemetadata dbmd = mysqldatasourcemetadata.instatnce();リスト<表> tablelist = dbmd.getalltablemetadata(dbtools.makeconnection()); for(テーブルテーブル:TableList){System.out.println(table); }}}
これはライティングツールであるため、接続は非常に数回使用されるため、JDBCモードはここで使用され、接続プールは使用されません。クロージング方法は非常に優れており、コードの量を減らし、プログラムの信頼性と品質を向上させます。
シンプルなJDBCユニバーサルツール
複数のデータベースをサポートし、統一された方法で接続を生成し、リソースを最適かつ最も簡単な方法でリリースします。
写真を撮ることへようこそ!
Import org.apache.commons.logging.log; Import org.apache.commons.logging.logfactory; Java.sql。*をインポートします。 java.util.listをインポートします。 java.util.propertiesをインポートします。 /***一般的なデータベース操作ツール。データベース接続の取得、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 makeNconnection(string url、プロパティプロパティ)sqlexception {接続conn = null; try {conn = drivermanager.getConnection(url、properties); } catch(sqlexception e){log.error( "データベース接続を取得するときに例外が発生しました"、e); eを投げる; } return conn; } / ***データベース接続で静的SQLステートメントクエリを実行** @param connデータベース接続* @param staticql static sqlステートメント文字列* @return return return query resunt set set resultet object* @throws sqlecception sqlecception splecception execting execting* / public static resultet executequery(conning conn、string staticsql)= null; try {// SQLステートメントSTMT = conn.CreatEStatement()を実行するオブジェクトを作成します。 // sqlを実行して戻り結果を取得rs = stmt.executequery(staticsql); } catch(sqlexception e){log.Error( "SQLステートメントを実行するときにエラーが発生しました。 eを投げる; } Rsを返します。 } / ***データベース接続で静的SQLステートメントを実行*** @param connデータベース接続* @param staticql static sqlステートメント文字列* @throws sqlexception例外を実行するとき* / public static void executesql(conning conn、string staticsql)throws sqlexception {statent stmt = null; try {// sql stmt = conn.createStatement()を実行するオブジェクトを作成します。 // sqlを実行して、結果を返してstmt.execute(staticsql)を返します。 } catch(sqlexception e){log.Error( "SQLステートメントを実行するときにエラーが発生しました。 eを投げる; }最後に{close(stmt); }} /***データベース接続で静的SQLステートメントのバッチを実行する** @param connデータベース接続* @param SQLLIST静的SQLステートメント文字列コレクション* @Throws Sqlexceptionは例外を実行するとき* /public void executebatchsql(connection conn、liest <string> sqllest thre sqlys sqlows {sqlyctions){sqlist {sqlist {sqlist {sqlist {squlting {sqlist { stmt = conn.createstatement(); for(string sql:sqllist){stmt.addbatch(sql); } // sqlを実行して、return result stmt.executebatch()を取得します。 } catch(sqlexception e){log.Error( "バッチSQLステートメントを実行するときにエラーが発生しました。チェックしてください!"); eを投げる; }} / *** Oracleデータを取得します。指定されたシーケンス次の値** @param connデータベース接続* @param seq_name sequence name* @return sequence Next値* / public static long sequencenextval(connection conn、string seq_name){long val = -1l;ステートメントstmt = null;結果rs = null; try {// sql stmt = conn.createStatement()を実行するオブジェクトを作成します。 // sqlを実行して戻り結果を取得rs = stmt.executequery( "select" + seq_name + ".nextval from dual"); if(rs.next())val = rs.getlong(1); } catch(sqlexception e){log.error( "#エラー#:シーケンス値を取得する際にエラーがありました。! /n" + seq_name); e.printstacktrace();新しいruntimeexception(e); }最後に{close(rs); close(stmt); } valを返します。 } / ***閉じたすべての閉じたJDBCリソースは、注文に関係なく常に正しい順序で実行できます** @param objs閉じたリソースオブジェクトは接続、ステートメント、および結果のリソースが自動的に無視されます* / public static closeall(object ... objs){for(object obj:obj:objs)if(obj instancefof obj); for(object obj:objs)if(obj instanceofステートメント)close((statement)obj); for(object obj:objs)if(obj instanceof connection)close((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)throws sqlexception {string tns = "jdbc:oracle:shin: @/n" + "(description =/n" + "(descride_list =/n" + " + "/t/t(address =(protocol = tcp)(host=10.87.30.44)(port=1521)/" + "/t/t/t(protocol = tcp)(host = 10.87.30.45)(PORT=1521)/n" + "/t/t(address =(protocol = tcp)(host=10.87.30.46)(port=1521)/" + "/t/t(load_balance = yes)/n" + "/t)/n"/n " +"/t(connect_data =/n " +"/t/t(service_name = kfcs/t/n ") =/n " +"/t/t/t(type = session)/n " +"/t/t/t(method = basic)/n " +"/t/t/t(retiries = 5)/n " +"/t/t/t(delay = 15)/n " +"/t/t)/n " +"/t)/n "プロパティp_ora = new Properties(); p_ora.put( "user"、 "base"); p_ora.put( "password"、 "1qaz!qaz"); p_ora.put( "internal_logon"、 "rearn");接続ora_conn = makeconnection(tns、p_ora); resultet rs1 = ora_conn.createStatement()。executeQuery( "base.cfg_static_data"からcount(1)を選択(1)); rs1.next(); System.out.println(rs1.getint(1)); rs1.close(); ora_conn.close();プロパティp_mysql = new Properties(); p_mysql.put( "user"、 "root"); p_mysql.put( "password"、 "leizm"); string url = "jdbc:mysql:// localhost:3306/tdmc";接続mysql_conn = makeconnection(url、p_mysql); resultet rs2 = mysql_conn.createStatement()。executequery( "CFG_CODE"からcount(1)を選択 "); rs2.next(); System.out.println(rs2.getint(1)); rs2.close(); mysql_conn.close(); }}