2011-12-11 187 views
1

我想从数据库中获取每张图片,并将其放入ArrayList中,然后将其打印出来。但是我得到了一个我不明白的结果。如何从java数据库获取图像与数据库

结果:

enter image description here

Q1:为什么我得到这样的结果?

Q2:如果我然后想用ImageIcon显示图片,是ArrayList他们的路要走吗?

这里是我的代码:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import java.util.*; 


public class ImageData { 

    public static void main(String[] args){ 

     Connection con = null; 
     Statement st = null; 
     ResultSet rs = null; 

     //databasens lokalisation, namn, användare & lösenord 
     String url  = "jdbc:mysql://localhost:3306/"; 
     String dbname = "101207-facemash"; 
     String user  = "root"; 
     String pwd  = "root"; 
     List<String> img = new ArrayList<String>(); 

     try{ 
      // Vi upprätta en anslutning till databasen med hjälp av anslutningen URL, dbnamnet, användarnamn och lösenord. 
      con = DriverManager.getConnection(url + dbname, user, pwd); 
      st = con.createStatement(); 
      rs = st.executeQuery("SELECT filename FROM images"); 

      while(rs.next()){ 
       img.add(rs.getString("filename")); 
       System.out.println(img); 
      } 

     } catch (SQLException ex) { 
       Logger lgr = Logger.getLogger(ImageData.class.getName()); 
       lgr.log(Level.SEVERE, ex.getMessage(), ex); 

      } finally { 
       try { 
        if (rs != null) { 
         rs.close(); 
        } 
        if (st != null) { 
         st.close(); 
        } 
        if (con != null) { 
         con.close(); 
        } 

       } catch (SQLException ex) { 
        Logger lgr = Logger.getLogger(ImageData.class.getName()); 
        lgr.log(Level.WARNING, ex.getMessage(), ex); 
       } 
      } 

     } 

    } 

回答

0

你检索图像文件,而不是图像本身的名称。如果图像存储在数据库中,则必须使用从第一个查询从数据库检索到的图像名称进行第二次查询,或者通过检索表格的不同列(取决于数据库的方式)被组织)。如果它们存储在单独的文件中(db仅包含文件名),则需要在检索名称后读取每个图像。 ImageIO类将对此有用。 (此外,如果将名称以URL的形式输出,ImageIcon类可以自行检索图像。)

至于使用ArrayList —这通常是处理不确定大小数组的好方法。我不认为你使用ImageIcon(一次处理一个图像)的事实与ArrayList是否是一个好主意有关。

+0

泰德:你能提供一些代码示例,你知道它为什么输出相同的文件名dussin时间吗? – SHUMAcupcake

+0

@SHUMAcupcake - 从您的代码看,每行输出对应于数据库的一行。这表明存储在表中的数据不是您所期望的 - 表中的每一行都有整个图像文件名称的数组,逗号分隔并括在括号内。 –

+0

@SHUMAcupcake,表格模式是什么?像泰德霍普说,似乎你有一个varchar文件列而不是像你期望的blob。即使列“文件名”的名称表明它不是blob! –