Blob (كائن كبير ثنائي) ، كائن ثنائي كبير ، عبارة عن حاوية يمكنها تخزين الملفات الثنائية. في أجهزة الكمبيوتر ، غالبًا ما تكون النقط هي نوع الحقل المستخدم في قواعد البيانات لتخزين الملفات الثنائية. النقط هي ملف كبير. النقط النموذجية هي صورة أو ملف صوت. نظرًا لحجمها ، يجب معالجتها بطريقة خاصة (على سبيل المثال: تحميل أو تنزيلها أو تخزينها في قاعدة بيانات).
1. المفاهيم الأساسية
في التطوير الفعلي ، يكون من الضروري في بعض الأحيان استخدام البرامج لحفظ نص كبير أو بيانات ثنائية مباشرة في قاعدة البيانات للتخزين.
بالنسبة لـ MySQL ، لا يوجد سوى نقط ، ولكن لا توجد قسور. يستخدم MySQL نصًا لتخزين نص كبير ، ويتم تقسيم النصوص والنصوص إلى:
TinyText ، نص ، نص متوسط ونص طويل
Tinyblob ، blob ، mediumblob و longblob
2. بناء بيئة اختبار
2.1. بنية مشروع الاختبار المصنفة
كما هو موضح في الصورة:
2.2. اكتب ملف تكوين db.properties
driver = com.mysql.jdbc.driverurl = jdbc: mysql: // localhost: 3306/jdbcstudyusername = rootpassword = xdp
2.3. اكتب فئة أدوات JDBCUTILS
package me.gacl.utils ؛ import java.io.inputstream ؛ استيراد java.sql.connection ؛ استيراد java.sql.drivermanager ؛ استيراد java.sql.resultset ؛ سائق سلسلة ثابتة = فارغة ؛ عنوان url Static Static الخاص = NULL ؛ اسم المستخدم Static Static الخاص = NULL ؛ كلمة مرور السلسلة الثابتة الخاصة = فارغة ؛ ثابت {try {// اقرأ معلومات اتصال قاعدة البيانات في ملف db.properties inputStream في = jdbcutils.class.getClassloader (). getResourCeasStream ("db.properties") ؛ Properties Prop = New Properties () ؛ prop.load (in) ؛ // احصل على برنامج تشغيل اتصال قاعدة البيانات = prop.getProperty ("برنامج التشغيل") ؛ // احصل على عنوان عنوان URL لاتصال قاعدة البيانات url = prop.getProperty ("url") ؛ // احصل على اسم المستخدم لاتصال قاعدة البيانات = prop.getProperty ("اسم المستخدم") ؛ // احصل على كلمة مرور اتصال Connection Connection = prop.getProperty ("كلمة المرور") ؛ // قم بتحميل فئة برنامج DATABASE. forname (DRIVER) ؛ } catch (استثناء e) {رمي استثناء جديد initializererror (e) ؛ }} / *** method: getConnection* description: احصل على كائن اتصال قاعدة البيانات* @Anthor: The Lofty Wolf** @Connection Connection Object* @throws sqlexception* / public static connection getConnection () يلقي sqlexception {return drivermanager.getConnection (url ، useame ، useame) ؛ } / ** * @method: الإصدار * description: موارد الإصدار ، * تتضمن الموارد الواجب إصدارها كائن اتصال قاعدة بيانات الاتصال ، وكائن البيان المسؤول عن تنفيذ أوامر SQL ، وكائن ResultSet الذي يخزن نتائج الاستعلام * ANTHOR: 光克 * * * param conn * param st * / public static void reach if (rs! = null) {try {// أغلق كائن resultset الذي يخزن نتائج الاستعلام rs.close () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } rs = null ؛ } if (st! = null) {try {// أغلق كائن العبارة المسؤول عن تنفيذ أوامر SQL St.Close () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }} if (conn! = null) {try {// أغلق كائن اتصال قاعدة بيانات الاتصال conn.close () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }}}} 3. استخدم JDBC لمعالجة نص كبير في MySQL
لنوع النص في MySQL ، يمكن استدعاء الطريقة التالية لتعيينه
reparedStatement.SetcharacterStream (الفهرس ، القارئ ، الطول)
لأنواع النصوص في MySQL ، يمكنك الاتصال بالطريقة التالية للحصول عليها.
reader = resultset.getCharacterStream (سلسلة ColumnLabel) ؛ 2 String s = resultset.getString (سلسلة ColumnLabel) ؛
3.1. مثال اختبار
1. اكتب نصوص اختبار SQL
إنشاء قاعدة بيانات jdbcstudy ؛ استخدم jdbcstudy ؛ إنشاء Table TestClob (المعرف int المفتاح الأساسي Auto_increment ، نص السيرة الذاتية) ؛
2. اكتب رمز الاختبار على النحو التالي:
package me.gacl.demo ؛ استيراد java.io.file ؛ استيراد java.io.filereader ؛ استيراد java.io.filewriter ؛ استيراد java.io.reader ؛ استيراد java.sql.connection ؛ استيراد java.sql.preparedstatement ؛ استيراد java.sql.result ؛ me.gacl.utils.jdbcutils ؛ استيراد org.junit.test ؛/*** classname: jdbcoperaclob* description: استخدم jdbc لتشغيل نص كبير من mysql* @a class: method: إضافة * description: أدخل بيانات نصية كبيرة في قاعدة البيانات * anthor: 发年 * */ test public void add () {connection conn = null ؛ reparedStatement st = null ؛ resultset rs = null ؛ قارئ القارئ = فارغ ؛ حاول {conn = jdbcutils.getConnection () ؛ String sql = "insert in testclob (استئناف) القيم (؟)" ؛ st = conn.preparestatement (SQL) ؛ // المسار الذي تم الحصول عليه بهذه الطريقة ، سيتم استبدال المساحة التي يتم استبدال المساحة بـ "٪ 20" باستخدام "string path = jdbcoperaclob.class.getClassLoader (). getResource (" data.txt "). getPath () FileReader (file) ؛ jdbcutils.Release (Conn ، RS) ؛ "SELECT TESTCLOB حيث id = 2" ؛ // استخدم resultset.getCharacterStream ("اسم الحقل") للحصول على محتوى قارئ بيانات النص الكبير = rs.getCharcterStream ("Resume") ؛ char buffer [] = new Char [1024] ؛ int len = 0 ؛ filewRiter Out = new filewRiter ("d: //1.txt") ؛ بينما ((len = reader.read (buffer))> 0) {contentStr += new String (buffer) ؛ Out.write (Buffer ، 0 ، Len) ؛ } out.close () ؛ reader.close () ؛ } system.out.println (content) ؛ System.out.println ("-----------------------------------------------") ؛ System.out.println (ContentStr) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {jdbcutils.release (conn ، st ، rs) ؛ }}}4. استخدم JDBC لمعالجة البيانات الثنائية MySQL
بالنسبة لنوع النقطة في MySQL ، يمكن استدعاء إعدادات الطريقة التالية:
أعدت. setBinaryStream (i ، inputStream ، طول) ؛
لنوع النقطة في MySQL ، يمكنك الاتصال بالطريقة التالية للحصول على:
inputStream in = resultset.getBinaryStream (سلسلة عمود العمولة) ؛ inputStream في = resultset.getBlob (سلسلة columnlabel) .getBinaryStream () ؛
4.1. مثال اختبار
1. اكتب نصوص اختبار SQL
إنشاء TABLE TESTBLOB (ID int int key pricial auto_increment ، Image longblob) ؛
2. اكتب رمز الاختبار على النحو التالي:
package me.gacl.demo ؛ import java.io.file ؛ import java.io.fileInputStream ؛ import java.io.fileOutputStream ؛ import java.io.inputstream ؛ استيراد java.sql.connection ؛ استيراد java.sql.prepedstatement ؛ استيراد java.sql.rresultset ؛ me.gacl.utils.jdbcutils ؛ استيراد org.junit.test ؛/ *** classname: jdbcoperaclob* description: استخدم jdbc لمعالجة بيانات mysql binary (مثل الصور ، الأصوات ، النصوص الثنائية: luke canglang* @ @den JDBCOPERABLOB { / *** @method: إضافة* description: أدخل البيانات الثنائية في قاعدة البيانات* anthor: luke canglang** / test public void add () {connection conn = null ؛ reparedStatement st = null ؛ resultset rs = null ؛ حاول {conn = jdbcutils.getConnection () ؛ String sql = "insert in testblob (صورة) قيم (؟)" ؛ st = conn.preparestatement (SQL) ؛ // المسار الذي تم الحصول عليه بهذه الطريقة ، سيتم استبدال المساحات الموجودة فيه بـ "٪ 20" بدلاً من string path = jdbcoperablob.class.getClassLoader (). getResource ("01.jpg"). getPath () ؛ // سيتم استبدال "٪ 20" بمسار المساحات = path.replaceall ("٪ 20" ، "") ؛ ملف الملف = ملف جديد (مسار) ؛ FileInputStream fis = new FileInputStream (file) ؛ // Stream Stream Stream Stream Stream Stream Stream (1 ، Fis ، (int) file.length ()) ؛ int num = st.executeupdate () ؛ if (num> 0) {system.out.println ("insert بنجاح!!") ؛ } fis.close () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {jdbcutils.release (conn ، st ، rs) ؛ }} / *** @method: read* description: اقرأ البيانات الثنائية في قاعدة البيانات* anthor: 六后** / test public void read () {connection conn = null ؛ reparedStatement st = null ؛ resultset rs = null ؛ حاول {conn = jdbcutils.getConnection () ؛ String SQL = "حدد الصورة من TestBlob حيث id =؟" ؛ st = conn.preparestatement (SQL) ؛ St.Setint (1 ، 1) ؛ rs = st.executequery () ؛ if (rs.next ()) {// inputStream in = rs.getBlob ("Image"). getBinaryStream () ؛ // يمكن أيضًا إدخال هذه الطريقة في = rs.getBinaryStream ("Image") ؛ int len = 0 ؛ Byte Buffer [] = New Byte [1024] ؛ FileOutputStream Out = new FileOutputStream ("d: //1.jpg") ؛ بينما ((len = in.read (buffer))> 0) {out.write (buffer ، 0 ، len) ؛ } in.close () ؛ out.close () ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {jdbcutils.release (conn ، st ، rs) ؛ }}}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.