Zum Inhalt springen

Problem mit DB


mute

Empfohlene Beiträge

Hallo.

Ich habe mir eine Access Datenbank erstellt, die ich füllen möchte...

Ich habe dazu eine ganze Menge an Werten für einen Eintrag.

Als ich das ganze nur mit Vorname und Nachname gemacht habe ging eigentlich alles ganz gut...

nun habe ich es auf alle Daten erweitert und erhalte nur meine Exception

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Syntaxfehler in der INSERT INTO-Anweisung
das ganze sieht bei mir im quellcode folgendermaßen aus:
String anlegen = "INSERT INTO kunden (Nachname, Vorname, Strasse, Hausnr, Ort, PLZ, Vertragsnummer, Gesellschaft, Versicherungen, Vorlagedatum, Vertragsende, E-Mail, Telefon) VALUES ('" + nname.getText() + "','" + vname.getText() + "','" + strasse.getText() + "','" + hnr.getText() + "','" + ort.getText() + "','" +  plz.getText() + "','" + vnummer.getText() + "','" + gschaft.getText() + "','" + vers.getText() + "','" + plz.getText() + "','" + plz.getText() + "','" + email.getText() + "','" + tel.getText() + "')";


					System.out.println(anlegen);


					stmt.executeUpdate(anlegen);
das System.out.println liefert mir
INSERT INTO kunden (Nachname, Vorname, Strasse, Hausnr, Ort, PLZ, Vertragsnummer, Gesellschaft, Versicherungen, Vorlagedatum, Vertragsende, E-Mail, Telefon) VALUES ('Tester','Thomas','Teststraße','123a','Testort','0124','test-1234-te34','Testversicherung','TestKFZ-Haftpflicht, TestHausrat','0124','0124','testmail@muhkuh.de','01234567')

ich werd langsam etwas kirre ^^

Die reihenfolge der Tabellenköpfe stimmt 100%, ebenso wie evtl. Tippfehler...habe extra alles mit copy&paste übernommen und mehrmals überprüft...

Link zu diesem Kommentar
Auf anderen Seiten teilen

ne das ist nicht der fehler, dass hab ich nru so ins label eingetragen

wenn ich das ganze auf

String anlegen = "INSERT INTO kunden (Nachname, Vorname) VALUES ('" + nname.getText() + "','" + vname.getText() + "')";

reduziere funktionierts....och menno :/

vielleicht noch zu erwähnen: alle daten kommen aus stink normalen labels und die felder in der access datenbank sind auch alle als Text formatiert...

also eigentlich nichts besonderes zu beachten...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Problem gelöst:

Ich habe nun nochmal alles von vorn geschrieben und immer eine Spalte mehr füllen lassen....man darf im spaltenkopf kein "-" schreiben, wie zb E-Mail....

das ganze einfach in Email geändert und es geht >_>

Danke trotzdem! ^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

Servus,

bitte schmeiß Dein Statement komplett in den Müll und schau Dir PreparedStatements an. Diese Fummelei mit Hochkommata und String-Verknüpfung ist ja furchtbar. Ein Statement für ein PreparedStatement sieht z.B. so aus:

"SELECT name, vorname FROM Person WHERE id = ?

Dann kannst Du für jedes Fragezeichen in Deinem Statement einen Wert setzen (typsicher). In diesem Fall z.B. setInt(1, 14). Dann wird für das erste Fragezeichen der Wert 14. gesetzt. Damit brauchst Du Dich um die Codierung der Variablen in Deinem Statement nicht kümmern. Strings werden korrekt umgewandelt, Zahltypen, Booleans usw.

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

hmm davon hab ich noch nix gehört

aber grad wenns um sicherheit geht bin ich nat. voll dabei^^

aber in der form, wie du das eben schriebst ist es doch eine abfrage, ich will ja was speichern...

find grad leider im netz nichts dazu, werd heut nachmttag nochma schaun (hab grad in vorlesung nich die zeit dafür^^)

Link zu diesem Kommentar
Auf anderen Seiten teilen

hmm ok

ich werde das mal machen wenns programm fertig ist

lieber mach ich erstmal alles funktionierend fertig bis zum abgabetermin...feintuning kann dann noch kommen

habe aber ein anderes problem :)

ich hab mir eine methode erstellt, die 2 strings mit der datenbank abgleichen soll

hier mal der code

public boolean login(final String[] logindata) {

		boolean korrekt=false;


		try {

            // Treiber laden.

            Class.forName(driverClass);

            // Verbindung aufbauen.

            myConnection = DriverManager.getConnection(url, user, password);


            Statement stmt = myConnection.createStatement();


            //Datenabfrage

            // Einfügen von Daten in die Datenbank

            String query = "SELECT * FROM acc";


            ResultSet rs = stmt.executeQuery(query);


            while (rs.next()) {

                System.out.println("***\n" + rs.getString("Login"));

                System.out.println(rs.getString("Passwort") + "\n***");

            	if ((rs.getString("Login") == logindata[0]) && (rs.getString("Passwort") == logindata[1])) {

            		korrekt = true;

            	}


            }

            rs.close();

        }

        catch (Exception error) { 

            System.out.println(error.toString());

        }


        return(korrekt);

	}
(die anbindungen sind global vorher schon getroffen in der klasse) alle daten kann ich problemlos korrekt ausgeben lassen nur in der if-schleife scheint es ein problem zu geben...denn an dieser stelle bricht es mit folgendem fehler ab:
java.sql.SQLException: No data found

bin am rumprobieren, aber irgendwie wills nich^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

es muss ein fehler bei abfrage der if bedingung sein

bloß ich weis nich so richtig wie ich es anders gestalten soll

habs auch erfolglos mit logindata[0].equals(rs.getString("Login")) probiert...

es sind ja auch beides string *bald verzweifel*

Link zu diesem Kommentar
Auf anderen Seiten teilen

Servus,

das mit "ich mach jetzt erst mal fertig und optimier dann" wird nicht funktionieren. Du musst Dir die Zeit nehmen, oder es bleiben lassen.

Zu Deinem Fehler. Debugge in das Programm rein und schau nach, was in den Feldern drinsteht. An Deiner Query gefällt mir nicht, dass Du nach "*" suchst, und dann über rs.getXY(Name) zugreifst. Woher weißt Du, dass in "*" Dein Name mit dabei ist? "SELECT name, password" und dann die entsprechenden get-Methoden sind hier besser.

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

die angeführte login-funktion ist äusserst unsauber.

warum nicht einfach true/false durch die datenbank liefern lassen, ob die login-credentials korrekt sind. ein recordset ist unnötig und unperformant, du selektierst immerhin für einen login-check *ALLE* datensätze.

weiters würde ich hier wie angemerkt mit preparedstatements arbeiten.

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...