[JAVA] [MySQL] Zapis pliku do bazy

Odpowiedz Nowy wątek
2006-07-22 17:21
edd101
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

Pozostało 580 znaków

2006-07-22 17:27
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)?

Pozostało 580 znaków

2006-07-22 17:33
edd101
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ć!!

Pozostało 580 znaków

2006-07-22 17:38
0

Poczytaj o BLOB-ach i CLOBach w MySQL

Pozostało 580 znaków

2006-07-22 18:03
edd101
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!

Pozostało 580 znaków

2006-07-22 19:00
edd101
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??

Pozostało 580 znaków

2006-07-22 19:06
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


You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-07-22 19:36
edd101
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");
}

Pozostało 580 znaków

2006-07-22 19:59
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


You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-07-22 20:32
edd101
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??

Pozostało 580 znaków

2006-07-22 20:32
edd101
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??

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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