Latest Entries »

Tuesday, June 22, 2010

#Java - Dodawanie i pobieranie zdjęcia z bazy mysql

Czasami może się zdarzyć, że potrzebujemy przechować obrazek/zdjęcie w jakiejś tabeli bazy danych mysl. Najpierw wypadało by stworzyć tabelę, która będzie przechowywać nasze dane. Obrazki i inne pliki binarne przechowywujemy w typie danych BLOB. Tak wygląda przykładowa tabela:

CREATE TABLE IF NOT EXISTS `zdjecie` (
  `ID_Zdjecia` int(11) NOT NULL AUTO_INCREMENT,
  `Opis` varchar(150) COLLATE utf8_polish_ci NOT NULL DEFAULT '-',
  `Zdjecie` blob NOT NULL,
  PRIMARY KEY (`ID_Zdjecia`),
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci

A teraz do operowania na bazie danych będziemy posługiwać się 2 metodami:

//Wstawienie zdjęcia
    public void InsertZdjecie(int ID_Osoba,String Opis,FileInputStream fotos);
    //pobranie z bazy zdjęcia
    public  BufferedImage getMySqlPhoto(int ID_Zdjecie);

I ich definicja:
public  BufferedImage getMySqlPhoto(int ID_Zdjecie){
        BufferedImage BI = null;
        Statement S;
        ResultSet rs;
        String sqlStatement = "SELECT zdjecie FROM zdjecie WHERE ID_Zdjecia = '"+ID_Zdjecie+"'";
        try {
            S = con.createStatement();
            rs = S.executeQuery(sqlStatement);
            if (rs.next()){
                Blob image = rs.getBlob("Zdjecie");
                InputStream input = image.getBinaryStream();
                BI=ImageIO.read(input);
                // set read buffer size
                input.close();
            }
        }
        catch (SQLException ex)
        {
            ex.printStackTrace();
        }
        catch (IOException ex)
        {
            ex.printStackTrace();
        }
        return BI;
    }
    public void InsertIntoZdjecie(String Opis,FileInputStream fotos)
    {
        String INSERT = "INSERT INTO ZDJECIE(Opis,Zdjecie) VALUES (?,?)";
        System.out.println(INSERT);
        PreparedStatement ps1;

        try {
            ps1 = con.prepareStatement(INSERT);
            ps1.setString(1, Opis);
            ps1.setBinaryStream(2, fotos);
            ps1.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
            
        }
    }

Prawda, że proste ? :-)