生成始终作为IDENTITY使用UCanAccess生成不正确的表模式

时间:2018-02-19 12:00:50

标签: sql jdbc ucanaccess

我正在使用JDBC / UCanAccess编写程序,并且我在创建其中一个表时发现,而不是使用DateTime格式创建四个列,它也将相同的格式应用于下一列,取代其他格式:

CREATE TABLE Person (
    Id INT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), 
    Name VARCHAR(40), 
    Surname VARCHAR(40), 
    Card VARCHAR(9), 
    Email VARCHAR(30)
);

CREATE TABLE Place (
    Id INT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), 
    Name VARCHAR(40)
);


CREATE TABLE Activity (
    Id INT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), 
    Name VARCHAR(40) NOT NULL, 
    Description1 VARCHAR(500), 
    Description2 VARCHAR(500), 
    Id_Person INT, 
    Hour_Start DATETIME, 
    Hour_End DATETIME, 
    Date_Plan_Start DATETIME, 
    Date_Plan_End DATETIME, 
    Cost CURRENCY, 
    Sale CURRENCY, 
    Id_Place INT, 
    CONSTRAINT fk_person_activity FOREIGN KEY (Id_Person) REFERENCES Person (Id), 
    CONSTRAINT fk_place_activity FOREIGN KEY (Id_Place) REFERENCES Place (Id)
);

似乎应该完成所有事情,因为它应该达到Date_Plan_End,但创建的表将Cost作为DateTime,Id_Place作为Currency。如果有人能告诉我为什么会这样,我会很感激。

编辑:错误仍然只插入此内容:

CREATE TABLE Activity (
    Id INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), 
    Name VARCHAR(40) NOT NULL, 
    Date_Plan_End DATETIME, 
    Cost CURRENCY, 
    Sale CURRENCY, 
    Id_Place INT, 
    PRIMARY KEY (Id)
);

SQL and outcome

这个问题似乎与GENERATED ALWAYS AS IDENTITY(从1开始,增加1)有关。它的移除阻止了移位的发生,虽然我不知道为什么。

1 个答案:

答案 0 :(得分:0)

  

这个问题似乎与GENERATED ALWAYS AS IDENTITY(从1开始,增加1)有关。它的移除阻止了位移的发生

这是因为... GENERATED ALWAYS AS IDENTITY ...是HSQLDB DDL语法,UCanAccess使用Access SQL DDL语法。因此,而不是

CREATE TABLE Activity (
    Id INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), 
    Name VARCHAR(40) NOT NULL, 
    Date_Plan_End DATETIME, 
    Cost CURRENCY, 
    Sale CURRENCY, 
    Id_Place INT, 
    PRIMARY KEY (Id)
);

你应该使用

CREATE TABLE Activity (
    Id COUNTER PRIMARY KEY, 
    Name VARCHAR(40) NOT NULL, 
    Date_Plan_End DATETIME, 
    Cost CURRENCY, 
    Sale CURRENCY, 
    Id_Place INT
);