إن السبب وراء عدم تمكن Javaweb Dbutils من العثور على المحتوى عند تنفيذ أمر SQL وتجاوز مجموعة النتائج كما يلي:
عند اجتياز مجموعة النتائج ، لن يؤدي عبور كائن الفول إلا إلى إخراج السطر الأول من المحتوى (السطر الأول هو الكائن الذي تم إنشاء مثيل له بواسطة فئة المستخدم) ، لذلك تحتاج هنا إلى re.getRepotablename () للاتصال بالمحتوى المقابل من خلال الكائن.
وبهذه الطريقة ، يمكن الحصول على القيمة
ملاحظة: تم تفصيل DbuTils من Javaweb على النحو التالي:
1. ما هي dbutils ووظائفها
Dbutils مكتوبة من قبل أباتشي. DBUTILS هي أداة عملية لقاعدة بيانات عملية في برمجة Java ، صغيرة وبسيطة وعملية.
تقوم DBUTILS بتغليف العمليات على JDBC ، مما يؤدي إلى تبسيط العمليات على JDBC. يمكنك كتابة كود أقل.
1. بالنسبة لعملية قراءة جدول البيانات ، يمكنه تحويل النتائج إلى مجموعات Java مثل List ، Array ، Set ، وما إلى ذلك ، وهو أمر مناسب للمبرمجين للعمل ؛
2. عملية كتابة جداول البيانات بسيطة للغاية (فقط اكتب عبارات SQL)
3. يمكنك استخدام مصادر البيانات ، واستخدام JNDI ، وتجميع اتصالات قاعدة البيانات وغيرها من التقنيات لتحسين كائنات اتصال قاعدة البيانات المصممة بالفعل الأداء
2. ثلاثة كائنات أساسية من dbutils
2.1. فئة QueryRunner
يوفر QueryRunner واجهة برمجة تطبيقات لتشغيل عبارات SQL. يحتوي على ثلاث طرق رئيسية: يتم استخدام Query () لتنفيذ SELECT ، يتم استخدام التحديث () لإجراء تحديث إدراج ، يتم استخدام BATCH () لإجراء معالجة الدُفعات. ما يلي سيقدم استخدام هذه الأساليب بالتفصيل.
2.2. نتائج الواجهة
يتم استخدامه لتحديد كيفية تغليف النتيجة التي تم تعيينها بعد عملية تحديد. لديها ما مجموعه 9 فئات التنفيذ شائعة الاستخدام. سأقدم بالتفصيل كيفية استخدامه.
2.3. dbutils فئة
إنها فئة أدوات تحدد طريقة إغلاق الموارد ومعالجة المعاملات
3. كيفية استخدام إطار عمل DBUTILS
3.1. استخدم الخطوات
استيراد حزمة الجرة المقابلة
إنشاء كائن QueryRunner
استخدم طريقة الاستعلام لتنفيذ عبارة SELECT
تغليف مجموعات النتائج باستخدام النتائج
استخدم فئة DBUTILS لإصدار الموارد
3.2. مثال
ملاحظة: أنا أستخدم مجموعة اتصال C3P0
استيراد java.sql.resultset ؛ استيراد java.sql.sqlexception ؛ استيراد java.util.arraylist ؛ استيراد java.util.list ؛ استيراد org.apache.commons.dbutils.queryrunner org.apache.commons.dbutils.handlers.beanlisthandler ؛ استيراد org.junit.test ؛ استيراد com.jxlg.domain.user ؛ الطبقة العامة testselect {test public void testselect () جرب {// New Resultsethandler <list <ser>> أخبرنا كيفية تغليف قائمة مجموعة النتائج <Sust> list = qr.query ("حدد * من المستخدم" ، النتائج الجديدة <sust <sustr <suster> () ArrayList <sured> () }}) ؛ لـ (مستخدم المستخدم: قائمة) {system.out.println (user) ؛ }} catch (sqlexception e) {E.PrintStackTrace () ؛ } }test public void testselect2 () {// إنشاء كائن QueryRunner QueryRunner qr = new QueryRunner (c3p0util.getDataSource ()) ؛ جرب {// تنفيذ عبارة SQL وأرجع قائمة النتائج <Sether> قائمة = qr.query ("حدد * من المستخدم Where id =؟ و username =؟" ، Beanlisthandler New Beanlisthandler <serve> (user.class) ، 1 ، "tom") ؛ لـ (مستخدم المستخدم: قائمة) {system.out.println (user) ؛ }} catch (sqlexception e) {E.PrintStackTrace () ؛ }}} 4. شرح مفصل للكائنات الأساسية الثلاثة من dbutils
4.1. كائن QueryRunner
4.1.1. مُنشئ
new QueryRunner () ؛ يمكن التحكم في معاملاته يدويًا.
بمعنى آخر ، يجب أن يكون هناك كائن اتصال في الأساليب (مثل الاستعلام ، التحديث ، الدفعة) التي يطلق عليها هذا الكائن.
new QueryRunner (DataSource DS) ؛ يتم التحكم تلقائيا معاملاته. SQL واحد ومعاملة واحدة.
لا يوجد كائن اتصال في الأساليب (مثل الاستعلام ، التحديث ، الدفعة) التي يطلق عليها هذا الكائن.
4.1.2. الطرق المشتركة
4.2. نتائج الواجهة
4.2.1. لديها 9 معالجات النتائج
ArrayHandler: مناسبة لسجل واحد. تغليف كل عمود من السجل في كائن صفيف []
Arraylisthandler: مناسبة لسجلات متعددة. قم بتغليف كل قيمة عمود لكل سجل في كائن صفيف [] ، وقم بتغليف الصفيف في قائمة ColumnListhandler: خذ بيانات عمود معين. مغلف في قائمة.
KeyedHandler: خذ سجلات متعددة ، يتم تغليف كل سجل في خريطة واحدة ، ثم تغليف هذه الخريطة في خريطة أخرى ، والمفتاح هو قيمة الحقل المحددة.
Maphandler: مناسبة لسجل واحد. ضع اسم العمود وقيمة العمود للسجل الحالي في خريطة واحدة maplisthandler: مناسبة لسجلات متعددة. قم بتغليف كل سجل في خريطة ، ثم قم بتغليف الخريطة في قائمة القياس: مناسبة للصف المفرد وبيانات عمود واحد
Beanlisthandler
4.2.2. مثال
استيراد org.junit.assert org.apache.commons.dbutils.handlers.beanhandler ؛ import org.apache.commons.dbutils.handlers.columnlisthandler ؛ import org.apache.commons.dbutils.handlers.keyedler ؛ import org.apache.commons.dbutils.handlers ؛ org.apache.commons.dbutils.handlers.maplisthandler ؛ استيراد org.apache.commons.dbutils.handlers.scalarhandler ؛ استيراد org.junit.test ؛ استيراد com.jxlg.domain.dor ؛ public class testresultler {etest void test1 () تغليف كل عمود من قيمة السجل في كائن صفيف [] QueryRunner QR = QueryRunner الجديد (C3P0UTIL.GetDataSource ()) ؛ جرب {Object [] o = qr.query ("حدد * من المستخدم حيث معرف =؟" ، جديد arrayHandler () ، 5) ؛ لـ (كائن كائن: o) {system.out.println (object) ؛ }} catch (sqlexception e) {E.PrintStackTrace () ؛ }} test public void test2 () يلقي sqlexception {// arraylisthandler: مناسبة لسجلات متعددة. قم بتغليف كل عمود من كل سجل في كائن صفيف [] ، وقم بتغليف الصفيف في قائمة QueryRunner QR = QueryRunner الجديد (C3P0UTIL.GetDataSource ()) ؛ قائمة <Object []> list = qr.query ("SELECT * from user" ، new ArrayListhandler ()) ؛ لـ (Object [] Objects: List) {for (Object Object: Objects) {system.out.println (Object) ؛ } System.out.println("----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- } } @Test public void Test3 () يلقي Sqlexception {// ColumnLiSthandler: احصل على بيانات عمود معين. System.out.println (كائن) ؛ البيانات في الجدول ، ومفتاح الخريطة الصغيرة هو اسم العمود للجدول ، وبالتالي فإن مفتاح الخريطة الكبيرة يستخدم نوع الكائن والسلسلة هي صغيرة. معرف ، لأنه تم تعيين "1". مناسبة لسجل واحد. system.out.println (m.getKey ()+"/t"+m.getValue ()) ؛ QueryRunner (C3P0UTIL.GetDataSource ()) ؛ System.out.println ("---------") ؛ System.out.println (O) ؛ System.out.println (المستخدم) ؛5. استخدم dbutils لتقديم مثال على إضافة وحذف وتعديل والبحث
استيراد org.junit.assert // إنشاء QueryRunner Object QueryRunner qr = new QueryRunner (c3p0util.getDataSource ()) ؛ حاول {qr.update ("أدخل في المستخدم (اسم المستخدم ، كلمة المرور ، البريد الإلكتروني ، عيد ميلاد) القيم (؟ ،؟ ،؟ ،؟)" ، "Guapi" ، "4646" ، "[email protected]" ، Date ()) ؛ } catch (sqlexception e) {E.PrintStackTrace () ؛ } }Test public void testupdate () {// إنشاء كائن QueryRunner QueryRunner qr = new QueryRunner (c3p0util.getDataSource ()) ؛ حاول {qr.update ("تحديث المستخدم تعيين username =؟ } catch (sqlexception e) {E.PrintStackTrace () ؛ } }Test public void testDelete () {// إنشاء كائن QueryRunner QueryRunner qr = new QueryRunner (c3p0util.getDataSource ()) ؛ جرب {qr.update ("حذف من المستخدم أين المعرف =؟" ، 4) ؛ } catch (sqlexception e) {E.PrintStackTrace () ؛ } }Test public void testbatch () {// إنشاء كائن QueryRunner QueryRunner qr = new QueryRunner (c3p0util.getDataSource ()) ؛ حاول {Object [] [] params = كائن جديد [10] [] ؛ // يمثل العالي الأبعاد عدد المرات التي يتم فيها تنفيذ عبارة SQL لـ (int i = 0 ؛ i <params.length ؛ i ++) {params [i] = new Object [] {"guapi"+i ، "4646" ، "[email protected]" ، Date ()} ؛ } qr.batch ("insert في المستخدم (اسم المستخدم ، كلمة المرور ، البريد الإلكتروني ، عيد ميلاد) قيم (؟ ،؟ ،؟)" ، params) ؛ } catch (sqlexception e) {E.PrintStackTrace () ؛ }}} لخص
ما سبق هو السبب في أنه لا يمكن العثور على javaweb dbutils عند تنفيذ أوامر SQL وتجاوز مجموعة النتائج. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمك إلى wulin.com!