Image aus MS Access anzeigen lassen

MarDaiBre

Aktives Mitglied
Hallo,

ich habe zu (fast) jedem Datensatz ein Bild im Format JPG in MS Access in einer Spalte als OLE-Objekt abgespeichert. Dies soll nach Angabe mehrerer Parameter angezeigt werden. Sage ich meinem Programm, es soll den absoluten Pfad auf der Festplatte nehmen, funktioniert das ohne Probleme. Daher denke ich, dass meine Anzeigefunktion gar nicht soooo verkehrt ist :)

Ich habe mir im Netz den Hinweis geholt, das Bild von der MS Access DB in einen byte-Array abzuspeichern und dann in ein ImageIcon bzw. ein BufferedImage umzuwandeln. Leider zeigt mir das Programm kein Bild an, eine Fehlermeldung bekomme ich jedoch auch nicht. Die Testausgaben "JA" und "FERTIG" werden auch ausgegeben. Hat jmd. einen Hinweis?

Hier mal das Coding:
Java:
public BufferedImage getBild(String oid, String bid)
	{
		Connection con;
		Statement st;
		ResultSet rs;
		String query;
		
		ImageIcon ico = null;
		BufferedImage image = null;
				    	
		try
		{
			query = "SELECT O_Bild_" + bid + " FROM Fehlerort WHERE O_ID = '" + oid + "'";
			
			con = DriverManager.getConnection(db);
			st = con.createStatement();
			rs = st.executeQuery(query);
		   	
			if(rs.next())
			{
				System.out.print("JA");
				byte[] imagedata = rs.getBytes(1);
				ico = new ImageIcon(imagedata);
				image = new BufferedImage(999, 761, BufferedImage.TYPE_INT_ARGB); // 999 Bildbreite, 761 Bildhöhe
				System.out.print("FERTIG");
			}
			
			else
				System.out.print("NEIN");

		   	rs.close();
	                st.close();
	                con.close();
		}
				
		catch(Exception e)
		{
			e.printStackTrace();
		}
		
	   	return image;
	}

Hier die Anzeigemethode der anderen Klasse
Java:
        Datenbankschnittstelle db = new Datenbankschnittstelle();
        Image img = db.getBild(oid, bid);
        
        imageResized = img.getScaledInstance((int) bildBreite, (int) bildHoehe, Image.SCALE_SMOOTH); // Bild wird nicht angezeigt
        bufferedImageOptimized = new BufferedImage((int) bildBreite, (int) bildHoehe, BufferedImage.TYPE_INT_ARGB);
        bufferedImageOptimized.getGraphics().drawImage(imageResized, 0, 0, null);
    	g = (Graphics2D) bufferedImageOptimized.getGraphics();

Vielen Dank schonmal!
 

Thallius

Top Contributor
Wie wäre es du machst mal eine Debugausgabe was in und wieviel in rs.getBytes überhaupt drin steht?

Ein JPEG Image sollte immer mit 0xFFD8 beginnen.

Dann bist du schon einmal einen Schritt weiter.

Gruß

Claus
 

MarDaiBre

