2011-12-11 186 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! –