2017-10-19 18 views
0

Lors de la tentative de création d'une table via JDBC dans Eclipse, une erreur indiquant "Position: 39" s'affiche.ERREUR: erreur de syntaxe à ou près de "schedule_id"

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.Statement; 

public class PostgreSQLJDBC_Create { 
    public static void main(String args[]) { 
     Connection c = null; 
     Statement stmt = null; 
     try { 
     Class.forName("org.postgresql.Driver"); 
     c = DriverManager 
      .getConnection("jdbc:postgresql://localhost:5432/postgres", 
      "postgres", "redacted"); 
     System.out.println("Opened database successfully"); 

     stmt = c.createStatement(); 
     String sql = "CREATE TABLE public.feeding_schedules " + 
        "schedule_id VARCHAR(80) COLLATE pg_catalog. default, " + 
        "feeding_time VARCHAR(80) COLLATE pg_catalog. default, " + 
        "recurrence VARCHAR(80) COLLATE pg_catalog. default, " + 
        "food VARCHAR(80) COLLATE pg_catalog. default, " + 
        "notes VARCHAR(80) COLLATE pg_catalog. default, " + 
        "animalid integer NOT NULL" + 
        "PRIMARY KEY (schedule_id) "; 

     String addConstraint ="alter table public.feeding_schedules "+ 
         "ADD CONSTRAINT feeding_schedule_animalid_fkey FOREIGN KEY "+ 
         "FOREIGN KEY(animalid) "+ 
         "REFERENCES public.animals (animalid) "+ 
         "ON UPDATE NO ACTION "+ 
         "ON DELETE NO ACTION"; 


     stmt.executeUpdate(sql); 
     stmt.executeUpdate(addConstraint); 

     stmt.close(); 

     c.close(); 
     } catch (Exception e) { 
     System.err.println(e.getClass().getName()+": "+ e.getMessage()); 
     System.exit(0); 
     } 
     System.out.println("Table created successfully"); 
    } 
} 

Après avoir fait un peu d'essais, je pensais que ce qu'il était la ligne qui dit « » schedule_id VARCHAR (80) COLLATE pg_catalog. par défaut, "+", mais je ne sais pas quel est le problème. Toute aide serait grandement appréciée.

+3

La syntaxe est 'create table t (...)', il vous manque les parenthèses. –

+0

Si la syntaxe du langage que vous connaissez est correcte et que vous transmettez des chaînes à un langage que vous connaissez moins bien, un message d'erreur mystère est susceptible d'être dans cette autre langue –

Répondre

0

En plus du commentaire sur l'instruction create table appropriée, vous disposez d'un espace supplémentaire dans COLLATE pg_catalog. default. Notez que c'est aussi une déclaration inutile que vous pouvez supprimer complètement. PS: en raison de copier/coller, vous avez cet espace supplémentaire dans les champs varchar.