Insert befehl geht nicht

Status
Nicht offen für weitere Antworten.
T

tachchen

Gast
hallo,

versuche einen Datensatz in eine DB anzulegen, doch es kommt immer die Fehlermeldung:

[Microsoft][ODBC Microsoft Access Driver] Syntaxfehler in der INSERT INTO-Anweisung.
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcStatement.execute(Unknown Source)
at bean.DBBean.neuenDatensatzAnlegen(DBBean.java:95)
at bean.TestDB_Student.main(TestDB_Student.java:13)

der relevante Code ist:

Code:
conn.createStatement().execute(
						"Insert Into student"+ "("
						+name+","+Studiengang+","+Studienbeginn+","+mail+","+Geschlecht+")"+
						" Values"+
						"('"
						+ name +"','"
						+ Studiengang +"','"
						+ Studienbeginn +"','"
						+ mail +"','"
						+ Geschlecht +"');");

wo soll den hier der Fehler sein?? thx
 

SebiB90

Top Contributor
eine insert into anweisung ist so aufgebaut:
INSERT INTO tabelle(spaltenname) VALUES(inhalt)
du hast aber bei spaltenname auch den inhalt angegeben
 
T

tachchen

Gast
ja aber ich hab die Methode so definiert, das ich den Inhalt als Parameter übergebe. Die Methode sieht so aus:

