Erreur de syntaxe Java SQL dans l'instruction INSERT INTO


Je suis en train d'insérer les données ci-dessous dans un tableau qui comporte les colonnes ID[numéroauto], tapez[texte], de[texte], de[texte], le message[texte] et attachmentLoc[texte]

Donc le numéro automatique est généré je les insère en fournissant les noms de colonne. Quand il s'exécute, la console s'imprime:

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT INTO statement.
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
at sun.jdbc.odbc.JdbcOdbc.SQLExecute(JdbcOdbc.java:3149)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(JdbcOdbcPreparedStatement.java:216)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeUpdate(JdbcOdbcPreparedStatement.java:138)
at MultiEchoServer.saveMessage(MultiEchoServer.java:147)
at ClientHandler.run(MultiEchoServer.java:409)

Le code qui apporte l'erreur est:

try
    {
        String sql = "INSERT INTO Messages (type, to, from, message, attachmentLoc) VALUES(?,?,?,?,?)";     
        PreparedStatement stmt = database.prepareStatement(sql);
        stmt.setString(1, message.getType());
        stmt.setString(2, message.getTo());
        stmt.setString(3, message.getFrom());
        stmt.setString(4, message.getMessage());
        stmt.setString(5, attachmentLoc);
        stmt.executeUpdate();
    }
    catch (SQLException e)
    {
        System.out.println("Could not perform statement");
        e.printStackTrace();
    }

Merci pour votre aide

Author: Ste Prescott, 2012-04-18

3 answers

Vous n'indiquez pas le moteur de base de données que vous utilisez, mais un certain nombre de noms de colonnes (ainsi que le nom de la table) sont probablement des candidats pour les mots réservés. Le plus évident est from.

Vous devrez écrire ces identifiants dans identificateur guillemets qui sont généralement soit le caractère backtick ( ` ) ou les caractères [et ] (selon le moteur):

INSERT INTO `Messages` (`type`, `to`, `from`, `message`, `attachmentLoc`)
  VALUES (?,?,?,?,?);

Ou

INSERT INTO [Messages] ([type], [to], [from], [message], [attachmentLoc]) 
   VALUES (?,?,?,?,?);

La citation n'est requise qu'autour des identifiants qui sont des mots réservés mais l'utiliser autour de tous les identifiants ne fera pas de mal. En outre, aucune raison de ne pas inclure l'espace après les VALEURS et le point-virgule à la fin de l'instruction (bien que la plupart des moteurs n'en aient pas besoin).

 1
Author: Larry Lustig, 2012-04-18 18:36:53

Vous avez besoin d'une syntaxe valide pour l'instruction INSERT. SQL ne comprend pas le point d'interrogation.

Peut-être, vous voulez l'un des éléments suivants:

  • '?'
  • NULL
  • ''

Ou une autre valeur.

Donc, en supposant que les colonnes acceptent des valeurs NULL, vous pouvez utiliser: VALEURS (NULL, NULL, NULL, NULL, NULL)

 0
Author: Gordon Linoff, 2012-04-18 18:10:54

From est un mot réservé, après que cela a été changé en messageFrom il a permis l'insertion dans la base de données.

 0
Author: Ste Prescott, 2013-03-02 00:50:42