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
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)?
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ć!!
Poczytaj o BLOB-ach i CLOBach w MySQL
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!
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??
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
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");
}
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
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??