Pregunta

I want to add a dataset into my MS Acces Database. But I always get a Syntax Error in the SQL Statements exactly at the executeUpdate Statement. If someone could help me, that would be great.

Here you can see the Error:

java.sql.SQLException: [Microsoft][ODBC-Treiber für Microsoft Access] 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.SQLExecute(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeUpdate(Unknown Source)
at verwaltung.ListenerRegistrieren.addBenutzer(ListenerRegistrieren.java:47)
at verwaltung.ListenerRegistrieren.actionPerformed(ListenerRegistrieren.java:28)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

And this is the code which the Error is based on. It is in the executeUpdate() - Statement :

try {

    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    Connection conn = DriverManager.getConnection("jdbc:odbc:MSAccess");
    PreparedStatement pstm;
    pstm = conn.prepareStatement("Insert Into Benutzer (Benutzername, Vorname, Nachname, E-Mail) values (?,?,?,?)");

    // SQL Statements
    pstm.setString(1, gui.benutzername.getText());
    pstm.setString(2, gui.vorname.getText());
    pstm.setString(3, gui.nachname.getText());
    pstm.setString(4, gui.email.getText());
    pstm.executeUpdate();

    } catch (Exception e) {
        e.printStackTrace();
    }

I can't find the Syntax Error! Can someone help me?

thank you

¿Fue útil?

Solución

The E-Mail column has a hyphen in it, you should escape it. See this answer for how to do that : Dash in a field name in access database table

Otros consejos

You need to add the values of all the columns in your table, else java JDBC will throw and error.

If you have a table users with 2 columns username and password your code will look as follow for your prepareStatement.

pstm = conn.prepareStatement("Insert Into users values ('YourName', 'Password')");

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top