Bild in einer Datenbank speichern?

Coder55

Mitglied
Hi leute,
Ich bin gerade mit einem Projekt beschäftigt. Und zwar ist mein Projekt ein Mp3 player in Java zu erstellen. Ich habe in dem Mp3 Player buttons Check Library,Update Library, Creat Playlist. So wenn ich auf Check Library gehe werden mir alle songs angezeigt.Durch eingeben des Track numbers wird mir der track gelistet.Dort steht dann wie viel mal dieser Track gespielt wurde und was für eine rating er bekommen hat.
Nun aber will ich zu diesem track ein Bild hinzufügen.Also wenn ich wieder den Track number eingebe soll dann wieder : Name des Tracks, diesmal Bild und dann noch wie viel mal er gespielt wurde.

Ich habe das mit dem Blob versucht jedoch bekomme ich hier auch Fehlermeldungen.
Mein Code
Code:
import java.sql.*; 
import java.io.ObjectOutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import javax.swing.ImageIcon;

public class LibraryData {

    private static Connection connection;
    private static Statement stmt;

-----------------------------Das ist die Connection zur datenbank--------------------------------------------------
    static {
    
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            // Assumes Library.mdb is in the same folder as LibraryData.class
            String sourceURL = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=Library.mdb;";
            connection = DriverManager.getConnection(sourceURL, "admin", "");
            stmt = connection.createStatement();
        } catch (Exception e) {
            // shouldn't happen if DB is set up correctly
            System.out.println(e);
        }
    }
------------------------------------------------------------------------------------------------------------------------------
    public static String listAll() {
        String output = "";
        try {
            // Need single quote marks ' around the key field in SQL. This is easy to get wrong!
            // For instance if key was "04" the SELECT statement would be:
            // SELECT * FROM LibraryTable WHERE key = '04'
            ResultSet res = stmt.executeQuery("SELECT * FROM LibraryTable");
            while (res.next()) { // there is a result
                // the name field is the second one in the ResultSet
                // Note that with  ResultSet we count the fields starting from 1
                output += res.getString(1) + " " + " - " + res.getString(4) + " (Played Time) " + res.getString(5) + " - " + res.getString(2) + " - " + res.getString(3) +  "\n";
            }
        } catch (Exception e) {
            System.out.println(e);
            return null;
        }
        return output;
    }

    public static String getName(String key) {
        try {
            // Need single quote marks ' around the key field in SQL. This is easy to get wrong!
            // For instance if key was "04" the SELECT statement would be:
            // SELECT * FROM LibraryTable WHERE key = '04'
            ResultSet res = stmt.executeQuery("SELECT * FROM LibraryTable WHERE key = '" + key + "'");
            if (res.next()) { // there is a result
                // the name field is the second one in the ResultSet
                // Note that with  ResultSet we count the fields starting from 1
                return res.getString(2);
            } else {
                return null;
            }
        } catch (Exception e) {
            System.out.println(e);
            return null;
        }
    }
