SQL Statement: executeUpdate

Status
Nicht offen für weitere Antworten.

sonic29

Mitglied
Hallo,

ich bin mittlerweile ein wenig am verzweifeln an einem SQL Statement. Der Tabelle event soll eine neue Zeile eingefügt werden. Am besten poste ich die komplette doPost Methode, damit man den möglichen Fehler am besten findet.
Das Einfügen einer Zeile im DBMS klappt wunderbar. Es wird eine SQL Exception geworfen an folgender Stelle:

Java:
stmt2 = con.createStatement();
            stmt2.executeUpdate("INSERT INTO events(event_id, datum, name, infotext, wo, in, foto) VALUES(" + eventid_neu + ", '" + datum_ts + "', '" + name + "', '" + infotext + "', '" + wo + "', '" + in + "', 0)");
            stmt2.close();

Nun die komplette doPost Methode:

Java:
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();
        String sparte_aktuell = session.getAttribute("sparte").toString();
        Ordner ordner = new Ordner();
        String ordner_aktuell = ordner.ordner_finden(sparte_aktuell);
        String name = request.getParameter("name");
        String infotext = request.getParameter("text");
        String datum_eingabe = request.getParameter("datum");
        datum_eingabe = datum_eingabe.replaceAll("-", ".");
        String_to_date std = new String_to_date();
        java.util.Date datum = std.cast_string_date(datum_eingabe);
        java.sql.Timestamp datum_ts = new java.sql.Timestamp(datum.getTime());
        String in = request.getParameter("in");
        String wo = request.getParameter("wo");
        //Verbindung mit der Datenbank herstellen
        Connection con = DBVerbindung.getConnection();
        Statement stmt;
        Statement stmt2;
        try {
            int eventid_max = 0;
            int eventid_neu = 0;
            stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT MAX(event_id) FROM events");
            rs.next();
            eventid_max = rs.getInt(1);
            eventid_neu = eventid_max + 1;
            stmt.close();       
            stmt2 = con.createStatement();
            stmt2.executeUpdate("INSERT INTO events(event_id, datum, name, infotext, wo, in, foto) VALUES(" + eventid_neu + ", '" + datum_ts + "', '" + name + "', '" + infotext + "', '" + wo + "', '" + in + "', 0)");
            stmt2.close();
            response.sendRedirect(ordner_aktuell + "/foto_upload.jsp?e" + eventid_neu);
        } catch (SQLException e) {
            response.sendRedirect(ordner_aktuell + "/index.jsp");
        } finally {
            try {
                if (con != null) {
                    con.close();
                }
            } catch (SQLException exc) {
            }
        }
    }

Findet jemand einen/den Fehler? Schonmal vielen Dank für die Hilfe.

Viele Grüße
 

sonic29

Mitglied
Die SQL Exception wird abgefangen. Die Anwendung geht in den catch Block rein und ruft folgenden Befehl auf:

Java:
response.sendRedirect(ordner_aktuell + "/index.jsp");

Leitet sozusagen auf die Startseite weiter...
 

XHelp

Top Contributor
Dann logg die Exception, schmeiß die weiter, gib die aus... was auch immer. Nur den Namen der Exception zu kennen ist nur die halbe Miete
 

r.w.

Bekanntes Mitglied
Hallo sonic29,

ohne die Exception kann man natürlich nur raten.

So könnte z.B. die Spalte event_id die AutoIncrement-Eigenschaft haben. Dann dürftest Du sie nicht mit übergeben.
Zudem würde ich, wenn Du für die Spalte "Foto" nie etwas übergeben möchtest, auch diese aus der Auflistung entfernen.

Ist aber, wie gesagt, nur geraten. Mehr kann man aus der geworfenen Exeption entnehmen.

VG ROlf
 

sonic29

Mitglied
Ich wollte jetzt mal die exception ausgeben lassen:
Java:
} catch (SQLException e) {
            e.printStackTrace();
        }

Als ergebnis wird mir eine komplett weiße (leere) seite angezeigt. die url hat den pfad des bereits geposteten servlets. Hilft mir jetzt überhaupt nicht weiter, aber vllt euch?

Grüße
 

sonic29

