2011-01-10 14 views
20

के साथ फ़ाइल करने के लिए मेरे पास एक MySQL डेटाबेस में ब्लॉब फ़ील्ड में संग्रहीत छवि डेटा वाला एक टेबल है। क्या केवल उन एसक्यूएल का उपयोग करके फाइल सिस्टम पर फ़ाइलों को उन छवियों को निर्यात करने का कोई तरीका है? छवियों का नाम {imageId} .jpgMySQL डेटाबेस से ब्लॉब निर्यात करने के लिए केवल SQL

मुझे पता है कि जावा के साथ ऐसा करना आसान है या जो भी एसक्यूएल स्क्रिप्ट के साथ संभव है?

+0

शायद यह इस बात पर निर्भर करता है कि उपयोगकर्ता MySQL के अंतर्गत चल रहा है या नहीं, फाइल सिस्टम पर पहुंच है या नहीं। –

+0

बेशक, लेकिन क्या यह भी संभव है? क्योंकि मैंने फाइल्स सिस्टम – suicide

उत्तर

12

मैं विचार पसंद नहीं है ...

drop procedure if exists dump_image; 
delimiter // 
    create procedure dump_image() 
    begin 

    declare this_id int; 
    declare cur1 cursor for select imageId from image; 
    open cur1; 
     read_loop: loop 
     fetch cur1 into this_id; 
     set @query = concat('select blob_field from image where imageId=', 
      this_id, ' into outfile "/tmp/xyz-', this_id,'.jpg"'); 
     prepare write_file from @query; 
     execute write_file; 
     end loop; 
    close cur1; 
    end // 
delimiter ; 

त्रुटि

 
mysql> call dump_image(); 
ERROR 1329 (02000): No data - zero rows fetched, selected, or processed 
ls -1 /tmp/xyz*
+0

तक पहुंचने के लिए SQL कमांड नहीं देखा है, आपने 'this_id' कहां सेट किया था? आपने कुछ भी पास नहीं किया है, और यह proc में सेट नहीं है, इसलिए क्वेरी विफल होने जा रही है। अन्यथा ऐसा लगता है कि यह –

+0

कर्सर 'fetch cur1 का उपयोग इस_आईडी में कर रहा है; ' – ajreal

+3

सहमत नहीं है कि मुझे खुद को पसंद नहीं है, आपको बहुत सावधानी बरतनी सुरक्षा आदि की आवश्यकता है। लेकिन सुन्दर समाधान - डंपफाइल पर चढ़ने के रूप में आउटफाइल मेरे लिए एक भ्रष्ट फ़ाइल –

15

के बावजूद आप यह मानते हुए स्थान में mysql उपयोगकर्ता आप स्टोर करने के लिए इच्छा के रूप में लिखने की अनुमति फाइलें, आप कर सकते हैं:

Select id,blob into dumpfile '/tmp/path' from table; 

दुर्भाग्य से, MySQL में डंपफाइल को अभिव्यक्ति/चर के रूप में निर्दिष्ट करना संभव नहीं है। हालांकि, अगर आप इसे संग्रहीत प्रक्रिया में लपेटते हैं और चर का उपयोग करते हैं तो आप इसे प्राप्त कर सकते हैं।

+1

ऐसा लगता है कि 'आउटफाइल' के बजाय 'डंपफाइल' का उपयोग करना क्रमबद्ध जावा ऑब्जेक्ट्स के साथ मदद करता है। –

+0

आप सही हैं, ऐसा लगता है कि DUMPFILE आउटफाइल से बेहतर काम करता है – rasputino