错误:在“schedule_id”或其附近出现语法错误

问题描述:

尝试在Eclipse中通过JDBC创建表时,遇到上述“位置:39”错误。错误:在“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"); 
    } 
} 

做了一些测试后,我想通了,这是,说:“” schedule_id VARCHAR(80)COLLATE pg_catalog行。默认,“+”,但我不知道问题是什么。任何帮助将不胜感激。

+3

语法是'create table t(...)',你错过了括号。 –

+0

如果您熟悉的语言的语法看起来很好,并且您正在将字符串传递给您可能不太熟悉的语言,则神秘错误消息很可能在其他语言中 –

除了有关正确的create table语句的注释,您还有一个额外的空间COLLATE pg_catalog. default。请注意,这也是一个无用的陈述,您可以完全删除。

PS:由于复制/粘贴,您在5 varchar字段中有此额外空间。