Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

BufferedInputStream को इमेज में बदलें

यह सत्यापित करके प्रारंभ करें कि uploadedInputStream एक मान्य छवि है, शायद इसे ImageIO.write . का उपयोग करके लिखकर . आप हमेशा ImageIO.read का उपयोग कर सकते हैं छवि को वापस पढ़ने के लिए और इसे वापस ByteArrayInputStream में लिखने के लिए;)

मैंने H2 डेटाबेस का उपयोग करके एक त्वरित परीक्षण किया।

कुछ बातें मैंने नोट कीं। ब्लॉब#लंबाई एक लंबा देता है , जबकि Blob#getBytes एक int . की अपेक्षा करता है , इसका मतलब यह हो सकता है कि आप बाइट स्ट्रीम को छोटा कर रहे हैं।

साथ ही, H2 के दस्तावेज़ीकरण से ऐसा प्रतीत होता है कि ब्लॉब सामग्री को स्मृति में नहीं रखा जाता है, इसलिए मैं getBinaryStream . का उपयोग करता हूं इसके बजाय।

आयात करें आयात java.sql.Connection; आयात java.sql.DriverManager; आयात java.sql.PreparedStatement; आयात java.sql.ResultSet; आयात java.sql.SQLException; आयात javax.imageio.ImageIO; आयात javax.swing.ImageIcon; आयात javax.swing.JLabel आयात करें; सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] तर्क) {नया टेस्टइमेजडेटाबेस (); } सार्वजनिक टेस्टइमेजडेटाबेस () {कोशिश करें {clearDatabase (); छवि सहेजें(); लोड इमेज (); } पकड़ें (ClassNotFoundException | SQLException | IOException expक्स्प) { क्स्प.प्रिंटस्टैकट्रेस (); } } रक्षित कनेक्शन getConnection() फेंकता है ClassNotFoundException, SQLException { Class.forName("org.h2.Driver"); वापसी DriverManager.getConnection("jdbc:h2:d:\\Image", "sa", ""); } संरक्षित शून्य clearDatabase () IOException, ClassNotFoundException, SQLException फेंकता है {कनेक्शन con =null; रेडीस्टेडमेंट stmt =null; कोशिश करें {con =getConnection (); System.out.println ("डेटाबेस की सफाई"); stmt =con.prepareStatement ("छवियों से हटाएं"); इंट अपडेट किया गया =stmt.executeUpdate (); System.out.println ("अपडेटेड" + अपडेटेड + "पंक्तियाँ"); } अंत में {कोशिश {stmt.close (); } पकड़ें (अपवाद ई) { } कोशिश करें {con.close (); } पकड़ें (अपवाद ई) { } } संरक्षित शून्य सेवइमेज () IOException, ClassNotFoundException, SQLException फेंकता है {कनेक्शन con =null; रेडीस्टेडमेंट stmt =null; ByteArrayOutputStream baos =null; ByteArrayInputStream आधार =शून्य; कोशिश करें {बाओस =नया बाइटअरेऑटपुटस्ट्रीम (); फ़ाइल स्रोत =नई फ़ाइल ("/ पथ/से/फ़ाइल"); System.out.println ("स्रोत का आकार =" + स्रोत। लंबाई ()); BufferedImage img =ImageIO.read (स्रोत); ImageIO.write(img, "png", baos); बाओस.क्लोज़ (); bais =नया ByteArrayInputStream (baos.toByteArray ()); कॉन =गेटकनेक्शन (); stmt =con.prepareStatement ("छवियों (छवि) मानों में डालें (?)"); stmt.setBinaryStream(1, bais); इंट अपडेट किया गया =stmt.executeUpdate (); System.out.println ("अपडेटेड" + अपडेटेड + "पंक्तियाँ"); } अंत में {कोशिश { bais.close (); } पकड़ें (अपवाद ई) { } कोशिश करें { baos.close (); } पकड़ें (अपवाद ई) { } कोशिश करें { stmt.close (); } पकड़ें (अपवाद ई) { } कोशिश करें { con.close (); } कैच (अपवाद ई) { } } संरक्षित शून्य लोडइमेज () IOException, ClassNotFoundException, SQLException फेंकता है {कनेक्शन con =null; रेडीस्टेडमेंट stmt =null; परिणामसेट आरएस =शून्य; कोशिश करें {con =getConnection (); stmt =con.prepareStatement ("छवियों से छवि का चयन करें"); आरएस =stmt.executeQuery (); जबकि (rs.next ()) {System.out.println("गेटिंग ब्लॉब"); बूँद बूँद =rs.getBlob(1); System.out.println ("छवि पढ़ना"); BufferedImage img =ImageIO.read (blob.getBinaryStream ()); System.out.println ("img =" + img); JOptionPane.showMessageDialog(null, new JScrollPane(new JLabel(new ImageIcon(img)))); }} अंत में {कोशिश करें { rs.close (); } पकड़ें (अपवाद ई) { } कोशिश करें { stmt.close (); } पकड़ें (अपवाद ई) { } कोशिश करें { con.close (); } कैच (अपवाद ई) { } }}}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL का रूट पासवर्ड रीसेट करें

  2. MySQL में sqlalchemy कनेक्शन कैसे बंद करें

  3. MySQL पर विफल रहता है:mysql त्रुटि 1524 (HY000):प्लगइन 'auth_socket' लोड नहीं है

  4. MySQL ट्यूटोरियल - MySQL सर्वर लॉग का प्रबंधन:घुमाएँ, संपीड़ित करें, बनाए रखें और हटाएं

  5. फिक्सिंग लॉक प्रतीक्षा टाइमआउट पार हो गया; 'अटक MySQL तालिका' के लिए लेनदेन को पुनरारंभ करने का प्रयास करें?