في التطوير ، غالبًا ما نستخدم تجمعات اتصال قاعدة البيانات ، مثل تجمعات اتصال قاعدة بيانات DBCP. سيشرح هذا الفصل الاستخدام البسيط لمجمعات اتصال مكتبة قاعدة بيانات DBCP Connection DBCP.
أدوات التطوير myeclipse2014
1. أولاً إنشاء مشروع ويب. قمت بتسمية اسم المشروع testjdbc. أحتاج إلى ملف تكوين مع web.xml لتكوين servlet. بعد الانتهاء من الإنشاء ، يكون هيكل المشروع كما يلي:
2. إنشاء حزمة. اسم الحزمة الذي أنشأته هو com.szkingdom.db
3. قم بإنشاء Cassutil فئة المساعدة ، الرمز كما يلي:
حزمة com.szkingdom.db ؛ /*** تم إنشاؤه بواسطة Jack في 2015/12/26. * فئة أداة عملية التحويل*/ الفئة العامة CASTUTIL {/** تحويل إلى نوع السلسلة**/ السلسلة الثابتة العامة CASTSTRING (Object OBJ) {return castutil.caststring (obj ، "") ؛ } / * * تحويل إلى نوع السلسلة (توفير القيمة الافتراضية) * * / السلسلة الثابتة العامة castString (Object OBJ ، String defaultValue) {return obj! = null؟ string.valueof (OBJ): DefaultValue ؛ } / * * تحويل إلى نوع مزدوج * * / public static double castDouble (object obj) {return castDouble (obj ، (double) 0) ؛ } / * * تحويل إلى نوع مزدوج (بشرط القيمة الافتراضية) * * / public static double castDouble (Object OBJ ، defaultValue) {doublevalue = defaultValue ؛ if (obj! = null) {String strvalue = castString (obj) ؛ if (stringutil.isnotempty (strvalue)) {try {doublevalue = double.parsedouble (strvalue) ؛ } catch (numberFormatexception e) {defaultValue = defaultValue ؛ }}} إرجاع doublevalue ؛ } / * * تحويل إلى نوع طويل * * / public static long castlong (object obj) {return castlong (obj ، 0) ؛ } / * * تحويل إلى نوع طويل (شريطة القيمة الافتراضية) * * / public static castlong (Object OBJ ، defaultValue طويل) {longvalue = defaultValue ؛ if (obj! = null) {String strvalue = castString (obj) ؛ if (stringUtil.isnotempty (strvalue)) {try {longvalue = long.parselong (strvalue) ؛ } catch (numberFormatexception e) {longvalue = defaultValue ؛ }} إرجاع longvalue ؛ } / * * تحويل إلى int type * * / public int int castint (object obj) {return castint (obj ، 0) ؛ } / * * تحويل إلى نوع int (توفير القيمة الافتراضية) * * / public int castint (Object OBJ ، int defaultValue) {int intvalue = defaultValue ؛ if (obj! = null) {String strvalue = castString (obj) ؛ if (stringUtil.isnotempty (strvalue)) {try {intvalue = integer.parseint (strvalue) ؛ } catch (numberFormatexception e) {intvalue = defaultValue ؛ }}} إرجاع intvalue ؛ } / * * تحويل إلى نوع Boolean * * / public static boolean castboolean (object obj) {return castboolean (obj ، false) ؛ } / * * تحويل إلى نوع منطقي (يوفر القيمة الافتراضية) * * / public static boolean castboolean (Object OBJ ، Boolean DefaultValue) {boolean booleanvalue = defaultValue ؛ if (obj! = null) {booleanvalue = boolean.parseboolean (castString (obj)) ؛ } إرجاع booleanvalue ؛ }} 4. إنشاء ملف خاصية لقراءة PropsUtil ، الرمز كما يلي:
حزمة com.szkingdom.db ؛ استيراد java.io.filenotfoundException ؛ استيراد java.io.ioException ؛ استيراد java.io.inputstream ؛ استيراد java.util.properties ؛ /*** تم إنشاؤه بواسطة Jack في 2015/12/26. * Properties File Tool Class*/Public Class Propsutil {// private static final logger = loggerfactory.getLogger (propsutil.class) ؛ / * * تحميل ملف خاصية * * */ خصائص ثابتة عامة LoadProps (اسم ملف السلسلة) {خصائص الخصائص = null ؛ inputStream inputStream = null ؛ حاول {inputStream = thread.currentThRead (). getContextClassLoader (). if (inputStream == null) {رمي fileNotFoundException جديد (اسم الملف + "لم يتم العثور على ملف!") ؛ } الخصائص = خصائص جديدة () ؛ properties.load (inputStream) ؛ } catch (ioException e) {//logger.error (Reflist Properties failure "، e) ؛ system.out.println ("تحميل خصائص فشل ملف:"+e) ؛ } أخيرًا {if (inputStream! = null) {try {inputStream.close () ؛ } catch (ioException e) {//logger.error (Report failure exclose failure "، e) ؛ System.out.println ("إغلاق فشل دفق الإدخال:"+e) ؛ }} عودة خصائص ؛ } / * * الحصول على سمات الأحرف (الافتراضي هو سلسلة فارغة) * * * / / السلسلة الثابتة العامة getTring (خصائص الدعائم ، مفتاح السلسلة) {return getString (الدعائم ، المفتاح ، "") ؛ } / * * الحصول على سمات نوع الأحرف (يمكن تحديد القيمة الافتراضية) * * / getTring سلسلة ثابتة عامة (خصائص الدعائم ، مفتاح السلسلة ، السلسلة الافتراضية) {string value = defaultValue ؛ if (props.containskey (key)) {value = props.getProperty (key) ؛ } قيمة الإرجاع ؛ } / * * احصل على سمات النوع العددي (الافتراضي هو 0) * * / public int getint (خصائص الدعائم ، مفتاح السلسلة) {return getint (الدعائم ، المفتاح ، 0) ؛ } / * * احصل على سمة النوع العددي (يمكن تحديد القيمة الافتراضية) * * / public static int getint (خصائص الدعائم ، مفتاح السلسلة ، int defaultValue) {int value = defaultValue ؛ if (props.containskey (key)) {value = castutil.castint (props.getProperty (key)) ؛ } قيمة الإرجاع ؛ } / * * احصل على خاصية Boolean (القيمة الافتراضية خاطئة) * * / / public static boolean getBoolean (خصائص الدعائم ، مفتاح السلسلة) {return getBoolean (الدعائم ، المفتاح ، خطأ) ؛ } / * * الحصول على خاصية Boolean (يمكن تحديد القيمة الافتراضية) * * / / / public static boolean getBoolean (خصائص الدعائم ، مفتاح السلسلة ، الافتراضي المنطقي) {boolean value = defaultValue ؛ if (props.containskey (key)) {value = castutil.castboolean (props.getProperty (key)) ؛ } قيمة الإرجاع ؛ }} 5. قم بإنشاء سلسلة تعليمات سلسلة ، الرمز كما يلي:
حزمة com.szkingdom.db ؛ /*** تم إنشاؤه بواسطة Jack في 2015/12/26. * فئة أداة السلسلة */ الفئة العامة StringUtil {/ * * تحديد ما إذا كانت السلسلة فارغة * */ public static boolean isempty (String str) {if (str! = null) {str.trim () ؛ } // return stringUtils.isempty (str) ؛ إرجاع "" .equals (str) ؛ } / * * تحديد ما إذا كانت السلسلة ليست فارغة * * / / static boolean isnotempty (String str) {return! isempty (str) ؛ }} 6. إنشاء ملف خاصية اتصال قاعدة بيانات dbconfig.properties في دليل SRC
<span style = "color:#333333 ؛"> jdbc.driver = com.mysql.jdbc.driver jdbc.url = jdbc: mysql: // </span> <span style = "color:#ff6666 ؛ background-color: rgb (255 ، 0 ، 0) ؛ style = "color:#333333 ؛"> jdbc.username = **** jdbc.password = **** </span>
7. ضع حزم الجرة اللازمة في دليل LIB:
8. قم بإنشاء فئة مساعدة قاعدة بيانات باستخدام DBCP
حزمة com.szkingdom.db ؛ استيراد java.io.bytearrayinputstream ؛ استيراد java.sql.connection ؛ استيراد java.sql.drivermanager ؛ استيراد java.sql.preparedStatement ؛ استيراد java.sql.resultset ؛ استيراد java.sql.sqlexception ؛ استيراد java.util.properties ؛ استيراد org.apache.commons.dbcp2.basicDataSource ؛ /*** تم إنشاؤه بواسطة Jack في 2015/12/26. قاعدة بيانات تشغيل الفئة*/ الفئة العامة databasehelper {// private static logger logger = // loggerfactory.getLogger (databasehelper.class) ؛ سائق سلسلة نهائي ثابت خاص ؛ عنوان url الخاص بالسلسلة النهائية الثابتة ؛ اسم المستخدم الأساسي الخاص بالسلسلة النهائية ؛ كلمة مرور السلسلة النهائية الثابتة ؛ . // Thread Pool Private Static Final BasicDataSource data_source ؛ static {connection_holder = new threadlocal <connection> () ؛ الخصائص conf = propsutil.loadprops ("dbConfig.properties") ؛ driver = conf.getProperty ("jdbc.driver") ؛ url = conf.getProperty ("jdbc.url") ؛ اسم المستخدم = conf.getProperty ("jdbc.userName") ؛ كلمة المرور = conf.getProperty ("jdbc.password") ؛ سائق السلسلة = conf.getProperty ("jdbc.driver") ؛ url url = conf.getProperty ("jdbc.url") ؛ سلسلة username = conf.getProperty ("jdbc.userName") ؛ String passwrod = conf.getProperty ("jdbc.password") ؛ data_source = new BasicDataSource () ؛ data_source.setDriverClassName (برنامج التشغيل) ؛ data_source.seturl (url) ؛ data_source.setusername (اسم المستخدم) ؛ data_source.setPassword (passwrod) ؛ // تكوين معلمة اتصال توصيل قاعدة البيانات: http://www.cnblogs.com/xdp-gacl/p/4002804.html //http://greemranqq.itey.com/blog/1969273 //http://blog.csdn.net/j903829182/article/details/50190337 //http://blog.csdn.net/jiutianhe/article/details/39670817 //http://bbrog/blog/blog/blog/blog/blog/blog/blog/blog/blog/blog/blog/blog/blog/blog/blog/blog/blog/blog/blog/bblog/bblog/bblog/bblog/bblog/bblog/bblog/bblog/bblog //http://blog.csdn.net/kerafan/article/details/50382998 //http://blog.csdn.net/A9529LTY/Article/Details/43021801 // set العدد القصوى من Idle و Time time. data_source.setMaxTotal (60) ؛ // قم بتعيين الحجم الأولي data_source.setInitialSize (10) ؛ // الحد الأدنى لاتصال الخمول data_source.setMinidle (8) ؛ // الحد الأقصى لاتصال الخمول data_source.setMaxidle (16) ؛ // timeout انتظار الوقت milliseconds data_source.setMaxWaitMillis (2*10000) ؛ // فقط الاتصال الحالي غير صالح ، قم بإنشاء اتصال آخر للاستعلام الحالي لاستخدام data_source.settestonborrow (صحيح) ؛ . // removaBandoned: بعد وقت removeAbandonedTimeout يتجاوز وقت removeAndonedTimeout ، سواء أكان يتم إعادة تدوير الاتصالات غير المستخدمة (الغياب) (الافتراضي الخاطئة ، تعديلها إلى صواب) //data_source.setRemovaBandonedonmainmainenmainendentantaction) ؛ data_source.setRemoVeaBandonedOnBorrow (صواب) ؛ // testwhileIdle data_source.settestonreturn (true) ؛ // testOnreturn data_source.settestonreturn (true) ؛ // setRemoVeaBandOnedOnMain Data_source.setRemovaBandonedonMain (True) ؛ // سجل data_source.setlogabandoned (صحيح) ؛ // setaddress التقديم التلقائي data_source.setDefaultAutocommit (true) ؛ // data_source.setenableautocommitonreturn (true) ؛ System.out.println ("أكمل إعداد المعلمة من مجموعة اتصال قاعدة البيانات data_source !!") ؛ /*حاول {class.forname (driver) ؛ System.out.println ("LOAD JDBC DRAVE SCANCED") ؛ } catch (classnotfoundException e) {// logger.error ("لا يمكن تحميل برنامج تشغيل JDBC" ، e) ؛ System.out.println ("لا يمكن تحميل برنامج تشغيل JDBC:" + E) ؛ } أخيرًا {}*/} // private static final threadlocal <connection> connection_holder = new threadlocal <Connection> () ؛ /*** احصل على اتصال قاعدة البيانات*/اتصال ثابت عام getConnection () {connection conn = connection_holder.get () ؛ // 1 if (conn == null) {try {// conn = drivermanager.getConnection (url ، username ، password) ؛ conn = data_source.getConnection () ؛ System.out.println ("Get Connection Sciverse") ؛ } catch (sqlexception e) {// logger.error ("Get Connection failure" ، e) ؛ system.out.println ("الحصول على فشل الاتصال:" + e) ؛ } أخيرًا {/*System.out.println ("الحد الأدنى من الاتصال الخامل minidle ="+data_source.getMinidle ()) ؛ System.out.println ("MaxIdle Connection maxidle ="+data_source.getMaxIdle ()) ؛ System.out.println ("الحد الأقصى لعدد الاتصالات maxtotal ="+data_source.getMaxTotal ()) ؛ System.out.println ("الحجم الأولي initialsize ="+data_source.getInitialSize ()) ؛ System.out.println ("Timeout انتظار وقت MaxWaitMillis ="+(data_source.getMaxWaitMillis ()/1000)) ؛ System.out.println ("الحصول على اتصالات نشطة getNumactive () ="+data_source.getNumactive ()) ؛ System.out.println ("احصل على عدد الاتصالات getNumidle ="+data_source.getnumidle ()) ؛*/ connection_holder.set (conn) ؛ }} return conn ؛ }/ *** أغلق اتصال قاعدة البيانات*/ public static void closeConnection () {connection conn = connection_holder.get () ؛ // 1 if (conn! = null) {try {conn.close () ؛ System.out.println ("Close Connection Success") ؛ } catch (sqlexception e) {// logger.error ("Failure Contact Connection" ، e) ؛ System.out.println ("Flight Connection Failure:" + e) ؛ رمي new RunTimeException (e) ؛ } أخيرًا {connection_holder.remove () ؛ }}} // تنفيذ عمليات قاعدة البيانات العامة تحديث الفراغ المتزامن العام (int thlsh ، string ltnr) {connection conn = getConnection () ؛ if (conn == null) {system.out.println ("the () اتصال () في طريقة التحديث فارغة !!") ؛ } preparedStatement pStmt = null ؛ System.out.println ("update start!") ؛ int ltlsh = 0 ؛ حاول {// string sql = "تحديث محتوى الرسائل =؟ أين id =؟" ؛ // string sql1 = "حدد ltlsh من t_zxthlsk حيث lsh =؟" ؛ String sql = "update t_wx_ltnrk b set b.ltnr =؟ where b.lsh ="+ "(حدد a.ltlsh من t_zxthlsk a where a.lsh =؟) ؛ System.out.println ("عبارة SQL المحدثة هي: SQL->"+SQL) ؛ PSTMT = conn.preparestatement (SQL) ؛ PSTMT.SetBlob (1 ، bytearrayinputStream (ltnr.getbytes ())) ؛ PSTMT.Setint (2 ، thlsh) ؛ /*PSTMT.SetString(1 ، "هذا هو اختبار DBCP2 2222") ؛ pstmt.setint (2 ، 6) ؛*/if (pstmt.executeupdate ()> 0) {//system.out.println("update البيانات باستخدام id = 1 بنجاح! ") ؛ System.out.println ("تحديث بيانات محتوى الدردشة لـ thlsh ="+thlsh+"بنجاح!/n محتوى الدردشة هو:"+ltnr) ؛ } //conn.commit () ؛ /* while(rs1.next ()) {ltlsh = rs1.getint ("ltlsh") ؛ System.out.println ("الاستعلام عن رقم تدفق الدردشة بنجاح ، رقم تدفق الدردشة هو ltlsh->"+ltlsh) ؛ }*///pstmt.setstring(1 ، "update update1") ؛ //pstmt.setint(2 ، 1) ؛ //pstmt.setblob(1 ، bytearrayinputStream جديد ("12345 China" .getBytes ())) ؛ //pstmt.setint(2 ، 76732) ؛ /*if(pstmt.executeupdate ()> 0) {//system.out.println (بيانات data مع id = 1 ناجحة! ") ؛ System.out.println ("تحديث البيانات باستخدام المعرف = 76732 ناجح!") ؛ } conn.Commit () ؛*/ system.out.println ("تحديث t_wx_ltnrk success") ؛ } catch (sqlexception e) {//logger.error ((intity failure failure "، e) ؛ System.out.println ("تحديث استثناء البيانات ="+conn) ؛ system.out.println ("تحديث t_wx_ltnrk فشل:" + e) ؛ رمي new RunTimeException (e) ؛ } أخيرًا {// closeConnection () ؛ // closeConnection () ؛ if (pstmt! = null) {try {pstmt.close () ؛ } catch (sqlexception e) {// todo catch catch e.printstacktrace () ؛ System.out.println ("فشل إعداد") ؛ }} if (conn! = null) {try {conn.close () ؛ } catch (sqlexception e) {// todo catch catch e.printstacktrace () ؛ }} // قم بإزالة الاتصال في الموضوع. إذا لم تتم إزالة الاتصال ، فسيتم إغلاق الاتصال الذي تم الحصول عليه. لا يمكن تنفيذ عملية البيانات. connection_holder.remove () ؛ // closeConnection () ؛ } // return entitylist ؛ }} 9. يتم إنشاء مجموعة اتصال قاعدة البيانات الأساسية. بعد ذلك ، يمكنك محاكاة اتصال قاعدة البيانات من خلال طريقة التحديث لـ DatabaseHelper لمحاكاة تشغيل اتصالات قاعدة البيانات وإجراء عمليات البيانات وفقًا لاحتياجاتك الخاصة.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.