代码:輸入java.io.FileInputStream。輸入java.io.FileNotFoundException。
インポートにjava.io.IOException; 輸入java.io.InputStreamを。 輸入てjava.io.PrintWriter; 輸入java.lang.reflect.InvocationHandler。 輸入java.lang.reflect.Methodオブジェクト。 輸入java.lang.reflect.Proxyの; インポートのjava.sql.Connection; インポートのjava.sql.DriverManager。 輸入ます。java.sql.SQLException; 輸入java.sql.SQLFeatureNotSupportedException。 輸入java.util.LinkedList; 輸入java.util.Properties; 輸入org.slf4j.Logger。 パブリック クラスConnPool { //データベース接続の格納された設定を使用してLinkedListの プライベート 静的のLinkedList <接続> = ConnPool 新しい新しい LinkedListの<接続> (); //は、コンフィギュレーション・ファイルの静的コードブロックロード 静的を{
//ここで報告したjarパッケージの実行があります場合は、この異常ファイル、次のように解決策があります。 パス文字列。= ConnPoolのクラス。.GetClassLoader()のgetResource( "db.properties" ).getPath(); //ソリューションは、このコード行はコメントする必要があります
= PropertiesUtil.class.getClassLoader.getResourceAsStream(「db.propertiesで// InputStreamを「); //は、上記の問題解決するためにこのコード行を開く
にFileInputStreamのを; //調整プログラムは、より多くの解決よりも開くのコード行をコメントアウトする必要が 試し{ 中 = 新しい新しいFileInputStreamを(パス);上記の解決策は、このコード行をコメント必要が開く// プロパティの小道具 =新しい新しいプロパティ(); prop.load(中); String型のドライバー = prop.getProperty( "ドライバー"); 文字列のURL = prop.getProperty( "URL"); ユーザーのString = prop.getProperty( "ユーザー"); 文字列のパスワード = prop.getProperty( "パスワード"); //は、接続のデータベース接続プールのサイズの数初期化 int型 INITSIZE = Integer.parseInt(prop.getProperty( "INITSIZEを") ); // ロードドライバ にClass.forName(ドライバ) 以下のための( int型0 =私は、私はINITSIZEを<;私は++ ){ 接続connが = したDriverManager.getConnection(URL、ユーザ、パスワード); // 作成したリストで、接続を追加 するSystem.out.printlnを(「最初を作成するには、データベース接続プールを初期化します」 +(I + 1)+ "接続、プールに追加" ); connPool.add(コネティカット); } } キャッチ(IOExceptionをE){ e.printStackTrace(); } キャッチ(ClassNotFoundExceptionがE){ e.printStackTrace( ); } キャッチ(のSQLException E){ e.printStackTrace(); } } / *データベース接続* / パブリック接続のgetConnection()がスローするSQLException { IF(connPool.size()> 0 ){ // コレクションからの接続を取得 決勝接続コン= connPool.removeFirstを(); // のプロキシ接続返す リターンを(接続)たとえば、Proxy.newProxyInstance(ConnPool。クラス .getClassLoader()、conn.getClass()でgetInterfaces()、新しい新規のInvocationHandlerの(){ 公共オブジェクト呼び出しは、([]引数オブジェクト、プロキシ、メソッド、メソッドオブジェクト) スローのThrowable { IFを( !「近いです」.equals(method.getName())){ 戻りMethod.invoke(コネチカット州、引数); } 他{ connPool.add(コネチカット州)を、 するSystem.out.printlnは(「現在の接続、接続プールを閉じ、接続を返します.. ....... " ); のSystem.out.println( "接続のプール番号が"+ connPool.size()); 戻り NULL ; } } }); } 他{ スロー 新しい新規のRuntimeException("ビジーデータベース............後でもう一度試してください" ); } } 公共のPrintWriter getLogWriterメソッド()がスローするSQLException { 戻り ヌル。 } 公共 ボイド setLogWriter(PrintWriterのうち)スローのSQLException { } 公共 ボイド setLoginTimeout(INT秒)スローするSQLException { } 公共 のint getLoginTimeout()をスローするSQLException { 戻り 0 ; } 公共ロガーgetParentLogger()スロー場合SQLFeatureNotSupportedException { リターン ヌル; } パブリックオブジェクトアンラップ(クラスのiface)がスローするSQLException { 戻り ヌル。 } パブリック ブール isWrapperFor(クラスのiface)スローのSQLExceptionは{ 返す 偽。 } パブリック接続のgetConnection(文字列名、文字列のパスワード)が スローするSQLException { 戻り ヌル。 } }
インポートのjava.sql.Connectionを、 インポートのjava.sql.ResultSet; インポートjava.sql.SQLExceptionという、 インポートjava.sql.Statementの、 パブリック クラスJdbcUtil { // データベース接続プール プライベート 静的 ConnPool ConnPool = 新しい新しいConnPool(); / ** *プールから接続を取得する * @return * @throws のSQLException * / パブリック 静的接続のgetConnection()スローのSQLException { 戻り、connPool.getConnectionを() } / ** *接続を閉じます * @Param コネティカット * @param ST * @paramのRS * @throws のSQLException * / パブリック 静的な 無効 CloseConnection(接続コネティカット、ステートメントST、のResultSet RS)スローするSQLException { // 閉じるResultSetオブジェクトストアのクエリ結果 IF(RS!= ヌル){ rs.Close(); } // 近いStatementオブジェクト IF!(ST = NULL ){ st.close(); } // 接続を閉じる IF =(コネチカットを!NULL ){ はconn.close(); } } }
db.properties
ドライバ= com.mysql.cj.jdbc.Driverの URL = JDBCます。mysql:// localhostを:?3306 /数据库名serverTimezone =アジア/上海&useUnicode =真&characterEncoding = UTF8 &useSslオプション= TRUE ユーザー=ルート パスワード=ルート INITSIZE = 15
次のように呼び出します。
JdbcUtil jdbcUtil = 新しいJdbcUtil();
文字列のSQLは= " SQL文を書く " ;
= nullの接続接続を;
文= NULLの文の; のResultSetたresultSet = nullを。
{トライ 接続 = jdbcUtil.getConnection(); ステートメント = Connection.createStatement(); たresultSet = Statement.executeQuery(SQL); 一方(ResultSet.next()){ 文字列ID = resultSet.getString( "ID" ); IF( !ID = ヌル){ //ビジネスロジックがここに書き込むことができます } } } キャッチ(例外E){ logger.error( "データ取得失敗" 、E); MSG。= createResultJson(1、 "データ取得失敗!" ); } 最後に{ 試み
{ jdbcUtil.CloseConnection(接続、ステートメント、たresultSet); //最後の近くに流れを覚えている、あるいは報告あまりにも多くの接続異常を作成します } キャッチ(のSQLException E){ // TODO自動生成されたブロックキャッチ e.printStackTrace(); } }