-------------------------------------------------------------------- Das is der Part mit dem Blob---------------------------------------------------------------
	public static String getPicture(String key) {
       String sourceURL;
	   Connection con;
    con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=Library.mdb;");
       
    PreparedStatement ps;
// ich verstehe nicht ganz was ich in den Klammern hineinschreiben muss (name,Photo)+(value(?,?)
    ps = con.prepareStatement("insert into Pictrue(name,photo) " + "values(1,dj)");
    ps.setString(1, "dj");

    Blob blob = con.createBlob();
    ImageIcon ii = new ImageIcon("dj.gif");

    ObjectOutputStream oos;
    oos = new ObjectOutputStream(blob.setBinaryStream(1));
    oos.writeObject(ii);
    oos.close();
    ps.setBlob(2, blob);
    ps.execute();
    blob.free();
    ps.close();
    }
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
    public static String getArtist(String key) {
        // Similar to getName - use res.getString(3). If no result, return null
		try {
				// Need single quote marks ' around the key field in SQL. This is easy to get wrong!
				// For instance if key was "04" the SELECT statement would be:
				// SELECT * FROM LibraryTable WHERE key = '04'
				ResultSet res = stmt.executeQuery("SELECT * FROM LibraryTable WHERE key = '" + key + "'");
				if (res.next()) { // there is a result
					// the name field is the second one in the ResultSet
					// Note that with  ResultSet we count the fields starting from 1
					return res.getString(3);
				} else {
					return null;
				}
			} catch (Exception e) {
				System.out.println(e);
				return null;
			}
    }

    public static int getRating(String key) {
	
		// Similar to getName - use res.getInt(4). If no result, return -1
        //return -1;
	try {
				// Need single quote marks ' around the key field in SQL. This is easy to get wrong!
				// For instance if key was "04" the SELECT statement would be:
				// SELECT * FROM LibraryTable WHERE key = '04'
				ResultSet res = stmt.executeQuery("SELECT * FROM LibraryTable WHERE key = '" + key +"'" );
				if (res.next()) { // there is a result
					// the name field is the second one in the ResultSet
					// Note that with  ResultSet we count the fields starting from 1
					return res.getInt(4);
				} else {
					return -1;
				}
			} catch (Exception e) {
				System.out.println(e);
				return -1;
			}

    }

    public static int getPlayCount(String key) {
        // Similar to getName - use res.getInt(5). If no result, return -1
        //return -1;

try {
				// Need single quote marks ' around the key field in SQL. This is easy to get wrong!
				// For instance if key was "04" the SELECT statement would be:
				// SELECT * FROM LibraryTable WHERE key = '04'
				ResultSet res = stmt.executeQuery("SELECT * FROM LibraryTable WHERE key = '" + key + "'");
				if (res.next()) { // there is a result
					// the name field is the second one in the ResultSet
					// Note that with  ResultSet we count the fields starting from 1
					return res.getInt(5);
				} else {
					return +1;
				}
			} catch (Exception e) {
				System.out.println(e);
				return +1;
			}



    }

    public static void setRating(String key, int rating) {
        // SQL UPDATE statement required. For instance if rating is 5 and key is "04" then updateStr is
        // UPDATE Libary SET rating = 5 WHERE key = '04'
        String updateStr = ("UPDATE LibraryTable SET rating = " + rating + " WHERE key = '" + key + "'" );
        //System.out.println(updateStr);
        try {
            stmt.executeUpdate(updateStr);
        } catch (Exception e) {
            System.out.println(e);
        }
    }

    public static void incrementPlayCount(String key) {
		int playCount = getPlayCount(key) + 1;
       // SQL UPDATE statement required. For instance if rating is 5 and key is "04" then updateStr is
        // UPDATE Libary SET rating = 5 WHERE key = '04'
        String updateStr = "UPDATE LibraryTable SET playCount = " + playCount + " WHERE key = '" + key + "'";
        //System.out.println(updateStr);
        try {
            stmt.executeUpdate(updateStr);
        } catch (Exception e) {
            System.out.println(e);
        }
	
		// Similar to setRating - but must getPlayCount first and increment by 1
    }

    // close the database
    public static void close() {
        try {
            connection.close();
        } catch (Exception e) {
            // this shouldn't happen
            System.out.println(e);
        }
    }

    private String stars(int Rating) {
        String stars = "";
		// line 77-79 for loop assigning a control variable to a starting value
		// the test is carried out prior to any execution of the loop
		// it increments the control variable by 1
        for (int i = 0; i < Rating; ++i) {
            stars += "*";
        }
		// line 81 returns the value
        return stars;
    }
}



Meine Fehlermeldung:

Code:
---------- Javac ----------
LibraryData.java:77: cannot find symbol
symbol  : method getConnection(java.sql.Connection,java.lang.String)
location: class java.sql.DriverManager
	con = DriverManager.getConnection(con, "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=Library.mdb;");
	                   ^
1 error

