我想知道如何将内容从texfile导入数据库(javaDB)。这是我的代码,但是我在执行时收到错误。我还想声明该表的主键是自动递增的。
CALL SYSCS_UTIL.SYSCS_IMPORT_TABLE
(null,'EXPENDITURE','C:\Users\Me\Desktop\textforimport.txt',null,null,null,0);
// This is my import code
//这是我的错误
Executed successfully in 0.003 s.
Line 1, column 1
Error code 30000, SQL state 38000: The exception 'java.sql.SQLException:
Attempt to modify an identity column 'EXPENDITURE_ID'.' was thrown while evaluating an expression.
Error code 99999, SQL state 42Z23: Attempt to modify an identity column 'EXPENDITURE_ID'.
Line 4, column 1
Execution finished after 0.003 s, 1 error(s) occurred.
//创建表的代码
create table Expenditure (
Expenditure_ID integer not null primary key generated always as identity (start with 1,increment by 1),
Expenditure_Description varchar (75) not null,
Expense double not null,
Expense_Date date not null
);
现在我不是java的专家,但我想知道是否有人打电话帮助我。我会很感激。感谢
答案 0 :(得分:2)
只需将支出_ID 的声明更改为“默认为默认生成”,
GENERATED BY DEFAULT的标识列只会递增 当没有显式值时,使用插入时的默认值 给出。与GENERATED ALWAYS列不同,您可以指定特定列 要使用的insert语句中的值而不是生成的值 默认值。 source
答案 1 :(得分:0)
我的猜测是这是一个简单的SQL问题,而不是java问题。
由于 Expenditure_ID 列创建为“始终以身份生成的主键”,因此javaDB会自动为您生成。并且,当您尝试操作标识列时,您将收到尝试修改标识列错误。
您可以尝试两种方法:
1)从 textforimport.txt 中删除列/数据 Expenditure_ID 。只需导入支出_说明,费用和费用_Date 即可。正如我所说,javaDB将为每一行分配一个ID。
<强> 或 强>
2)如果您需要自己定义支出_ID ,请更改支出表中的支出_ID 列。尝试仅使用“ integer not null ”(没有主键内容)创建它。