Mitglied
okay, schonmal viele Dank für den Tipp.
Ich bekomme nun den folgenden Fehler ausgegeben:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'in, foto) VALUES(1, '2011-04-20 23:11:00.0', 'dh', 'yhd', 'yh', 'yh', 0)' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.Util.getInstance(Util.java:381)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2536)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1564)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1485)
at eventpackage.fussball.Neuer_event.doPost(Neuer_event.java:76)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:879)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:662)


Habt ihr ne Ahnung, was ich falsch mache?
 

sonic29

Mitglied
Problem gelöst.
Es lag daran, dass Attribut "in" ein SQL-Schlüsselwort darstellt. Habe nun einen anderen Namen für die Spalte benutzt und es funktioniert.

Schönen Abend noch und vielen Dank...
 

XHelp

Top Contributor
Steht doch da: You have an error in your SQL syntax;
Du hast übrigens den SQL-Befehl nicht, wie du es geschrieben hast, ausprobiert, sonst würdest du es merken, dass es auch so nicht klappt. Das liegt daran, dass du ungeschickt die Spaltennamen gewählt hast.
Code:
IN
ist ein Schlüsselwort, also musst du es entweder umbenennen oder escapen:
SQL:
INSERT INTO events(event_id, datum, name, infotext, wo, `in`, foto) ...
 
Zuletzt bearbeitet:

5474n

Mitglied
Hallo,

habe ein ähnliches Problem wie oben erwähnt,
Es wird bei mir keine Exception geworfen, mein Problem ist aber, dass sich nach über 10 Minuten Ladezeit immer noch nichts tut und sich teilweise mein Browser oder Eclipse (Programmiere mit Eclipse Indigo EE und Java 7) aufhängt.
Kann ich über diese Methode, meine Datenbank Updaten.
Mit Insert funktioniert die Methode, will aber nicht dass immer alle Objekte neu in die Datenbank geschrieben, sondern ausschließlich Aktualisiert wird .
Gibt des sonst noch eine bessere Variante?

