اتصال قاعدة بيانات Java البسيط والفئة الأدوات الختامية
الأشخاص الذين يكتبون تطبيقات JDBC غالباً ما يكون لديهم صداع حول إغلاق الموارد. هذه الرموز مملة. كيف يمكنك إغلاقها برمز بسيط؟ أدناه كتبت طريقة لتخفيف ألمك:
/ *** أغلق جميع الموارد المغلقة** param objs كائنات الموارد المغلقة هي الاتصال والبيان و resultset ، ويتم تجاهل أنواع الموارد الأخرى تلقائيًا*/ public static void closeall (object ... objs) {for (object obj: objs) {if (connection existract). إذا (بيان مثيل OBJ) يغلق ((بيان) OBJ) ؛ إذا (OBJ مثيل reditset) إغلاق ((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 ؛ استيراد 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 ؛ ثابت {init () ؛ } private static void init () {inputStream in = dbtools.class.getResourCeasStream ("/com/lavasoft/ibatistools/jdbc.properties") ؛ الخصائص الإعدادية = خصائص جديدة () ؛ حاول {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 Connection* / public static connection makeConnection () {connection conn = null ؛ حاول {class.forname (driverClassName) ؛ conn = drivermanager.getConnection (url ، المستخدم ، كلمة المرور) ؛ } catch (classNotFoundException e) {E.PrintStackTrace () ؛ } catch (sqlexception e) {E.PrintStackTrace () ؛ } return conn ؛ } إغلاق الفراغ الثابت العام (اتصال conn) {if (conn! = null) حاول {conn.close () ؛ } catch (sqlexception e) {E.PrintStackTrace () ؛ }} إغلاق الفراغ الثابت العام (resultset rs) {if (rs! = null) حاول {rs.close () ؛ } catch (sqlexception e) {E.PrintStackTrace () ؛ }} إغلاق الفراغ الثابت العام (بيان STMT) {if (stmt! = null) حاول {stmt.close () ؛ } catch (sqlexception e) {E.PrintStackTrace () ؛ }} / *** أغلق جميع الموارد المغلقة** param objs هي كائنات المورد المغلقة هي الاتصال والبيان ، ونتائجها ، ويتم تجاهل الأنواع الأخرى من الموارد تلقائيًا* / public static void closeall (object ... objs) {for (object obj: objs) {if (obj extaleof connection) close (connection) obj) ؛ إذا (بيان مثيل OBJ) يغلق ((بيان) OBJ) ؛ إذا (OBJ مثيل reditset) إغلاق ((resultset) OBJ) ؛ }} public static void main (string [] args) {datasourcemetadata dbmd = mysqldatasourcemetadata.instatnce () ؛ قائمة <CHALOD> tablelist = dbmd.getAllTableMetadata (dbtools.makeConnection ()) ؛ لـ (جدول الجدول: tablelist) {system.out.println (table) ؛ }}}
نظرًا لأنها أداة للكتابة ، يتم استخدام الاتصال عدة مرات ، وبالتالي يتم استخدام وضع JDBC هنا ، ولا يتم استخدام تجمع الاتصال. طريقة الإغلاق جيدة جدًا للاستخدام ، وتقليل كمية الكود وتحسين موثوقية وجودة البرنامج.
أداة Universal بسيطة JDBC
يدعم قواعد البيانات المتعددة ، وينشئ الاتصالات بطريقة موحدة ، ويصدر الموارد بطريقة مثالية وأبسط.
مرحبًا بك في التقاط الصور!
استيراد org.apache.commons.logging.log ؛ استيراد 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) ؛ ثابت {try {class.forname ("oracle.jdbc.driver.oracledriver") ؛ class.forname ("com.mysql.jdbc.driver") ؛ } catch (classnotfoundException e) {log.error ("حدث خطأ في تحميل برنامج تشغيل قاعدة البيانات!") ؛ E.PrintStackTrace () ؛ }} /** * قم بإنشاء اتصال قاعدة بيانات * * param url connection url ulr string * param properties قائمة أي أزواج علامة /قيمة لعلامات الاتصال ؛ عادةً ما يتم تضمين خصائص "مستخدم" و "كلمة مرور" على الأقل * Return A JDBC Database Connection * Throws Sqlexception عندما يفشل الاتصال */ الاتصال الثابت العام يجعل (url url ، خصائص الخصائص) يرمي sqlexception {connection conn = null ؛ حاول {conn = drivermanager.getConnection (url ، الخصائص) ؛ } catch (sqlexception e) {log.error ("حدث استثناء عند الحصول على اتصال قاعدة البيانات" ، e) ؛ رمي ه ؛ } return conn ؛ } / *** قم بتنفيذ استعلام SQL Static SQL على اتصال قاعدة بيانات** param conn connection* @param staticsql static sql string* @return return query set strupe set absoce* athrows sqlexception at stispection ats stispition* / public static resultse executequery (connection connectql) حاول {// إنشاء كائن ينفذ عبارة SQL STMT = CONN.CREATESTATEMENT () ؛ // تنفيذ SQL واحصل على نتيجة الإرجاع rs = stmt.executequery (staticsql) ؛ } catch (sqlexception e) {log.error ("حدث خطأ عند تنفيذ عبارة SQL ، يرجى التحقق! /n" + staticsql) ؛ رمي ه ؛ } إرجاع روبية ؛ } / *** قم بتنفيذ عبارة SQL ثابتة على اتصال قاعدة البيانات** param conn connection* param staticsql static sql string string* throws sqlexpection عند تنفيذ الاستثناء* / public static void executesql (connection conn ، string statecl) sqlexception حاول {// إنشاء كائن ينفذ sql stmt = conn.createstatement () ؛ // تنفيذ SQL واحصل على النتيجة التي تم إرجاعها stmt.execute (staticsql) ؛ } catch (sqlexception e) {log.error ("حدث خطأ عند تنفيذ عبارات SQL ، يرجى التحقق! /n" + staticsql) ؛ رمي ه ؛ } أخيرًا {close (stmt) ؛ } ستر stmt = conn.createstatement () ؛ لـ (String sql: sqllist) {stmt.addbatch (sql) ؛ } // تنفيذ SQL واحصل على نتيجة الإرجاع stmt.executeBatch () ؛ } catch (sqlexception e) {log.error ("حدث خطأ عند تنفيذ عبارة SQL دفعة ، يرجى التحقق!") ؛ رمي ه ؛ }} / *** احصل على بيانات Oracle تسلسل محدد القيمة التالية** param conn contabase connection* @param seq_name name* @return sequence value* / public static long sequencextval (connection conn ، string seq_name) {long val = -1l ؛ بيان stmt = فارغة ؛ resultset rs = null ؛ حاول {// إنشاء كائن ينفذ sql stmt = conn.createstatement () ؛ . if (rs.next ()) val = rs.getlong (1) ؛ } catch (sqlexception e) {log.error ("#error#: كان هناك خطأ في الحصول على قيمة التسلسل ، يرجى التحقق! /n" + seq_name) ؛ E.PrintStackTrace () ؛ رمي new RunTimeException (e) ؛ } أخيرًا {close (rs) ؛ إغلاق (STMT) ؛ } إرجاع فال ؛ } / *** أغلق جميع موارد JDBC المغلقة ، بغض النظر عن الطلب ، يمكن دائمًا تنفيذها بالترتيب الصحيح** param objs كائنات الموارد المغلقة هي الاتصال والبيان ، ونتائجها ، ويتم تجاهل أنواع الموارد الأخرى تلقائيًا* / public static void (object ... objs) for (Object OBJ: OBJ) إذا كان OBJ extrealof). لـ (Object OBJ: OBJs) إذا (OBJ extryof state) يغلق ((بيان) OBJ) ؛ لـ (Object OBJ: OBJs) إذا (OBJ extryof connection) يغلق ((اتصال) OBJ) ؛ } إغلاق الفراغ الثابت الخاص (اتصال conn) {if (conn! = null) حاول {conn.close () ؛ } catch (sqlexception e) {log.error ("حدث استثناء عند إغلاق اتصال قاعدة البيانات!") ؛ }} إغلاق الفراغ الثابت الخاص (resultset rs) {if (rs! = null) حاول {rs.close () ؛ } catch (sqlexception e) {log.error ("حدث استثناء عند إغلاق مجموعة النتائج!") ؛ }} إغلاق باطل ثابت خاص (بيان stmt) {if (stmt! = null) حاول {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 (thead_list =/n " + "/t/T/(address=(protocol=tcp)(host=10.87.30.44)) (port=1521))/n" + "/t/(address=(protocol=tcp)(host=10.87.30.45)(Ort=1521)))))))))))INYEMENT "/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 =/n " +"/t/t/t (type = session)/n " +"/t/t (method = basic)/n " +"/t/t (Retries = 5)/n " +"/t/t (delay = 15)/n " +"/t)/n "/t)/n)/n" + t)/n " +") " الخصائص p_ora = خصائص جديدة () ؛ p_ora.put ("user" ، "base") ؛ p_ora.put ("كلمة المرور" ، "1qaz! qaz") ؛ p_ora.put ("internal_logon" ، "normal") ؛ اتصال ora_conn = makeConnection (tns ، p_ora) ؛ resultset rs1 = ora_conn.createstatement (). executequery ("حدد العد (1) من base.cfg_static_data") ؛ rs1.next () ؛ System.out.println (rs1.getint (1)) ؛ rs1.close () ؛ ora_conn.close () ؛ الخصائص p_mysql = خصائص جديدة () ؛ p_mysql.put ("user" ، "root") ؛ p_mysql.put ("كلمة المرور" ، "Leizm") ؛ url url = "jdbc: mysql: // localhost: 3306/tdmc" ؛ اتصال mysql_conn = makeConnection (url ، p_mysql) ؛ resultset rs2 = mysql_conn.createstatement (). executequery ("حدد العد (1) من cfg_code") ؛ rs2.next () ؛ System.out.println (rs2.getint (1)) ؛ rs2.close () ؛ mysql_conn.close () ؛ }}