[JAVA] [MySQL] Zapis pliku do bazy

0

Witam!!!
Mam do zrealizowania pewne zadanko w JAVIE. Jednak natknołem się na pewien problem. Jak zapisać jakiś plik (w tym przypadku obraz w jpg) do bazy danych (MySQL)? Nie ma to być sieżka do pliku tylko to zdjęcie.
Z góry dzięki za pomoc

0

a po co Ci zapisywac zdjecie w bazie? Musiałbyś miec pole typu BLOB. A nie lepiej zapisać w bazie polozenie pliku na serwerze a przy pokazywaniu go wyswietlic go na stronie(w aplikacji)?

0

w zadaniu mam ze baza ma przechowywac m.in. "Zdjecie (binary)". Czyli chyba nie scieżke a ten plik przedstawiony w odpowiedni sposób. Tylko nie wiem jak to zrobić!!

0

Poczytaj o BLOB-ach i CLOBach w MySQL

0

Ok Wiem już co reprezentuje BLOB w bazach danych :-)
A wiecie może jak zapisać takie zdjęcie do bazy?
Zdjęcie wczytuje jako:
ImageIcon image = new ImageIcon("dl.jpg");
jednak jak dam image w poleceniu insert to to nie zadziala!

0

coś takiego wymyśliłem żeby zapisać do bazy fotka:

        FileInputStream input =new FileInputStream("foto.jpg");
        JPEGImageDecoder decoder =JPEGCodec.createJPEGDecoder( input );
        image = decoder.decodeAsBufferedImage();
        input.close();

a następnie wstawiam image do bazy! W bazie chyba zapisuje bo wyswiatla sie ze iles bajtów jest wprowadzonych [BLOB - 183 bajtów].
Tylko nie moge dojść jak odczytaną wartość zapisać z powrotem do pliku!! Może ktoś potrafi?? Jak zrobić konwersje??

1

Nie kombinuj tak.

Odczytaj to co jest w pliku tak po prostu - FileInputStream - bez zadnego kodowania/dekodowania. Zapisz ten strumien bajtow do bazy, a pozniej odczytaj. Baza w zaden sposob nie interpretuje tego co jej wrzucasz jako bloba - to tylko przechowalnik na bajty.

pozdrawiam
johny

0

OK bez kombinowania :-)
Żeby zapisać do bazy robie tak:
FileInputStream image =new FileInputStream("dl.jpg");
a następnie zapis;
A jak odczytać to z bazy?? Coś takiego jak poniżej nie działa (niezgodność typów)

rs = stmt.executeQuery("SELECT * FROM zdjecie");
while (rs.next()){
   FileInputStream odczytane = rs.getString("Zdjecie");
}
0

Sprobuj tak:

rs = stmt.executeQuery("SELECT * FROM zdjecie");
while (rs.next()){
   BufferedInputStream odczytane = rs.getBinaryStream("Zdjecie");
}

ew. tak:

rs = stmt.executeQuery("SELECT * FROM zdjecie");
while (rs.next()){
   BufferedInputStream odczytane = rs.getBlob("Zdjecie").getBinaryStream();
}

Nie jestem pewien, ktore zadziala. Pewnie obydwa :P

pozdrawiam
johny

0

Nadal jest jakiś błąd!!
Wyświetla mi sie taki komunikat:
"Type mismatch: cannot convert from InputStream to BufferedInputStream"
Więc zamieniam to na InputStream i otrzymuje coś takiego:

try {
   rs = stmt.executeQuery("SELECT * FROM zdjecie");
   while (rs.next()){
       InputStream odczytane = rs.getBinaryStream("Zdjecie");
   }
} catch (SQLException e) {
   printStackTrace();
}

Tyle że nie wiem jak to zapisać do pliku z tego InputStream!? A także powinienem to zdjęcie pokazać na palecie i też nie wiem jak przejść ;/ Może jeszcze jakaś rada?

Poprzednio dopóki zdjęcie nie było zapisywane to na panel próbowałem wyrzucić jako:

ImageIcon image = new ImageIcon("foto.jpg");
JLabel jeden = new JLabel(image);

A teraz??

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0