Output completed (0 sec consumed) - Normal Termination
 
Zuletzt bearbeitet:
S

SlaterB

Gast
es gibt auch Java-Tags

---

an einer Stelle hast du
> String sourceURL = "jdbc:eek:dbc: Driver={Microsoft Access Driver (*.mdb)};DBQ=Library.mdb;";
> connection = DriverManager.getConnection(sourceURL, "admin", "");
was anscheinend hinhaut,

an anderer Stelle schreibst du anderen Code, wie die Fehlermeldung schon sagt stimmen die Parameter strukturell gar nicht
> con = DriverManager.getConnection(con, "jdbc:eek:dbc: Driver={Microsoft Access Driver (*.mdb)};DBQ=Library.mdb;");

diese Code-Zeile kommt im gepostenen Code-Block nicht vor, aber Java wird sie sich nicht ausgedacht haben,
auf jeden Fall hast du in getPicture() einen anderen Code,

sollte es nicht reichen, nur einmal eine Connection zu erstellen? du hast die sogar schon in einem static-Block,
das klingt doch ziemlich zentral global für alle, wieso überhaupt der zweite Aufruf?

------

getPicture() soll also ein Bild speichern? müsste die Methode dann nicht anders heißen?

> // ich verstehe nicht ganz was ich in den Klammern hineinschreiben muss (name,Photo)+(value(?,?)

PreparedStatement arbeitet mit Fragezeichen, richtig,
schau doch bitte in irgendein Tutorial, wie das grundsätzlich geht

Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 23.10 Vorbereitete Anweisungen (Prepared Statements)

der Blob-Code danach sieht schon ziemlich fortgeschritten aus, vielleicht klappt es damit
 

Coder55

Mitglied
Ich habe das gändern.Troztdem bekomme ich eine Fehlermeldung.
Mit getPicture will ich das bild in einem JTextarea anzeigen lassen,deswegen getPicture.



Code:
	public static String getPicture(String key) {
    String sourceURL;
    PreparedStatement ps;
	 ps = sourceURL.prepareStatement("insert into Pictrue(name,photo) " + "values(1,dj)");
     ps.setString(1, "dj");

    Blob blob = sourceURL.createBlob();
    ImageIcon ii = new ImageIcon("dj.gif");

    ObjectOutputStream oos;
    oos = new ObjectOutputStream(blob.setBinaryStream(1));
    oos.writeObject(ii);
    oos.close();
    ps.setBlob(2, blob);
    ps.execute();
    blob.free();
    ps.close();

    }

Fehlermeldung
Code:
---------- Javac ----------
LibraryData.java:78: cannot find symbol
symbol  : method prepareStatement(java.lang.String)
location: class java.lang.String
	 ps = sourceURL.prepareStatement("insert into Pictrue(name,photo) " + "values(1,dj)");
	               ^
LibraryData.java:81: cannot find symbol
symbol  : method createBlob()
location: class java.lang.String
    Blob blob = sourceURL.createBlob();
                         ^
2 errors

Output completed (0 sec consumed) - Normal Termination
 
S

SlaterB

Gast
hmm,

du rufst nun also die gewiss hochkomplexe Methode prepareStatement() an einer einfachen String-Variablen, nämlich sourceURL, auf?

wozu JDBC erfinden wenn man doch einfach
String x = "Hello World";
x.prepareStatement();
ausführen kann

nein so gehts nun nicht, prepareStatement() musst du schon an irgendwas JDBC-mäßigem aufrufen, nämlich der Connection,
wie du es vorher richtig hattest

ich schreibe das so deutlich weil das wirklich ein heftiger Fehler ist,
man kann doch nicht Befehle beliebig durcheinanderwerfen

die statische Variable connection muss deine Methode dominieren

-------

> Mit getPicture will ich das bild in einem JTextarea anzeigen lassen,deswegen getPicture.

