كيف يمكنني التعامل مع أحرف خاصة في إعداد جافا؟

StackOverflow https://stackoverflow.com/questions/911822

  •  06-09-2019
  •  | 
  •  

سؤال

في استعلام SQL التالي باستخدام PreparedStatement صف دراسي:

String query_descrip = "insert into timitemdescription (itemkey, languageid, longdesc, shortdesc) values (?, 1033, ?,?)";
PreparedStatement pstmt2 = con.prepareStatement(query_descrip); 
pstmt2.setInt(1, rs4);
pstmt2.setString(2, itemdescription);
pstmt2.setString(3, itemdescription.substring(0,39));
pstmt2.executeUpdate();       

أحيانا أحيانا اقتباسا واحدا ونقلت مزدوجة في أوصاف العنصر الخاصة بي. على سبيل المثال.

لقد قرأت أن بعض الأشخاص يستخدمون Regex، ومع ذلك بدا أن هذه خاصة على أساس كل حالة على حدة. هناك طريقة أخرى أعمل بها هي قراءة حرف صفيف السلسلة حسب الحرف. كنت آمل أن يكون هناك طريقة أكثر كفاءة وأقل كثافة من الموارد للقيام بذلك.

UpdDate بعد اختبار أكثر شمولا، اتضح أن هناك المزيد من المشاكل التي تحدث في التعليمات البرمجية الخاصة بي. كان أيضا مشكلة ترميز URL. عندما يتم تعبئة نموذج HTML بواسطة رمز JSP، سيحاول نقل حقل الوصف إلى نموذج عبر الإنترنت، يقوم باقتطاعه هناك على النموذج بدلا من الاستعلام. كما قام JTDS بتصحيح المشكلة التي تتلقى الأحرف الخاصة. لأن JTDS هو جرة، كما ساعد أيضا في تجنب إعادة تشغيل الجهاز. سأمنح موضوع JTDS The Bounty منذ أن كان هذا ما استخدمته جزئيا.

شكرا مقدما

هل كانت مفيدة؟

المحلول

نظرا لأنك تستخدم Sledstatement، فلن تضطر إلى فعل أي شيء على الإطلاق، وسيتم التعامل معها من أجلك بواسطة برنامج تشغيل JDBC. الشيء الوحيد الذي يجب عليك البحث عنه من أجله هو أحرف غير ASCII، وتحديدا يجب عليك التأكد من استخدام جداول DB ترميز للأعمدة النصية التي يمكن أن تعالج جميع الأحرف التي ستستخدمها. ولكن هذه مشكلة SQL، وليس مشكلة Java.

نصائح أخرى

لا تحتاج إلى التعامل مع هذه الأحرف خصيصا إذا كنت تربطها كمعلمات إلى leassstatement، كما تفعل. هذه واحدة من الفوائد الرئيسية لنهج البيان المعد.

مثل الآخرين قالوا، ليس عليك القيام بأي شيء للتعامل مع الأحرف الخاصة. تحتاج إلى تجربة برنامج تشغيل JDBC مختلف.

حاول استخدام سائق jtds ومعرفة ما إذا كان يساعدك في تأييدك. إنه برنامج تشغيل قاعدة بيانات مفتوح المصدر ل SQL Server. أستخدمه في العمل الآن ويعمل مثل بطل وهو يتوافق بالفعل مع مواصفات JDBC على عكس برنامج تشغيل MS.

أنا إلى حد ما بعض المشكلة ليست مع الرمز الذي نشرته. للمساعدة في استكشاف الأخطاء وإصلاحها:

  1. هل حاولت تشغيل مقتطف التعليمات البرمجية أعلاه في مصحح الأخطاء؟ ما هي قيمة "ItemDescription" قبل تمريرها إلى مكالمة قاعدة البيانات؟
  2. كيف حالك في الواقع التحقق من القيمة في قاعدة البيانات؟ هل هذا رمز جافا أكثر؟ أم أنك تبحث عنه مع SQLCMD أو شيء من هذا القبيل؟
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top