لقد كنت أستخدم 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;
class ECOv
{
public static String asc2gb(String
asc
)
{
String
ret
;
e)
{
ret=asc
}
return ret;
}
public static String gb2asc(String gb){
String
ret
;
"ISO8859_1
");
}
catch(UnsupportedEncodingException e){
ret=gb
}
return ret;
}
public static int byte2int(byte b){
return ((-1)>>>>24)&
b
;
معنى هذا الكود أي أنه يتم دمج الطريقتين في طريقة واحدة.
يجب استخدام ECov.gb2asc(arg) عند الإدراج في قاعدة البيانات، ويجب استخدام ECov.asc2gb(arg) عند القراءة. النقطة الأكثر أهمية هي أن Oracle يبدو أنها تتعرف فقط على ترميز تنسيق ISO8859_1 (فقط فكرتي).
3. بعض التفاصيل الصغيرة
1. إنها setAutoCommit(صحيح أو خطأ)، وهي وظيفة الالتزام () شائعة الاستخدام في sqlPlus. إذا كنت تستخدم صحيحًا، فلا تستخدم الالتزام ()، وإلا فسوف تستمر في استخدام طريقة الالتزام (). .
2. إن معالجة أنواع التاريخ ليست في الواقع بسيطة مثل setDate() و getDate() كما يتصور، وهناك ثغرات كبيرة في المنتصف. ستجد الأمر ممتعًا للغاية إذا قمت بتصحيحه بنفسك.
3. من الأفضل استخدام تقنية تجمع الاتصال في قاعدة البيانات، وهي طريقة جيدة لاستخدام بيئة J2EE القياسية وتقنية JNDI البسيطة.