willst du ein Bild aus der DB laden?
denn ansonsten kann ich 'bild in einem JTextarea anzeigen lassen' immer noch nicht mit dem Speichern eines Bildes in der DB in Verbindung bringen,
aber ist sicher weniger relevant
 
Zuletzt bearbeitet von einem Moderator:

Coder55

Mitglied
Ich habe das jetzt so gemacht.Ich weis nicht ob das richtig ist, weil ich bin jetzt total verwirrt. Kann nicht mehr klar denken.
Sorry wenn ich dumme Fehler mache.Sitze schon seit heute morgen hier dran.

der neue Code

Code:
ResultSet res = stmt.executeQuery("Insert into Pictrue(name,photo) " + "values(1,dj)"+ key + "'");
	
    Blob blob = connection.createBlob();
    ImageIcon ii = new ImageIcon("dj.gif");

    ObjectOutputStream oos;
    oos = new ObjectOutputStream(blob.setBinaryStream(1));
    oos.writeObject(ii);
    oos.close();
    connection.setBlob(2, blob);
    connection.execute();
    blob.free();
    connection.close();


Fehlermeldung
Code:
---------- Javac ----------
LibraryData.java:86: cannot find symbol
symbol  : method setBlob(int,java.sql.Blob)
location: interface java.sql.Connection
    connection.setBlob(2, blob);
              ^
LibraryData.java:87: cannot find symbol
symbol  : method execute()
location: interface java.sql.Connection
    connection.execute();
              ^
2 errors

Output completed (0 sec consumed) - Normal Termination
 
S

SlaterB

Gast
tja, also ich spiele das Spiel nicht mit,
kannst ja einen Tag Pause machen,
und dann neu anfangen zu denken,

"wie kam ich jemals auf die Buchstabenkombination 'setBlob'? das muss ja die Methode irgendeiner Klasse sein,
wo habe ich das gelesen, wo kann ich das nachschauen? welche 5 Klassen habe ich überhaupt zur Auswahl"
usw.