Code:
public void neuenDatensatzAnlegen(String name,String Studiengang,String Studienbeginn,
			String mail,String Geschlecht){
		this.name=name;
		this.Studiengang=Studiengang;
		this.Studienbeginn=Studienbeginn;
		this.mail=mail;
		this.Geschlecht=Geschlecht;
		
		
		
		try {
	
				
				conn.createStatement().execute(
						"Insert Into student"+ "("
						+name+","+Studiengang+","+Studienbeginn+","+mail+","+Geschlecht+")"+
						" Values"+
						"('"
						+ name +"','"
						+ Studiengang +"','"
						+ Studienbeginn +"','"
						+ mail +"','"
						+ Geschlecht +"');");
							
		} catch (SQLException e) {
			System.out.println(" Fehler beim anlegen");

oder geht das auch nicht? wenn ja wieso?

danke
 
T

tachchen

Gast
SamHotte hat gesagt.:
anders gesagt: in deiner Codezeile 4 müssen die Spaltennamen der Datenbanktabelle stehen.



ja das sind die Spaltennamen, aber nicht alle, denn die erste Spalte hab ich als userID angegeben. Ich muss ja nicht alle Spaltennamen angeben oder?
 

SamHotte

Top Contributor
Es kann sein, dass in den Werten ein Zeichen vorkommt, das dir das SQL-Statement zerschießt - besser benutzt du ein PreparedStatement für sowas.

Hmm, die genaue Fehlermeldung könnte jetzt helfen. Lass dir vielleicht im catch-Block mit 'e.getMessage()' mal den genauen Grund sagen.
 
T

tachchen

Gast
SamHotte hat gesagt.:
Es kann sein, dass in den Werten ein Zeichen vorkommt, das dir das SQL-Statement zerschießt - besser benutzt du ein PreparedStatement für sowas.

Hmm, die genaue Fehlermeldung könnte jetzt helfen. Lass dir vielleicht im catch-Block mit 'e.getMessage()' mal den genauen Grund sagen.


die Fehlermeldung lautet nun:


Fehler beim anlegen des Datensatzes
java.sql.SQLException: General error
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcStatement.execute(Unknown Source)
at bean.DBBean.neuenDatensatzAnlegen(DBBean.java:96)
at bean.TestDB_Student.main(TestDB_Student.java:13)

ich hab nun die paltennamen in feste Strings geändert, da ja die Feldnamen fest sein müssen..

also die Methide sieht nun so aus:

Code:
public void neuenDatensatzAnlegen(String name,String Studiengang,String Studienbeginn,
			String mail,String Geschlecht){

		
		try {
				
				conn.createStatement().execute(
						"Insert Into student(name,Studiengang,Studienbeginn,mail,Geschlecht)"+
						" Values"+
						"('"
						+ name +"','"
						+ Studiengang +"','"
						+ Studienbeginn +"','"
						+ mail +"','"
						+ Geschlecht +"');");
				
	
		} catch (SQLException e) {
			System.out.println(" Fehler beim anlegen des Datensatzes");
			
			e.getMessage();
			e.getNextException();
			e.printStackTrace();
			e.getErrorCode();
			e.getStackTrace();
			
		}
		
		
		
		
	}
 

SamHotte

Top Contributor
- ist der Primärschlüssel schon vergeben?
- wie heißen denn die Spalten?
- Statement wird nicht geschlossen.
 
T

tachchen

Gast
SamHotte hat gesagt.:
- ist der Primärschlüssel schon vergeben?
- wie heißen denn die Spalten?
- Statement wird nicht geschlossen.

Primärschlüssel ist userID

erste Spalte ist userID, die restlichen sind wie in der Methode.

Statement schließe ich wie? conn.close() ?
 

Leroy42

Top Contributor
stmt.close()
conn.close() kommt später.

Bin jetzt seit einer Woche dabei selbst mit Datenbanken zu hantieren, und da mir die
SQL-Syntax noch nicht in Fleisch und Blut übergegangen ist und ich selbst noch
über so manche Kleinigkeiten stolpere, mache ich folgendes:

1. Deinen SQL-String zusammenbasteln und per System.out erstmal ausgeben und anschauen.

2. Weiterhin habe ich mir eine kleine JSP-Seite geschrieben, über die ich SQL.Abfragen und
-Befehle direkt verschicken kann.

Punkt 1 solltest du auf jeden Fall beherzigen und uns evtl. den SQL-String posten.
 

SamHotte

Top Contributor
Grundidee beim Insert:

Code:
    String sql = "INSERT INTO meinetabelle(spalte1,spalte2) VALUES (?, ?)";
    PreparedStatement pstmt = null;
    try {
      pstmt = meineConnection.prepareStatement(sql);

      pstmt.setString(1, "Wert für spalte1");
      pstmt.setString(2, "Wert für spalte2");
      int rows = pstmt.executeUpdate();
      if (rows == 1) {
        // eine Zeile eingefügt, genau wie geplant
        System.out.println("Hat geklappt.");
      }
      else {
        System.err.println("Hat nicht geklappt.");
      }
    }
    catch (SQLException e) {
      System.err.println("Fehler: " + e.getMessage());
    }
    finally {
      try {
        pstmt.close();
      }
      catch (SQLException e) {
        System.err.println("Fehler: " + e.getMessage());
      }
    }
 

Leroy42

Top Contributor
SamHotte hat gesagt.:
Es kann sein, dass in den Werten ein Zeichen vorkommt, das dir das SQL-Statement zerschießt - besser benutzt du ein PreparedStatement für sowas

Da bin ich auch schon drüber gestolpert. :(

Wegen Java benutze ich für SQL-Statements als Zeichenbegrenzung single quotes.
Da muß ich diese selbst verdoppeln, kann aber double quotes direkt benutzen.
Fragen:

1. Brauche ich mich mit preparedStatements darum nicht zu kümmern? Kann ich also
einfach schreiben:

Code:
pstmt.setString("Mal ein Quote \' und ein double quote \"");

2. Gibt es außer den Anführungszeichen noch andere spezielle Zeichen auf die
ich achten muß? Zum Beispiel können bei Formulareingaben ja auch newlines vorkommen.
 

SamHotte

Top Contributor
Gute Frage, so genau kann ich das auch nicht sagen, da ich immer die Daten aus irgendwelchen Textfeldern meinen Stringsvariablen zuweise und von dort in die Datenbank schreibe - ich bau die SQL-Statements nicht im Code zusammen.

Newlines sind bei mir kein Problem, weder beim einlesen noch beim 'rausscheiben, hab Memofelder in meiner Access-DB und befülle die regelmäßig mit sowas. Echte Anführungszeichen (") stehen definitiv auch in der Datenbank und die preparedStatements funzen. Im Zweifel einfach mal ausprobieren.

Das einzige, was nicht klappt hier, ist das schreiben von NULL. Da weiß ich aber nicht, ob das an Access liegt oder an Java.
 
T

tachchen

Gast
So ich bin dem Prblem nun näher gerückt,

wenn ich folgende Methode aufrufe, und dann erst die INSERT methode aufrufe geht es komischerweise??
:? vielleicht mus ich vorher die Result Klasse aufrufen ? oder an was liegt da??

hier die andere Methode:

Code:
public void alleDatenInListe(){
		
	try {
		
		liste=new LinkedList();
		
		st = conn.createStatement();
		rs =st.executeQuery("SELECT * FROM student;");
		
		while (rs.next()) {
			
			
			name = rs.getString("name");
			Studiengang = rs.getString("Studiengang");
			Studienbeginn = rs.getString("Studienbeginn");
			mail = rs.getString("mail");
			Geschlecht = rs.getString("geschlecht");
                            
			liste.add(name+" "+Studiengang+" "+Studienbeginn+" "+mail+" "+Geschlecht);

		}
		
		} catch (Exception e) {
		System.out.println("Fehler beim Listeneintrag aus der DB	" + e.getMessage() );
	}	
		
	}

oder muss man vorher erst eine Abfrage durchführen? versteh nicht woran es liegt
 

SamHotte

Top Contributor
Vllt. ist irgendwo noch ein Statement, das du nicht schließt? Ich würde immer einen finally-Block anhängen (in deinem Code grad an Zeile 26), in dem "st.close()" steht. Zumindest war das neulich in 'nem anderen Zusammenhang die Fehlerquelle - da wurden nur 9 Datensätze eingefügt, obwohl die Schleife 10-mal lief; lag damals am fehlenden .close().
 

personenkult

Aktives Mitglied
Normalerweise macht ein vergessenes close() keine Probleme. Versuch mal anstatt dem execute ein executeUpdate zunehmen. Bei Update, Insert usw. muss man darauf achten die richtige Methode aufzurufen.

executeUpdate = Insert, Update etc.
executeQuery = Select etc.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Problem mit h2 DB Insert Befehl Java Basics - Anfänger-Themen 6
E Pervasive PSQL insert funktion geht nicht Java Basics - Anfänger-Themen 9
E Mysql Update wenn es nicht existiert insert Java Basics - Anfänger-Themen 14
E Insert() Java Basics - Anfänger-Themen 12
C Erste Schritte Insert Into klappt nicht Java Basics - Anfänger-Themen 6
P Schleife für insert() und delete() im StringBuilder in Verbindung mit indexOf() Java Basics - Anfänger-Themen 7
A Android Datenbank gaaanz einfaches Insert geht nicht - warum? Java Basics - Anfänger-Themen 4
F Methoden Insert Sort Fehler Java Basics - Anfänger-Themen 10
M AutoID auslesen nach INSERT Java Basics - Anfänger-Themen 8
I Problem mit H2-DB Insert-Statement Java Basics - Anfänger-Themen 3
C SELECT klappt INSERT klappt nicht!!!??? Java Basics - Anfänger-Themen 3
M Nodes/LinkedList und insert funzt net Java Basics - Anfänger-Themen 9
V Problem mit Insert-Methode des Binärbaums Java Basics - Anfänger-Themen 4
M Insert into klappt nicht? Java Basics - Anfänger-Themen 7
V Insert into klappt nicht so ganz Java Basics - Anfänger-Themen 6
W sql "Insert into" funktioniert nicht Java Basics - Anfänger-Themen 5
I JTextArea insert Methode Java Basics - Anfänger-Themen 5
L INSERT Statement geht nicht HILFE! Java Basics - Anfänger-Themen 2
L hsqldb INSERT - Unexpected token Java Basics - Anfänger-Themen 2
G String.insert an unbekannter Stelle Java Basics - Anfänger-Themen 5
S Listen - insert - print etc. Dringend! Bitte! Java Basics - Anfänger-Themen 6
X wie bekomme ich durch Eingabeaufforderung definierte double in einen Befehl, welcher 3 erwartete double braucht? Java Basics - Anfänger-Themen 3
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
Viktor A. Kaiser Ampelschaltung mit if-Befehl Java Basics - Anfänger-Themen 11
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
Lion.King switch-Befehl Java Basics - Anfänger-Themen 6
sserio Math. Befehl wird rot markiert Java Basics - Anfänger-Themen 5
F Terminal Windows per Befehl schließen? Java Basics - Anfänger-Themen 9
Y Wie kann man überprüfen, ob bei einem Print Befehl tatsächlich etwas geprintet wurde? Java Basics - Anfänger-Themen 4
H Befehl wird nicht ausgeführt - System.out.println Java Basics - Anfänger-Themen 3
A Scanner Befehl Java Anfänger Java Basics - Anfänger-Themen 8
K Subklassen mit einzigem Befehl addieren Java Basics - Anfänger-Themen 6
F cmd Befehl ausführen Java Basics - Anfänger-Themen 4
S Datenbank Befehl nach Login Java Basics - Anfänger-Themen 5
D Input/Output Befehl aus Benutzereingabe herausfiltern Java Basics - Anfänger-Themen 12
T if else Befehl funktioniert nicht richtig Java Basics - Anfänger-Themen 27
N Javac -version der Befehl ist entweder falsch geschrieben oder...... Java Basics - Anfänger-Themen 8
O Methoden Runtime.getRuntime().exec(befehl); Java Basics - Anfänger-Themen 6
L Ist an diesem Befehl irgendwas falsch? Java Basics - Anfänger-Themen 2
F Wieso wird dieser Befehl nicht ausgeführt? (Anfänger) Java Basics - Anfänger-Themen 2
B Copy Paste Befehl Java Basics - Anfänger-Themen 6
O String: Befehl und Wert erkennen. Java Basics - Anfänger-Themen 4
D Erste Schritte Zuul - 2ten Befehl einführen Java Basics - Anfänger-Themen 68
D Erste Schritte Befehl back implementieren Java Basics - Anfänger-Themen 18
elischa unbekannter Befehl zur Compilezeit Java Basics - Anfänger-Themen 22
B Befehl um ein Befehl abzubrechen Java Basics - Anfänger-Themen 2
M Classpath Befehl zum Kompilieren um die Option classpath erweitern. Java Basics - Anfänger-Themen 5
F Konsolen Befehl ausführen und Rückgabe auswerten Java Basics - Anfänger-Themen 3
S Befehl current: Java Basics - Anfänger-Themen 3
Silvascus Void Methode einem Stringparameter im syso-Befehl hinzufügen Java Basics - Anfänger-Themen 3
slejden Erste Schritte der Befehl import Java Basics - Anfänger-Themen 2
C OOP array Sortieren ohne den sort Befehl Java Basics - Anfänger-Themen 10
J Problem WIE ohne Goto-Befehl lösbar? Java Basics - Anfänger-Themen 6
N Benötige eine Alternative für einen GOTO Befehl Java Basics - Anfänger-Themen 2
O CMD Befehl javac Java Basics - Anfänger-Themen 3
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
D Klassenmethode: Befehl erkennen, dann int zurückgeben Java Basics - Anfänger-Themen 2
C Desktopiconwechsel ohne Befehl Java Basics - Anfänger-Themen 0
V Schlüsselworte Befehl Ignorieren? Java Basics - Anfänger-Themen 10
B JDK installieren Befehl java funktioniert nicht Java Basics - Anfänger-Themen 15
J Variablen Auf der suche nach einem Befehl Java Basics - Anfänger-Themen 2
M Frage zum return; Befehl Java Basics - Anfänger-Themen 1
C CMD Befehl + Variable im Java-Code ausführen Java Basics - Anfänger-Themen 8
S Methoden auf befehl ausführen Java Basics - Anfänger-Themen 7
iB0T Eine Art Goto Befehl! Java Basics - Anfänger-Themen 27
H Exit Befehl in eigener Konsole Java Basics - Anfänger-Themen 9
D Erste Schritte bash-Befehl mit Swing ausführen Java Basics - Anfänger-Themen 8
A Schlüsselworte Befehl this Java Basics - Anfänger-Themen 8
E CMD Befehl über Java ausführen? Java Basics - Anfänger-Themen 4
E Warum wird Methode nicht durch return-Befehl beendet? Java Basics - Anfänger-Themen 3
D Hilfe zu Java Befehl In.open Java Basics - Anfänger-Themen 2
B Javadoc-Befehl unter Ubuntu Java Basics - Anfänger-Themen 2
I Befehl/Methode "los()" Java Basics - Anfänger-Themen 17
A Befehl gesucht....wie komme ich an Folgendes Objekt? Java Basics - Anfänger-Themen 6
I Return Befehl in Methode Java Basics - Anfänger-Themen 13
K Befehl per Shell an Java-Applet JAR übergeben Java Basics - Anfänger-Themen 16
S javac Befehl Java Basics - Anfänger-Themen 7
C Befehl zum Verlassen einer Schleife Java Basics - Anfänger-Themen 27
W Befehl ausführen bei Mausklick + gedrückte Strg-Taste Java Basics - Anfänger-Themen 2
B Befehl mit Priorität aufrufen Java Basics - Anfänger-Themen 4
I Befehl wird erst nach dem Ausführen einer Funktion ausgeführt Java Basics - Anfänger-Themen 4
B Befehl für vorselektierten Radiobutton Java Basics - Anfänger-Themen 2
H if-Befehl mit Buttongroup Java Basics - Anfänger-Themen 9
B assert befehl in netbeans Java Basics - Anfänger-Themen 3
M Objekto.Programm. Return-Befehl Java Basics - Anfänger-Themen 4
F Kann String in Befehl wandeln? Java Basics - Anfänger-Themen 12
F Simpler DrawLine - Befehl!? Java Basics - Anfänger-Themen 9
M Befehl zum Einlesen von Benutzereingaben Java Basics - Anfänger-Themen 1
M Befehl zum Fenster schließen? GUI Java Basics - Anfänger-Themen 3
L Do while Befehl verkürzen? Java Basics - Anfänger-Themen 16
-horn- Befehl an CMD übergeben Java Basics - Anfänger-Themen 15
A [Fehlermeldung]Sleep-Befehl Java Basics - Anfänger-Themen 4
B Befehl "javac" wird nicht erkannt Java Basics - Anfänger-Themen 14
S Befehl "javac" funktioniert und Windows 7 nicht? Java Basics - Anfänger-Themen 3
K Terminal Befehl mit Java unter Mac ausführen Java Basics - Anfänger-Themen 18
L Java Persistence API - Update Befehl? Java Basics - Anfänger-Themen 5
X Befehl import Java Basics - Anfänger-Themen 21
Antoras Explizite Typenumwandlung in einem Befehl Java Basics - Anfänger-Themen 3
A Button einen Befehl zuordnen Java Basics - Anfänger-Themen 7
N suche Datums befehl Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben