Datentypen Probleme bei util.Date zu sql.Date

Blindxantos

Aktives Mitglied
hallo allerseits.
ich möchte einen Datensatz in eine Datenbank schreiben, scheitere jedoch am datum.

Ich hab die imports mal mit angegeben, da ich nicht weiß, ob evtl. da schon der fehler liegt.
Ich hab das util-date importiert, das sql-date nicht.

Code:
Java:
import java.awt.Color;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Label;
import java.awt.List;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import userInterfaces.Protokoll;

	/**
	 * This method is called to insert a modification to the DB.
	 * 
	 * @param tabelle
	 * @param klasseS
	 * @param lehrerS
	 * @param stundeS
	 * @param datumS
	 *            date as string
	 * @param raumS
	 */
	private void insertDB_Modification(String tabelle, String klasseS,
			String lehrerS, String stundeS, String datumS, String raumS) {
		
                int klasse = 0, lehrer = 0, stunde = 0, raum = 0;
		
                java.sql.Date sqlDate;

		try {
			// [...]

			// Sring to sqldate
			DateFormat formatter = new SimpleDateFormat("yyyy.MM.dd");
			try {
				java.util.Date datum = formatter.parse(datumS); //string zu util.date
				sqlDate = new java.sql.Date(datum.getTime()); //soll eigentlich von util.date zu sql.date ändern
			} catch (ParseException e) {
				System.out.println("Fehler beim umwandeln von String in Datum!");
				e.printStackTrace();
			}

			//[...]
			// eigentliches insert command
			PreparedStatement pstmt = con
					.prepareStatement("INSERT INTO "
							+ tabelle
							+ "(Klasse, Lehrer, Stunde, Datum, Raum) VALUES(?, ?, ?, ?, ?)");
			pstmt.setInt(1, klasse);
			pstmt.setInt(2, lehrer);
			pstmt.setInt(3, stunde);
			pstmt.setDate(4, sqlDate); //HIER IST ES ROT UNTERSTRICHEN, eclipse möchte hier zu util.DATE casten.
			pstmt.setInt(5, raum);
			int i = pstmt.executeUpdate();
		} catch (SQLException e) {
			listStatus.add("Einfügen in die Datenbank nicht erfolgreich!");
			e.printStackTrace();
		}
	}

Ich habe auch schon verschiedene Varianten aus dem internet probiert, aber die sind entweder deprecated oder fehlerhaft (die spalte datum der Datenbank bleibt leer).

Danke schonmal
 
Na rate mal, SQL statements wollen ein sql.date haben kein util.date.
Du kommst um eine Konvertierung nicht herum, das java.util.date ist inkompatibel mit den SQL-Statement objekten.
java.util.date heute=new java.util.date();
java.sql.date jk=new java.sql.date(heute);
Is doch kein Beinbruch 😛
 
Na rate mal, SQL statements wollen ein sql.date haben kein util.date.
Du kommst um eine Konvertierung nicht herum, das java.util.date ist inkompatibel mit den SQL-Statement objekten.
java.util.date heute=new java.util.date();
java.sql.date jk=new java.sql.date(heute);
Is doch kein Beinbruch 😛

Ja das steht doch alles bei ihm im Code! Er erzeugt ein util.Date und ein sql.Date. Übergibt die Zeit/Time von util.Date an das sql.Date und setzt dieses beim PreparedStatement

@Blindxantos
Gibt es einen Grund das du java.sql.Date nicht importiert hast? (würd mich nur so interessieren)
 
Hallo Blindxantos,

ich glaube nicht, dass Eclipse zu java.util.Date casten will. Die Variable sqlDate ist möglicherweise rot unterstrichen, weil sie nicht initialisiert wurde. Du kannst es aber auch mal mit einem Timestamp versuchen (setTimestamp).

Gruß,
André
 
man kann nicht zwei gleichnamige Klassen importieren

bei mir gibts keinen Fehler (edit: oh, stimmt, doch auch 'nicht initialisiert', wurde zunächst wegen anderen Fehlern nicht angezeigt),
ist das vielleicht nur eine Erinnerung als dort noch java.sql.Date übergeben wurde?
wie lautet die konkrete Fehlermeldung? hilft Project > Clean oder ähnliche Aktionen?

besser an einfachen Programmen testen:
Java:
    private void insert() throws Exception
    {
        java.sql.Date sqlDate = null;
        PreparedStatement pstmt = null;
        pstmt.setDate(4, sqlDate);
    }
sollte kompilieren, höchstens Warnungen anzeigen wegen null
 
ja ich bins wieder ^^
sorry für die verspätete antwort, ich muss immer zwischen 2 pcs wechseln, der eine hat kein MS Access, der andere hat keine Access Driver..:rtfm:


@Blindxantos
Gibt es einen Grund das du java.sql.Date nicht importiert hast? (würd mich nur so interessieren)
Nein, ich dachte, dass es Fehler gibt, da ich util.Date-Objekte hab, aber nur 1 sql.Date-Objekte. und wenn ich dann sql.Date importiert hätte, hätte ich voll viel im code ändern müssen (woher soll java wissen, ob es nun ein util oder ein sql-date ist) 😳

ich glaube nicht, dass Eclipse zu java.util.Date casten will. Die Variable sqlDate ist möglicherweise rot unterstrichen, weil sie nicht initialisiert wurde.
jop, hattest du recht 😉 hab da anscheinend was mit den fehlermeldungen aus anderen "versuchen" vermischt ^^



Es funktioniert nun, vielen Dank für eure Hilfe 🙂

Java:
	private void insertDB_Modification(String tabelle, String klasseS,
			String lehrerS, String stundeS, String datumS, String raumS) {

		Date datum;
		java.sql.Date sqlDate = null;
		try {
                        // [...]
                        // Sring to date
			DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
			try {
				datum = formatter.parse(datumS);
				sqlDate = new java.sql.Date(datum.getTime());// (java.sql.Date)
																// datum;
			} catch (ParseException e) {
				System.out
						.println("Fehler beim umwandeln von String in Datum!");
				e.printStackTrace();
			}

			// [...]
			// eigentliches insert command
			PreparedStatement pstmt = con
					.prepareStatement("INSERT INTO "
							+ tabelle
							+ "(Klasse, Lehrer, Stunde, Datum, Raum) VALUES(?, ?, ?, ?, ?)");
			pstmt.setInt(1, klasse);
			pstmt.setInt(2, lehrer);
			pstmt.setInt(3, stunde);
			pstmt.setDate(4, sqlDate);
			pstmt.setInt(5, raum);
			if (sqlDate != null) {
				System.out.println("Statement ausgeführt (insert_Modification)");
				int i = pstmt.executeUpdate();
			}
		} catch (SQLException e) {
			listStatus.add("Einfügen in die Datenbank nicht erfolgreich!");
			e.printStackTrace();
		}
	}

ich hab mit diesem datums-zeug schon immer probleme gehabt.. :rtfm:
also, Danke nochmal:applaus:
 
Zuletzt bearbeitet:

Zurück
Oben