Java:
public static void saveDatabase(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException
	{
		PrintWriter out = response.getWriter();

		

		Connection connect = null; //Verbindung erstellt und als null intialisiert
		Statement statm = null; //Aussage objekt
		ResultSet res = null; //Ergebnis Obejekt wird erstellt

		try
		{
			connect = getConnection(); // Connection initalisierung
			statm = connect.createStatement(); //Statement initalisierung

			int iFach = 0;
			String sTyp = "";
			String sinterpret = "";
			String stitel = "";
			String sgenre = "";
			String skaufdatum = "";

			for (int a = 0; a < DatenVector.DatenStaender.capacity(); a++)
			{
				if (DatenVector.DatenStaender.elementAt(a) != null)
				{

					iFach = DatenVector.DatenStaender.get(a).getiFachangabe();
					sinterpret = DatenVector.DatenStaender.get(iFach).getsInterpret();
					stitel = DatenVector.DatenStaender.get(iFach).getsTitel();
					sgenre = DatenVector.DatenStaender.get(iFach).getsGenre();
					skaufdatum = DatenVector.DatenStaender.get(iFach).getsKaufdatum();
					Traeger dt = DatenVector.DatenStaender.get(iFach);

					if (dt instanceof CD)
					{
						sTyp = "CD";
					}
					if (dt instanceof DVD)
					{
						sTyp = "DVD";
					}
					String sql = ("Update sh_regal set fach = '" + iFach + " ', typ = '" + sTyp
						+ "', interpret = ' " + sinterpret + " ',titel = '" + stitel + "',genre =' " + sgenre
						+ "',kaufdatum=' " + skaufdatum + "'");

					//für Abfragen stmt.executeQuery
					//für Datenmanipulation (update,delete) stmt.executeUpdate

					statm.executeUpdate(sql);

				}
			}
			out.println("Datentraeger wurde in Datenbank geschrieben");
		}
		catch (ClassNotFoundException e)
		{
			handleException(e, "DB driver class not found"); //Exception Handlind
		}
		catch (SQLException e)
		{
			handleException(e);
		}
		finally
		{
			closeConnection(connect, statm, res);
			out.println("<form method='GET' action='" + "" + "/CDVerwaltung/Startseite'>"); // Button!
			out.println("<input type=SUBMIT value=\"Startseite\">\n" + "</form>\n");
		}
 

5474n

Mitglied
Habe es nun so gelöst, das ich vor dem Speichern mit
SQL:
INSERT INTO sh_regal..
eine Methode aufrufe, die zuvor erstellte Datensätze aus der Datenbank wieder löscht
SQL:
Delete sh_regal
einen anderen Lösungsweg habe ich nicht gefunden.
 
S

SlaterB

Gast
ich habe dieses Thema bzw. dein Anhängsel darin übrigens erst jetzt bei deinem zweiten Posting gesehen,
ein eigenes Thema hätte dir sicher mehr Zuschauer gebracht/ bringt vielleicht noch falls noch irgendwas offen ist
 
N

nillehammer

Gast
String sql = ("Update sh_regal set fach = '" + iFach + " ', typ = '" + sTyp
+ "', interpret = ' " + sinterpret + " ',titel = '" + stitel + "',genre =' " + sgenre
+ "',kaufdatum=' " + skaufdatum + "'");
Irgendwie fehlt hier eine WHERE-Clause (irgendsowas wie WHERE id = ...). Ohne diese wird das Update ja auf alle Datensätze angewendet.

Und ansonsten schau Dir mal PreparedStatement an.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T SQL-Statement Datenbank nach SQL Statement schließen? Datenbankprogrammierung 7
Kotelettklopfer SQLite Verhindern von doppelter Statement Ausführung Datenbankprogrammierung 25
L SQL-Statement SQL Statement doppelte Einträge finden Datenbankprogrammierung 9
C MySQL SQL Statement wir nicht ausgeführt Datenbankprogrammierung 11
G Datenbank Statement Datenbankprogrammierung 22
Dimax Erstellen ResultSet und Statement Datenbankprogrammierung 30
B MySQL Umkreissuche - brauche Hilfe bei SQL Statement Datenbankprogrammierung 12
M CSV Import - Dynamisches SQL Statement Datenbankprogrammierung 15
D Wiederverwendung / Recycling / Queuing von Statement Objekten Datenbankprogrammierung 1
D SQL Statement gesucht... Datenbankprogrammierung 15
J JDBC SQL Statement mit Parameter Datenbankprogrammierung 7
F Dynamischen String in SQL Statement einbinden Datenbankprogrammierung 9
L SQL Statement mit Switch-Case funktioniert nicht Datenbankprogrammierung 6
U PostgreSQL SELECT Statement Datenbankprogrammierung 5
A Problem mit Create-Statement Datenbankprogrammierung 9
LadyMilka MySQL Syntaxfehler im Statement Datenbankprogrammierung 3
A JDBC Prepared Statement Autoincrement Datenbankprogrammierung 3
P SQL-Statement Bei meinem Statement ist ein Fehler? Datenbankprogrammierung 2
P sql statement alter table foreign key Datenbankprogrammierung 4
T sql Statement Datenbankprogrammierung 9
B JDBC MySQL Statement Datenbankprogrammierung 3
A Sql Statement - Alle Zahlen größer 9 Datenbankprogrammierung 3
F Sql Statement Datenbankprogrammierung 12
A SQL-Statement prüfen Datenbankprogrammierung 3
W Statement als Klassenvariable Datenbankprogrammierung 27
I Select-Statement optimieren Datenbankprogrammierung 14
D SQLite Statement nimmt keine Namen aus getter-Methoden Datenbankprogrammierung 11
alex_fairytail MySQL SQL Statement Delete zwischen Datum1 und Datum2 Datenbankprogrammierung 5
M Access Update Statement Fehler update -> unmöglich? Datenbankprogrammierung 3
R Derby/JavaDB LIKE Statement mit Wildcard Datenbankprogrammierung 20
N Update Prepared Statement Fehler bei Argumenten Datenbankprogrammierung 3
R Select Statement als temporärer Table Datenbankprogrammierung 7
R Derby/JavaDB Select Statement Where bedingung will nicht ganz! Datenbankprogrammierung 4
R Derby/JavaDB Select TOP Statement geht nicht Datenbankprogrammierung 3
S Null Pointer exception statement Datenbankprogrammierung 8
R Derby/JavaDB Insert Statement Probleme Datenbankprogrammierung 14
K statement.execute liefert false Datenbankprogrammierung 6
C PostgreSQL Prepared Statement Datenbankprogrammierung 7
N Prepared Statement mit unbekannter Anzahl von Where-Clauses Datenbankprogrammierung 30
F wie funktioniert if Statement in SELECT? Datenbankprogrammierung 2
T MySQL PreparedStatement mit INSERTs langsam, Batch-Statement auch Datenbankprogrammierung 4
M MySQL größere von zwei Zahlen in Update Statement Datenbankprogrammierung 2
J [Hibernate] Select Statement Datenbankprogrammierung 4
S HSQLDB DELETE-Statement funktioniert nicht Datenbankprogrammierung 4
L MySQL Prepared Statement batch langsamer als bulk insert? Datenbankprogrammierung 10
L MySQL Kann Statement nicht erzeugen Datenbankprogrammierung 5
T Komme mit dem SQL Statement nicht weiter Datenbankprogrammierung 5
D MySQL Client - Server: Client verabschiedet sich sobald ich Variablen im SQL Statement verwende Datenbankprogrammierung 9
F Frage zu Prepared Statement Datenbankprogrammierung 2
T java.sql.SQLException: unexpected end of statement Datenbankprogrammierung 2
J SQL-Statement Datenbankprogrammierung 10
U MSSQL Verbindung steht, aber meckert beim Statement Datenbankprogrammierung 2
S executeBatch result immet mit Statement.SUCCESS_NO_INFO Datenbankprogrammierung 4
G Frage zum Insert-Statement Datenbankprogrammierung 2
J JDBC- Statement Ausführung nicht persistent Datenbankprogrammierung 2
A Connection Variable in anderer Klasse verwenden -> statement Datenbankprogrammierung 2
D Problem: Prepared Statement (Insert) funktioniert nicht. Datenbankprogrammierung 3
G Mit Prepared Statement in MDB schreiben Datenbankprogrammierung 7
Z DELETE-Statement Datenbankprogrammierung 6
W Prepared Statement und Verbindungsverlust Datenbankprogrammierung 4
G INSERT-STATEMENT Datenbankprogrammierung 6
alexpetri hsql statement problem Datenbankprogrammierung 3
W invalid sql statement ? Datenbankprogrammierung 3
S Probleme mit statement.close() Datenbankprogrammierung 10
G Wie ein SQL-Statement zusammensetzen? Datenbankprogrammierung 5
T Select Statement auf Relation Datenbankprogrammierung 3
S Connection/Statement/ResultSet auf einmal geschlossen Datenbankprogrammierung 8
G MsSQL | Statement.execute(String s) Datenbankprogrammierung 3
W Prepared Statement mehrere Zeichenketten Datenbankprogrammierung 4
G Keine Aussicht mit Prepared Statement Datenbankprogrammierung 10
G Für jede SQL-Abfrage eigenes Statement und ResultSet? Datenbankprogrammierung 3
C Statement/Connection SQLWarning Datenbankprogrammierung 4
J sql-statement Datenbankprogrammierung 7
G Update Statement automatisch unterteilen lassen Datenbankprogrammierung 3
P Prepared Statement scheint nicht zu funktionieren Datenbankprogrammierung 14
T SQL-Statement parser? Datenbankprogrammierung 11
N Prepared Statement Datenbankprogrammierung 8
G Problem mit Suchen Statement Java und MS-SQL-Server Datenbankprogrammierung 9
J SELECT-Statement Datenbankprogrammierung 4
S Statement.getGeneratedKeys() funktioniert nicht Datenbankprogrammierung 4
G Problem mit Delete-Statement Datenbankprogrammierung 3
L mehrere Abfragen mit einem Statement!? Datenbankprogrammierung 5
E Problem mit create-Statement Datenbankprogrammierung 5
E SQL-Statement um eine Nummer in der Datenbank zu suchen Datenbankprogrammierung 3
W HSQLDB executeUpdate funktioniert nicht Datenbankprogrammierung 20
N executeUpdate "innerhalb" eines Resultsets Datenbankprogrammierung 14
Guybrush Threepwood PreparedStatement: execute() oder executeUpdate() Datenbankprogrammierung 3
S Insert into , executeupdate oder executequery Datenbankprogrammierung 3
B executeUpdate Problem Datenbankprogrammierung 2
E executeUpdate() funktioniert auf einmal nicht Datenbankprogrammierung 2
J MySQL - executeUpdate - Performance Datenbankprogrammierung 13
F executeUpdate mehrmals Datenbankprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben