Tôi đã thử đoạn mã sau để truy xuất hình ảnh được lưu trữ trong cơ sở dữ liệu. Tôi đã tạo một cơ sở dữ liệu có tên là image_db
có chứa một bảng gọi là image_details
. Bảng có hai trường, id
và image_path
và cả hai loại là mediumblob
. Tôi đã lưu trữ một vài hình ảnh trong trường image_path
dưới dạng nhị phân. Bây giờ tôi muốn truy xuất & hiển thị nó.java.sql.SQLException: Trước khi bắt đầu tập kết quả
package cbir.imageAddition;
import java.awt.Image;
import java.awt.Toolkit;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.*;
enter code here
public class ImageRetrieve {
public ImageRetrieve() throws SQLException, IOException, ClassNotFoundException
{
Connection con = null;
Statement st = null;
ResultSet rs = null;
String url = "jdbc:mysql://localhost:3306/";
String db = "image_db";
String driver = "com.mysql.jdbc.Driver";
String user = "root";
String pass = "root";
Class.forName(driver);
con = DriverManager.getConnection(url + db, user, pass);
//System.out.println("Connection url : "+url + db);
st = con.createStatement();
String sql = "select image_path from image_details where id=1";
rs = st.executeQuery(sql);
InputStream stream = rs.getBinaryStream(2);
ByteArrayOutputStream output = new ByteArrayOutputStream();
int a1 = stream.read();
while (a1 >= 0) {
output.write((char) a1);
a1 = stream.read();
}
Image myImage = Toolkit.getDefaultToolkit().createImage(output.toByteArray());
output.close();
}
}
tôi nhận được ngoại lệ sau khi chạy đoạn code trên:
awtJan 12, 2012 12:55:48 AM cbir.imageAddition.add_image_window jButton5ActionPerformed
SEVERE: null
java.sql.SQLException: Before start of result set
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:841)
at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5650)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5570)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5610)
at cbir.imageAddition.ImageRetrieve.<init>(ImageRetrieve.java:49)
at cbir.imageAddition.add_image_window.jButton5ActionPerformed(add_image_window.java:280)
at cbir.imageAddition.add_image_window.access$400(add_image_window.java:26)
at cbir.imageAddition.add_image_window$5.actionPerformed(add_image_window.java:89)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6504)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6269)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4860)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2713)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java..EventDispatchThread.run(EventDispatchThread.java:90)
như thế nào điều này gây ra và làm thế nào tôi có thể giải quyết nó?
Cảm ơn @JB Nizet.it worked.But tôi sử dụng một phương pháp khác nhau để đọc và hiển thị hình ảnh như: – nidheesh
i sử dụng ResultSet.getBytes() phương pháp để đọc các hình ảnh và 'Image img = Toolkit.getDefaultToolkit () .createImage (imagedata); ' phương pháp để tạo ra hình ảnh. Sau đó tôi đã sử dụng một khung mới để hiển thị hình ảnh bằng cách thiết lập kích thước của nó để kích thước hình ảnh bằng phương pháp setPrefferedSize. Bây giờ tôi muốn hiển thị hình ảnh được lưu trữ trong cơ sở dữ liệu như một gallery.Is có bất kỳ phương pháp thuận tiện cho làm điều đó ??? – nidheesh