setBlob und Connection passt schonmal nicht zusammen, das sagt dir die Fehlermeldung,
kannst dein alten Code anschauen oder gerne an allen verfügbaren Variablen ausprobieren, Anleitung, oder oder..
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Verschieben einer Messnadel auf einem Bild AWT, Swing, JavaFX & SWT 2
S Bild in einer Variable speichern AWT, Swing, JavaFX & SWT 7
S JList Bild und Text in einer Zeile AWT, Swing, JavaFX & SWT 2
M JavaFX Mandelbrot-bild noch nicht optimiert AWT, Swing, JavaFX & SWT 7
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
frager2345 Bild aus Dateien lesen und als Hintergrund verwenden AWT, Swing, JavaFX & SWT 2
T Bild in ein graphics füllen AWT, Swing, JavaFX & SWT 2
N imageIcon zeigt kein Bild an AWT, Swing, JavaFX & SWT 5
B Bild lädt nicht AWT, Swing, JavaFX & SWT 2
izoards Bild ausdrucken - PageFormat setzen geht nicht AWT, Swing, JavaFX & SWT 5
M Bild wird nicht geladen obwohl sie gefunden wird AWT, Swing, JavaFX & SWT 0
V JavaFX Bild leer und keine Fehlermeldung AWT, Swing, JavaFX & SWT 21
D JavaFX Bearbeitetes Bild wird nicht gespeichert AWT, Swing, JavaFX & SWT 9
D JavaFX Größe des Bild an ImageView anpassen AWT, Swing, JavaFX & SWT 3
M Bewegtes Bild im BorderLayout.CENTER AWT, Swing, JavaFX & SWT 6
C Falschfarbenbild (lineare Grauwertspreizung)aus Grauwert-Bild erstellen AWT, Swing, JavaFX & SWT 15
C Kleineres Bild an bestimmte Koordinaten setzen AWT, Swing, JavaFX & SWT 6
S Bild neu skalieren - Bild in Bild speichern? AWT, Swing, JavaFX & SWT 6
N Bild Drehen AWT, Swing, JavaFX & SWT 1
Hatsi09 Swing JPanel Bild einfügen AWT, Swing, JavaFX & SWT 14
J Bild von anderer Klasse will nicht laden AWT, Swing, JavaFX & SWT 1
M JavaFX Bild zur ImageView in einem Kreis anzeigen. AWT, Swing, JavaFX & SWT 4
T JFrame Bild einfügen AWT, Swing, JavaFX & SWT 9
M Combobox bild anklicken AWT, Swing, JavaFX & SWT 2
cool_brivk24 Swing ImageIcon lädt kein Bild AWT, Swing, JavaFX & SWT 12
L Bild nicht in der Mitte AWT, Swing, JavaFX & SWT 16
B JavaFX Bild um die eigene Achse drehen lassen AWT, Swing, JavaFX & SWT 0
J Swing Bild in Button AWT, Swing, JavaFX & SWT 11
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
T Image Loader lädt Bild nicht AWT, Swing, JavaFX & SWT 10
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
P Kein Bild wird angezeigt bei ImageIcon AWT, Swing, JavaFX & SWT 16
T JavaFX Bild in Tabellenzelle AWT, Swing, JavaFX & SWT 2
Ksanatos Swing Bild (.jpg) einlesen und per Button wechseln AWT, Swing, JavaFX & SWT 9
S JPanel rotieren, Bild ist abgeschnitten, Clipping? AWT, Swing, JavaFX & SWT 0
MaxG. Swing Bild Button AWT, Swing, JavaFX & SWT 7
P Swing Bild Skallieren AWT, Swing, JavaFX & SWT 1
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
A Swing Bild wird nicht mehr geladen AWT, Swing, JavaFX & SWT 4
A Swing Gemaltes Bild über saveDialog speichern unter AWT, Swing, JavaFX & SWT 15
R 2D-Grafik PNG Bild per Graphics auf JPanel AWT, Swing, JavaFX & SWT 9
S Bild mit ImageIcon auf GUI verkleinern AWT, Swing, JavaFX & SWT 3
T AWT Farben in einem Bild ändern AWT, Swing, JavaFX & SWT 8
I JFrame Bild strecken und auf Bildschirmgröße anpassen AWT, Swing, JavaFX & SWT 2
F Gezeichnetes als bild speichern AWT, Swing, JavaFX & SWT 4
B 2D-Grafik Bild farblich filtern AWT, Swing, JavaFX & SWT 2
B JavaFX ImageView neues Bild zuweisen AWT, Swing, JavaFX & SWT 19
A 2D-Grafik Bild wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 24
K Bild in JFrame AWT, Swing, JavaFX & SWT 2
S JavaFX Teil eines Bildes ausschneiden / als neues Bild nutzen AWT, Swing, JavaFX & SWT 8
B Swing Unterteiltes JFrame mit Bild in der Mitte AWT, Swing, JavaFX & SWT 4
I Applet BlueJ Applet - Bild mit if-Schleife zeichnen lassen AWT, Swing, JavaFX & SWT 16
Z Bildervorschau, MouseDragged das Bild verschieben AWT, Swing, JavaFX & SWT 1
M JavaFX Ein Bild ohne Rahmen fällt runter? AWT, Swing, JavaFX & SWT 2
G Anonyme Instanz von JXImageView erstellen und mit Bild initialisieren AWT, Swing, JavaFX & SWT 7
A JPanel Bild laden (Porblem mit Dateipfad) AWT, Swing, JavaFX & SWT 2
M JavaFX - Bild in Jar einbinden, sodass es auch außerhalb der IDE geladen wird. AWT, Swing, JavaFX & SWT 2
M Bild Beschreibung mit ImageIO speichern AWT, Swing, JavaFX & SWT 1
M "ImageIO.read()" liest Bild nicht richtig ein AWT, Swing, JavaFX & SWT 3
I Swing JLabel Bild für 1sec anzeigen lassen AWT, Swing, JavaFX & SWT 13
K Bild in Label wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
C GUI öfters durchlaufen und hinterher Bild speichern AWT, Swing, JavaFX & SWT 1
M AWT Farben in Bild ersetzen AWT, Swing, JavaFX & SWT 11
E JavaFX Bild einfügen AWT, Swing, JavaFX & SWT 6
G paintComponents zerstückelt Bild AWT, Swing, JavaFX & SWT 0
C 2D Grafik ein Bild soll permanent durchlaufen AWT, Swing, JavaFX & SWT 2
1 Textfield: jede Buchstabe ein Bild AWT, Swing, JavaFX & SWT 2
C Bild Koordinaten AWT, Swing, JavaFX & SWT 6
M Bild aus JLabel resizen und speichern AWT, Swing, JavaFX & SWT 0
M Bild in JPanel mit Maus einfügen AWT, Swing, JavaFX & SWT 0
B JPanel und png-Bild AWT, Swing, JavaFX & SWT 2
B Swing Bild von Webseite herunterladen, diese dann in JList anzeigen. AWT, Swing, JavaFX & SWT 1
O 2D-Grafik Bild abgeschnitten nach Rotation mit Affine Transform und Hintergrund Schwarz AWT, Swing, JavaFX & SWT 8
A Swing Malprogramm Bild speichern? AWT, Swing, JavaFX & SWT 9
U Bild innerhalb hatml code anzeigen AWT, Swing, JavaFX & SWT 5
Y JavaFX Bild speichern und Pfad dazu abspeichern AWT, Swing, JavaFX & SWT 2
S Geladenes Bild wird nicht in JPanel angezeigt AWT, Swing, JavaFX & SWT 7
L 2D-Grafik Bild in Richtung Maus drehen AWT, Swing, JavaFX & SWT 18
C Bild in JFrame AWT, Swing, JavaFX & SWT 8
T AWT Bild laden und transparent zeichnen AWT, Swing, JavaFX & SWT 2
I SWT Bilder, bzw. ein einzelnes Bild AWT, Swing, JavaFX & SWT 6
L JavaFX: Bild in Image einlesen AWT, Swing, JavaFX & SWT 11
T Mit getSubimage ruckelt das Bild AWT, Swing, JavaFX & SWT 7
T Bild drehen ohne Resize AWT, Swing, JavaFX & SWT 3
A Bild in JLabel skalieren AWT, Swing, JavaFX & SWT 4
A Bild über Imageviewer auf GUI anzeigen AWT, Swing, JavaFX & SWT 3
D 3D-Grafik [JOGL] streifen im bild AWT, Swing, JavaFX & SWT 2
D Bild bewegen mit Tastendruck AWT, Swing, JavaFX & SWT 7
H Bild wird nicht angezeigt, Fehlercode unverständlich AWT, Swing, JavaFX & SWT 5
J 2D-Grafik Bildteile in ein anderes Bild speichern AWT, Swing, JavaFX & SWT 12
C Swing ImageIcon mit Bild aus Temp-Verzeichniss füllen AWT, Swing, JavaFX & SWT 15
J Swing Bild laden, Kreise drin malen, Schreiben AWT, Swing, JavaFX & SWT 2
S Bild skalieren AWT, Swing, JavaFX & SWT 3
D Bild in JFrame nur kurz da AWT, Swing, JavaFX & SWT 9
H Bild mit KeyListener verschieben AWT, Swing, JavaFX & SWT 2
GianaSisters Bild wird S/W gespeichert. AWT, Swing, JavaFX & SWT 4
O Bild auf das JLabel AWT, Swing, JavaFX & SWT 10
D Swing Text auf Bild legen AWT, Swing, JavaFX & SWT 7
S Ein externes Bild in ein JFrame einfügen AWT, Swing, JavaFX & SWT 8
J Swing Bild wird nicht auf JLabel angezeigt AWT, Swing, JavaFX & SWT 12

Ähnliche Java Themen

Neue Themen


Oben