لقد كنت أستخدم ORACLE9i وOracle8 لفترة طويلة، وقد قمت بتدوين المشكلات التي تحتاج إلى الاهتمام عند استخدام JSP هنا كمرجع لك فقط.
1. كيفية التعامل مع الأنواع الكبيرة من Clob وBLOB
يمكن استخدامها لتخزين بيانات نصية كبيرة، ويمكن تخزين ما يصل إلى 4 جيجابايت من البيانات، وهو أمر شائع نسبيًا في تطوير التطبيقات يوفر طريقتين لقراءة الحصول على بيانات Clob:
تقوم طريقة getCharacterStream () بإرجاع دفق الإدخال المشفر unicode (كائن java.io.Reader).
تقوم طريقة getAsciiStream () بإرجاع دفق الإدخال المشفر بـ ASCII (java. io.InputStream).
لذا، إذا كان بإمكانك تخزين الأحرف الصينية، فيجب عليك استخدام الطريقة السابقة
الآن واسمحوا لي أن أتعلم كيفية استخدام CLOB خطوة بخطوة.
أولاً، قم بإنشاء جدول يحتوي على حقول CLOB:
إنشاء اختبار جدول (رقم صحيح، محتوى clob)؛
بعد ذلك، نقوم بإدراج سجل في هذا الجدول من خلال JSP، ثم نحصل عليه ونعرضه
:
النقاط التالية التي يجب ملاحظتها هي:
1) لا يمكن إدراج بيانات نوع Clob مباشرة. ويجب أن يتم إعطاؤه أولاً من خلال طريقةempt_clob() حيث يقوم بتخصيص محدد موقع (بنفس الطريقة، استخدم وظيفةempt_blob() لتخصيص محدد موقع للنقط الكبيرة) ثم حدده (بالطبع ليس لديه بيانات في هذا الوقت). ولكن مجموعة النتائج ليست فارغة)، احصل على كائن Clob، وقم بتعديل محتوى الكائن لجعله يلبي احتياجاتنا، ثم يتم تحديث سجل الصف من خلال طريقة التحديث
2) عند تعديل سجل يحتوي على نوع lob من خلال التحديد، يجب قفل الصف (يتم تنفيذه من خلال الكلمة الأساسية للتحديث)، وإلا ستبلغ Oracle عن خطأ
3) فقط إذا تم تحديد السجل المدرج للتحديث، فسيحدث خطأ "انتهاك ترتيب القراءة". وظيفة الإرسال إلى خطأ، أي أن الإرسال التلقائي غير مسموح به، ثم قم بتنفيذه، ثم حدده. هذه هي وظيفة السطور //* المذكورة أعلاه في هذا الرمز.
بعد ذلك، سنقرأ السجل المدرج حديثًا قاعدة البيانات وعرضها:
2. مشكلة الترميز
نظرًا لأن مطوري JAVA أجانب، فإن دعمهم للغة الصينية ليس جيدًا جدًا، حسنًا، لقد تسبب هذا في الكثير من الصداع للكثيرين منا، وهو ما نتحدث عنه حول الشخصية الصينية لن أخوض في التفاصيل حول بعض مواصفات ترميز الأحرف الصينية، وسأتحدث بشكل أساسي عن كيفية الاتصال بقاعدة بيانات Oracle.
1. يجب تحويل السؤال الصيني المدرج في قاعدة البيانات إلى ترميز
2. يجب تحويل السؤال الصيني الذي تمت قراءته من قاعدة البيانات إلى ترميز.
دعونا نلقي نظرة على كود JAVA المشفر:
//ECov.java import java.io.UnsupportedEncodingException; الطبقة العامة ECov { سلسلة ثابتة عامة asc2gb(سلسلة تصاعدي) { إعادة السلسلة؛ if(asc==null)return asc; يحاول{ ret=new String(asc.getBytes("ISO8859_1"),"GB2312"); } قبض على(UnsupportedEncodingException e){ ret=asc; } عودة متقاعد؛ } سلسلة ثابتة عامة gb2asc(سلسلة جيجابايت) { إعادة السلسلة؛ if(gb==null)return gb; يحاول{ ret=new String(gb.getBytes("GB2312"),"ISO8859_1"); } قبض على(UnsupportedEncodingException e){ ret=gb; } عودة متقاعد؛ } الجمهور الثابت int byte2int(بايت ب){ إرجاع ((-1)>>>>24)&b; } } |
في الواقع، معنى هذا الرمز هو الجمع بين الطريقتين في طريقة واحدة.
يجب استخدام ECov.gb2asc(arg) عند الإدراج في قاعدة البيانات، ويجب استخدام ECov.asc2gb(arg) عند القراءة. النقطة الأكثر أهمية هي أن Oracle يبدو أنها تتعرف فقط على ترميز تنسيق ISO8859_1 (فقط فكرتي).
3. بعض التفاصيل الصغيرة
1. إنها setAutoCommit(صحيح أو خطأ)، وهي وظيفة الالتزام () شائعة الاستخدام في sqlPlus. إذا كنت تستخدم صحيحًا، فلا تستخدم الالتزام ()، وإلا فسوف تستمر في استخدام طريقة الالتزام (). .
2. إن معالجة أنواع التاريخ ليست في الواقع بسيطة مثل setDate() و getDate() كما يتصور، وهناك ثغرات كبيرة في المنتصف. ستجد الأمر ممتعًا للغاية إذا قمت بتصحيحه بنفسك.
3. من الأفضل استخدام تقنية تجمع الاتصال في قاعدة البيانات، وهي طريقة جيدة لاستخدام بيئة J2EE القياسية وتقنية JNDI البسيطة.