MySQL Eingabe wird nicht übernommen...

Dimadon

Aktives Mitglied
Servus,

habe eine kleine GWT Applikation wo Daten nach der Eingabe in eine Datenbank übernommen werden sollen. Manuell hat dies super funktioniert nur jetzt stehe ich irgendwie auf dem Schlauch...Ich hoffe einer von euch sieht meinen Fehler 🙁

Die GWT Buttons wurden so implementiert:
Java:
private void registrieren() {
		panel.clear();
		final TextBox vorname = new TextBox();
		vorname.setText("'Vorname'");
		panel.add(vorname);
		final TextBox nachname = new TextBox();
		nachname.setText("'Nachname'");
		panel.add(nachname);
		final TextBox nickname = new TextBox();
		nickname.setText("'Nickname'");
		panel.add(nickname);
		Button reg = new Button("Registrieren");
		panel.add(reg);


Die eingegeben Daten werden mit der Methode:
Java:
public void onClick(ClickEvent event) {
String vnam = vorname.getText();
String nanam = nachname.getText();
String niname = nickname.getText();		
pinnwandVerwaltung.createUser(vnam, nanam, niname, new CreateUserCallback());
}

übergeben.

An die Methode:
Java:
	public User createUser(String vorname, String nachname, String nickname) throws IllegalArgumentException {
		
		User u = new User();
		u.setNachname(nachname);
		u.setVorname(vorname);
		u.setNickname(nickname);
		u.setId(1);
		
		return this.uMapper.insert(u);
		
	}

Der Mapper soll dann die Daten eintrage:
Java:
  public User insert(User u) {
    Connection con = LocalDBConnection.connection();
    try {
      Statement stmt = con.createStatement();

      ResultSet rs = stmt.executeQuery("SELECT MAX(id) AS maxid "
          + "FROM users ");
      if (rs.next()) {
        
        u.setId(rs.getInt("maxid") + 1);

        stmt = con.createStatement();

        stmt.executeUpdate ("INSERT INTO users(id, vorname, nachname, nickname)"
            + "VALUES  (" + u.getId() + "," + u.getVorname() + ","
            + u.getNachname() +  "," + u.getNickname()+ ")");
           }
    }
    catch (SQLException e) {
      e.printStackTrace();
    }
    return u;
    }

Ich hoffe jemand sieht welchen Fehler ich gemacht habe. Ich bekomme als Fehlermeldung: Unkown Colum. Weiß zwar was das ist jedoch nicht wo mein Fehler liegt.
 
Soweit ich mich nicht irre, sollte der Fehler unknown column von der Datenbank kommen, also ein SQL-Fehler. Vielleicht gibt es eine Tabelle nicht, oder wird anders geschrieben.
 
Danke für den Hinweiß. Das Problem ist bei einer Eingabe von Vorname, Nachname, Nickname bekomme ich keinen Fehler. Es wird aber nur ein leerer Datensatz in die Datenbank eingetragen. Beim modifizieren der Eingabe also zum Beispiel: Vorname= Jens etc.... passiert nichts und ich bekomm den Fehler. Das heißt das Programm sucht die Spalte Jens. Die ist aber logischer Weiße nicht da. Ich möchte ja den Namen in die Spalte Vorname eintragen.

Also habe ich irgendwo einen Fehler im Code, aber leider weiß ich nicht wo...
 
Wie kiwara schon sagt kommt dieser Fehler, weil auf der Datenbank etwas nicht gefunden wurde.

Soweit ich mich nicht irre, sollte der Fehler unknown column von der Datenbank kommen, also ein SQL-Fehler. Vielleicht gibt es eine Tabelle nicht, oder wird anders geschrieben.

In diesem Fall glaube ich einfach das du dich bei einem Spaltennamen verschrieben hast. Aber ohne deine DB Struktur zu kennen können wir hier wenig sagen.

In so einem Fall ist es auch immer gut die Exception inkl StackTrace zu posten!
 
Ja das ist mir bewusst. Aber so wie ich das sehe (anhand verschiedener Eingaben) weiß das Programm nicht das es die Eingabe bei Vorname in die Spalte Vorname schreiben soll.

Wenn ich nichts eingebe also die die Boxlabel wie Vorname stehen lassen wird ja ein Datensatz übernommen nur aber eben ein leerer....
 
Zuletzt bearbeitet:
Gut, ich weiß nicht ob das Funktioniert, aber versuche mal das:

Java:
stmt.executeUpdate ("INSERT INTO users(id, vorname, nachname, nickname)"
            + "VALUES  (" + u.getId() + ",'" + u.getVorname() + "','"
            + u.getNachname() +  "','" + u.getNickname()+ "')");
           }

Vielleicht erkennt die Datenbank die Namen nicht als String und hat deswegen einen Fehler.
 
Mir kommt es erst jetzt: wieso machst du in registrieren() lokale TextBox-Variablen?
Zweitens wäre es hilfreich wenn du uns mehr über den Fehler-Output sagst.
Unknown Source ist zwar eines, aber in welcher Methode wird der Fehleraufgerufen?
 
Ich habe die TextBox so angelegt...Meinst du es hat was damit zu tun?

Der komplette Fehler sieht wie folgt aus:
Java:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'xxx' in 'field list'
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
	at com.google.appengine.tools.development.agent.runtime.Runtime.newInstance_(Runtime.java:127)
	at com.google.appengine.tools.development.agent.runtime.Runtime.newInstance(Runtime.java:135)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
	at com.mysql.jdbc.Util.getInstance(Util.java:384)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4232)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4164)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2615)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2776)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2832)
	at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1755)
	at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1679)
	at .server.db.UserMapper.insert(UserMapper.java:130)
	at .server.PinnwandVerwaltungImpl.createUser(PinnwandVerwaltungImpl.java:132)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:115)
	at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561)
	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:265)
	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:305)
	at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
	at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:127)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
	at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
	at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
	at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:491)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.Server.handle(Server.java:326)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
 
Danke das du uns die Lösung nicht mitteilst, damit andere mit ähnlichen Problemen wieder einen Thread aufmachen müssen! 🙂
 
Sorry, war ziemlich spät als ich die Lösung des Problems herausgefunden habe. Im Prinzip haben mir die Hochkommas in der SQL Syntax den Weg geebnet. Hierdurch wurde die Eingabe korrekt übermittelt. Falls Fragen da sind bitte melden.🙂
 

Neue Themen


Zurück
Oben