Aktives Mitglied
Hmmm, ich bekomme leider kein JPEG Image :-(

Für den Code:
Java:
if(rs.next())
{
	System.out.println("JA");
	byte[] imagedata = rs.getBytes(1); // get image data to byte array
				
	System.out.println(rs.getBytes(1).toString());

Gibt er mit in der Console
Code:
JA
[B@419ebce8

aus. Nun, ich sage doch aber, dass er aus der Spalte mit den JPEGs laden und dies in ein byte-Array speichern soll. Warum speichert er dies nicht als JPEG ab?
 
Zuletzt bearbeitet:

Joose

Top Contributor
Deine Ausgabe gibt nur die Speicheradresse des Arrays wieder nicht den Inhalt von diesem Array.
Ich gehe davon aus das du eine IDE benutzt, setze einen Breakpoint an dieser Stelle und schau dir an mit welchen Bytes dieses Arrays beginnt.
 

MarDaiBre

Aktives Mitglied
Ja, ich arbeite mit eclipse luna version. Okay, wenn ich System.out.println(Arrays.toString(imagedata)); angebe, dann erhalte ich ein sehr großes Array:

Code:
[21, 28, 55, 0, 2, 0, 0, 0, 27, 0, 8, 0, 20, 0, 47, 0, -1, -1, -1, -1, 79, 98, 106, 101, 107, 116, 45, 77, 97, 110, 97, 103, 101, 114, 45, 83, 104, 101, 108, 108, 111, 98, 106, 101, 107, 116, 0, 80, 97, 99, 107, 97, 103, 101, 0, 1, 5, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 80, 97, 99, 107, 97, 103, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, -44, -63, 1, 0, 2, 0, 56, 56, 78, 48, 49, 95, 67, 50, 48, 55, 46, 106, 112, 103, 0, 72, 58, 92, 80, 50, 92, 73, 109, 112, 111, 114, 116, 92, 70, 101, 104, 108, 101, 114, 111, 114, 116, 101, 92, 67, 50, 48, 55, 92, 56, 56, 78, 48, 49, 95, 67, 50, 48, 55, 46, 106, 112, 103, 0, 0, 0, 3, 0, 48, 0, 0, 0, 67, 58, 92, 85, 115, 101, 114, 115, 92, 65, 116, 122, 101, 92, 65, 112, 

(...) // gekürzt, da mein Post sonst >500.000 Zeichen wäre O_O

0, 101, 0, 104, 0, 108, 0, 101, 0, 114, 0, 111, 0, 114, 0, 116, 0, 101, 0, 92, 0, 67, 0, 50, 0, 48, 0, 55, 0, 92, 0, 56, 0, 56, 0, 78, 0, 48, 0, 49, 0, 95, 0, 67, 0, 50, 0, 48, 0, 55, 0, 46, 0, 106, 0, 112, 0, 103, 0, 1, 5, 0, 0, 0, 0, 0, 0, -72, -83, 5, -2]
FERTIG

Warum auch immer erhalte ich nicht mehr die Ausgabe
Code:
JA
[B@419ebce8

vorher. Müsste ich nicht "einfach" die byte[] imagedata = rs.getBytes(1); Angabe abändern und sagen, er soll den Inhalt speichern und nicht die Speicheradresse?
 

Joose

Top Contributor
Ja, ich arbeite mit eclipse luna version. Okay, wenn ich System.out.println(Arrays.toString(imagedata)); angebe, dann erhalte ich ein sehr großes Array:

Warum auch immer erhalte ich nicht mehr die Ausgabe

vorher. Müsste ich nicht "einfach" die byte[] imagedata = rs.getBytes(1); Angabe abändern und sagen, er soll den Inhalt speichern und nicht die Speicheradresse?

Nein das passt schon so! "rs.getBytes(1)" liefert dir das Arrays zurück.
Aber wenn du "imagedata.toString()" ausführst wird die "toString()" Methode der Klasse Object aufgerufen (da es keine eigene für Array gibt) und diese gibt halt nur die Speicheradresse zurück!
(Das sind aber Grundlagen :))
 

MarDaiBre

Aktives Mitglied
Also ist ein FileInputStream notwendig oder ist das nur bei einem Lesen von Dateien sinnvoll? Stoße nämlich immer wieder auf einen FileInputStream-Hinweis wenn es um Bilder und byte-Arrays geht...
 

MarDaiBre

Aktives Mitglied
Selbst mit einem InputStream funktioniert es nicht.

Java:
public BufferedImage getBild(String oid, String bid)
{
	Connection con;
	Statement st;
	ResultSet rs;
	String query;
		
	ImageIcon ico = null;
	BufferedImage image = null;
				    	
	try
	{
		query = "SELECT O_Bild_" + bid + " FROM Fehlerort WHERE O_ID = '" + oid + "'";
			
		con = DriverManager.getConnection(db);
		st = con.createStatement();
		rs = st.executeQuery(query);
		   	
		if(rs.next())
		{
			byte[] imagedata = rs.getBytes(1);
				
			try
			{
				InputStream in = new ByteArrayInputStream(imagedata);
				image = ImageIO.read(in);
			}
				
			catch(Exception ex)
			{
				Toolkit.getDefaultToolkit().beep();
			}				
		}
			
		rs.close();
	        st.close();
	        con.close();
	}
				
	catch(Exception e)
	{
		e.printStackTrace();
	}
	
        return image;
}

Als Fehlermeldung erscheint in der nächsten Klasse für das Image ein NullPointerException. Alle Tipps und Fragmente im Netz konnten dazu keine weiteren Infos geben.
 

MarDaiBre

Aktives Mitglied
So, also mit diesem abgeänderten Coding bekomme ich wenigstens keine Fehlermeldung mehr und das neue Fenster, wo das Bild erscheinen soll, öffnet sich auch. Leider ist dort immer noch kein Bild zu sehen - nur die Hintergrundfläche des Frames.

Java:
public BufferedImage getBild(String oid, String bid)
{
	Connection con;
	Statement st;
	ResultSet rs;
	String query;
		
	Image image = null;
	ImageIcon icon = null;
	BufferedImage buffImage = null;
	    	
	try
	{
		query = "SELECT O_Bild_" + bid + " FROM Fehlerort WHERE O_ID = '" + oid + "'";
			
		con = DriverManager.getConnection(db);
		st = con.createStatement();
		rs = st.executeQuery(query);
		   	
		if(rs.next())
		{
			byte[] imageData = rs.getBytes("O_Bild_" + bid);
				
			try
			{
				image = Toolkit.getDefaultToolkit().createImage(imageData);
		                icon = new ImageIcon(image);
		                buffImage = new BufferedImage(999, 761, BufferedImage.TYPE_INT_ARGB); 
		                buffImage.getGraphics().drawImage(icon.getImage(), 0,0, icon.getImageObserver());
					
		                //InputStream in = new ByteArrayInputStream(imagedata);
				//image = ImageIO.read(in);
					
				//ico = new ImageIcon(imagedata);
				//image = new BufferedImage(999, 761, BufferedImage.TYPE_INT_ARGB);
				//image.getGraphics().drawImage(ico.getImage(), 0, 0, ico.getImageObserver());
				//System.out.println(image);
			}
				
			catch(Exception ex)
			{
				ex.printStackTrace();
				Toolkit.getDefaultToolkit().beep();
				JOptionPane.showMessageDialog(new JFrame(), "Kein Bild für diese Fehlerort/Baureihen-Kombination vorhanden.\nBitte wenden Sie sich an den Administrator über 'Hilfe' -> 'Kontakt'.", "Fehler", JOptionPane.ERROR_MESSAGE);
			}				
		}
			
		rs.close();
	        st.close();
	        con.close();
	}
				
	catch(Exception e)
	{
		e.printStackTrace();
	}
		
	return buffImage;
}

Hat jemand einen Hinweis, warum das Bild nicht auf dem Frame angezeigt wird?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
Telisti Javafx Image wird nicht richtig integiert AWT, Swing, JavaFX & SWT 8
K JavaFX Bildergalerie aus Image Ordner laden AWT, Swing, JavaFX & SWT 3
JMölleri Swing Image wird unscharf dargestellt AWT, Swing, JavaFX & SWT 2
L AWT .gif image transparent machen AWT, Swing, JavaFX & SWT 3
kodela angezeigtes Image entfernen AWT, Swing, JavaFX & SWT 1
R Java, GUI, Hintergrundbild, Image, AWT, Swing, JavaFX & SWT 4
R Swing Background Image in JFrame implementieren AWT, Swing, JavaFX & SWT 40
T Swing Buffered Image anzeigen AWT, Swing, JavaFX & SWT 45
L Image kann nicht gefunden werden AWT, Swing, JavaFX & SWT 1
S Stretch Image in ImageView AWT, Swing, JavaFX & SWT 4
N Swing Image aus Web laden und in Icon umwandeln AWT, Swing, JavaFX & SWT 4
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
L JavaFX Image mit Blureffect AWT, Swing, JavaFX & SWT 2
Bluedaishi JavaFX Button Image aus Datenbank AWT, Swing, JavaFX & SWT 13
F javaxt.io.Image getBufferedImage liefert null AWT, Swing, JavaFX & SWT 1
Yjuq JavaFX Custom Control - Image resize AWT, Swing, JavaFX & SWT 0
D Java FX Image in einer Webanwendung annotieren und den Bereich ausschneiden AWT, Swing, JavaFX & SWT 0
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
T Image Loader lädt Bild nicht AWT, Swing, JavaFX & SWT 10
J 2D-Grafik Background Image Klasse AWT, Swing, JavaFX & SWT 14
Q AWT TicTacToe Image auf Button hinzufügen AWT, Swing, JavaFX & SWT 5
BreakdownBob Swing JLabel verschwindet hinter Image AWT, Swing, JavaFX & SWT 2
L JavaFX leeres weißes Image - javafx.scene.image.Image AWT, Swing, JavaFX & SWT 2
L JavaFX Image im ImageView auf Scroll Listener reagieren AWT, Swing, JavaFX & SWT 5
Naxon89 JavaFX Image wird nicht korrekt geladen AWT, Swing, JavaFX & SWT 3
W Javafx - Image soll sich mit der Camera mitbewegen AWT, Swing, JavaFX & SWT 1
B Graphics to Image AWT, Swing, JavaFX & SWT 3
L Image in anderes kopieren AWT, Swing, JavaFX & SWT 0
T Swing Image wird nicht geladen AWT, Swing, JavaFX & SWT 1
S JavaFX Image Skalierung in Scrollpane, Scrollpane resized sich nicht AWT, Swing, JavaFX & SWT 5
I Image im PopupMenu vom SystemTray AWT, Swing, JavaFX & SWT 8
F JavaFX Position von Image angeben/verändern AWT, Swing, JavaFX & SWT 2
M JavaFX Image View Würfel berechnen AWT, Swing, JavaFX & SWT 3
L JButton mit Image AWT, Swing, JavaFX & SWT 5
F Swing Image einem Button hinzufügen AWT, Swing, JavaFX & SWT 5
B Resize von Image nach Resize von Button AWT, Swing, JavaFX & SWT 1
T Image aus "nicht-src-ordner" AWT, Swing, JavaFX & SWT 5
vodkaz (javafx) Image Problem AWT, Swing, JavaFX & SWT 2
C Image laden und Speichern - Image wird auf JPanel nicht angezeigt AWT, Swing, JavaFX & SWT 4
M Image in JTable einfügen AWT, Swing, JavaFX & SWT 9
H Image im Array per Knopfdruck ändern AWT, Swing, JavaFX & SWT 6
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
P Image oder Icon auf Tooltip zeichnen AWT, Swing, JavaFX & SWT 4
G JavaFX Image vergrößern AWT, Swing, JavaFX & SWT 5
U Image mit Zeichenbereich rotieren AWT, Swing, JavaFX & SWT 3
P Speicherproblem SWT.Image in Nebula-Gallery AWT, Swing, JavaFX & SWT 3
L JavaFX: Bild in Image einlesen AWT, Swing, JavaFX & SWT 11
D Image soll langsam sichtbar werden AWT, Swing, JavaFX & SWT 4
D JLabel Image ausrichten AWT, Swing, JavaFX & SWT 2
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
bluerob Problem beim Image zeichnen via andere Klasse AWT, Swing, JavaFX & SWT 7
H Image Icon ersetzen AWT, Swing, JavaFX & SWT 8
I Image Button AWT, Swing, JavaFX & SWT 4
U IntBuffer zum Image konvertieren. AWT, Swing, JavaFX & SWT 9
S Eigene JComponent Image zeichnen AWT, Swing, JavaFX & SWT 3
T 2D-Grafik Slideshow (DoubleBuffering und Image transformieren/bewegen) AWT, Swing, JavaFX & SWT 6
K Swing Warum bleibt das Image immer gleich AWT, Swing, JavaFX & SWT 4
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
R Image laden sehr langsam AWT, Swing, JavaFX & SWT 7
D Image.getScaledInstance() vs. Netzwerkverbindung??? AWT, Swing, JavaFX & SWT 2
reibi SWT Image viewer AWT, Swing, JavaFX & SWT 2
lumo SWT Image funktion auf ImageDaten AWT, Swing, JavaFX & SWT 9
A Applet .gif in applet Image nicht animiert angezeigt AWT, Swing, JavaFX & SWT 4
M Image wird nicht neugezeichnet nach dem Wechsel AWT, Swing, JavaFX & SWT 2
lumo SWT Image Pattern AWT, Swing, JavaFX & SWT 5
P Image mehrfach in ein BufferedImage zeichnen AWT, Swing, JavaFX & SWT 7
M Swing Image in JPanel als Componente AWT, Swing, JavaFX & SWT 2
P nicht sichtbares JPanel / JFrame als Image speichern AWT, Swing, JavaFX & SWT 3
T Image skaliert in Variable speichern AWT, Swing, JavaFX & SWT 6
S Image wird nicht (immer) in paintComponent gezeichnet? AWT, Swing, JavaFX & SWT 6
S Swing Image wird nicht geladen AWT, Swing, JavaFX & SWT 2
0 Mousecurser mit Image hinterlegen AWT, Swing, JavaFX & SWT 4
B Swing Drag&Drop mit Feedback (Image am Mauszeiger) AWT, Swing, JavaFX & SWT 7
N Java Choice Bilderausgabe - images - - image - AWT, Swing, JavaFX & SWT 2
D iText PdfPCell mit Image AWT, Swing, JavaFX & SWT 3
S 2D-Grafik Icon in Image (System Icons) AWT, Swing, JavaFX & SWT 2
S Button mit Image AWT, Swing, JavaFX & SWT 7
A Skaliertes Image pixelweise bearbeiten AWT, Swing, JavaFX & SWT 6
L Swing Image zur Laufzeit verändern AWT, Swing, JavaFX & SWT 6
F SWT GC drawText auf halbtransparentem Image AWT, Swing, JavaFX & SWT 21
G Swing JEdtitorPane und HTML Image Seite AWT, Swing, JavaFX & SWT 2
C Image mit Graphics2D zeichnen AWT, Swing, JavaFX & SWT 9
C Image performant skalieren AWT, Swing, JavaFX & SWT 5
D SWT Image Farbtiefe AWT, Swing, JavaFX & SWT 2
L Swing Auf unabhängiges Image-Objekt zeichnen AWT, Swing, JavaFX & SWT 8
lumo SWT Composite + Image + zeichnen AWT, Swing, JavaFX & SWT 4
V Ein Image als Button (nicht mit JButton(Icon)) AWT, Swing, JavaFX & SWT 5
D Image Viewer gesucht AWT, Swing, JavaFX & SWT 5
Kr0e Image schärfen AWT, Swing, JavaFX & SWT 2
R Bild drehen UND skalieren (Image bzw BufferedImage) AWT, Swing, JavaFX & SWT 5
T Image auf Image zeichnen AWT, Swing, JavaFX & SWT 2
E Warum ist offscreen (mit Image) schneller? AWT, Swing, JavaFX & SWT 11
G Swing Image speichern / 0 Byte AWT, Swing, JavaFX & SWT 7
H Image abspeichern AWT, Swing, JavaFX & SWT 4
B Swing Image als Hintergrund im JInternalFrame - Problem AWT, Swing, JavaFX & SWT 3
W Image in jar einbauen AWT, Swing, JavaFX & SWT 20
Luk10 AWT Image und die Skalierung! AWT, Swing, JavaFX & SWT 3
L JPanel als Image speichern AWT, Swing, JavaFX & SWT 3
Developer_X Image Texels filtern AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben