2013-03-15 40 views
0

我在MySQL的有BLOB类型字段,我想把数据在这一领域JLabel为图标。例如,这个JLabel将以我的形式成为用户的个人资料图片。的MySQL的blob的Netbeans的JLabel

我用这个代码,但没有任何反应 ,也是我想fix to width或在我的JLabel修复任何图像大小

DefaultTableModel pic = MyDB.DataTable("SELECT `Picture` FROM `photo` WHERE `Employee ID` = 'EQ0103'"); 
    if (pic.getRowCount() > 0){ 
     Blob blob = pic.getBlob(1); 
     byte[] image1 = blob.getBytes(1, ALLBITS); 
     ImageIcon image = new ImageIcon(image1); 
     picture.setIcon(image); 
     getContentPane().add(picture); 
     setVisible(true); 
    } 

picture是我的JLabel的名称

+3

调试代码中的每一行。检查你得到的行数,检查'blob'是否为空,检查检索的字节是否正常,检查'image'是否被创建(非null和width/height> 0)。 – StanislavL 2013-03-15 08:03:05

+0

我'如果(pic.getRow()== 1)'等于0 – kelvzy 2013-03-18 01:10:37

+0

但我的SQL语句是正确的@StanislavL – kelvzy 2013-03-18 02:19:50

回答

1

我 我的文件名应该是这样的

txtPicPath.setText(file.getAbsoluteFile().toString()); 

,我用这些代码,并且还与JLabel的一刀切

ResultSet rst = MyDB.rsFetch("SELECT `Picture` FROM `photo` WHERE `Employee ID` = '"+ Data.User.getText()+"'"); 
     while (rst.next()) { 
     Blob filenameBlob = rst.getBlob("Picture"); 
     byte[] content = filenameBlob.getBytes(1L,(int)filenameBlob.length()); 
     ImageIcon ik = new ImageIcon(content); 
     Image img = ik.getImage(); 
     Image newimg = img.getScaledInstance(Data.picture.getWidth(), Data.picture.getHeight(), java.awt.Image.SCALE_SMOOTH); 
     ik = new ImageIcon(newimg); 
     Data.picture.setIcon(ik); 
     } 
1

使用resultset

Statement stmt = con.createStatement(); 
ResultSet rs = stmt.executeQuery("SELECT `Picture` FROM `photo` WHERE `Employee ID` = 'EQ0103'"); 

你可以从

0改变
Blob blob = rs.getBlob(1); 

InputStream binaryStream = rs.getBinaryStream(1); 

你可以参考从这里博客获取图像的官方指南另一altenative http://docs.oracle.com/javase/1.5.0/docs/guide/jdbc/blob.html

+0

不,我不能使用resultset原因我试过了,我总是有用户连接错误,因为我在这里有100多台电脑 – kelvzy 2013-03-20 04:26:52

+0

这就是问题 – kelvzy 2013-03-20 05:47:10

0

斑点具有getBinaryStream(),它返回一个包含字节流存储在blob中的数据。

的ImageIcon,它实现了图标,有一个构造这需要一个字节数组作为参数。

的JLabel具有的setIcon(图标)方法。

label.setIcon(new ImageIcon(ByteStreams.toByteArray(blob.getBinaryStream()))); 
0

尝试:

picture.setIcon(new ImageIcon(ByteStreams.toByteArray(blob.getBinaryStream()))); 
6

第一:从您的数据库返回输入流:

String query = "SELECT `Picture` FROM `photo` WHERE `Employee ID` = 'EQ0103'"; 
stmt = (PreparedStatement) con.prepareStatement(query); 
ResultSet result = stmt.executeQuery(); 

返回的图像从数据库

BufferedImage im = ImageIO.read(result.getBinaryStream(1)); 

然后让rezise这个图片:

im =linearResizeBi(im, /*width*/, /*height*/); 

linearResizeBi方法:

static public BufferedImage linearResizeBi(BufferedImage origin, int width, int height) { 
     BufferedImage resizedImage = new BufferedImage(width, height ,BufferedImage.TYPE_INT_RGB); 
     Graphics2D g = resizedImage.createGraphics(); 
     float xScale = (float)width/origin.getWidth(); 
     float yScale = (float)height/origin.getHeight(); 
     AffineTransform at = AffineTransform.getScaleInstance(xScale,yScale); 
     g.drawRenderedImage(origin,at); 
     g.dispose(); 
     return resizedImage; 
    } 

然后进行图像是一个图标:

ImageIcon image1 = new ImageIcon(im);

然后将图标添加到的JLabel:

picture.setIcon(image); 
getContentPane().add(picture); 
setVisible(true);