Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 每个插入的表ID的增量值_Java_Postgresql_Database Design_Servlets_Auto Increment - Fatal编程技术网

Java 每个插入的表ID的增量值

Java 每个插入的表ID的增量值,java,postgresql,database-design,servlets,auto-increment,Java,Postgresql,Database Design,Servlets,Auto Increment,我正在使用PostgreSQL进行所有表的设置。我目前有一个名为comments的表,主键名为comment\u id,它是长度为4的VARCHAR 我有一个表单设置,可以在数据库中插入一个新的注释,但是我不知道如何让我的Javaservlet从它以前的值中获取注释id。例如0001到0002。您不想将VARCHAR用作id列。在postgres中,您可以创建一个序列,然后为每个插入获取该序列的下一个值 基本上,你会做一些 CREATE SEQUENCE mysequence START 10

我正在使用PostgreSQL进行所有表的设置。我目前有一个名为
comments
的表,主键名为
comment\u id
,它是长度为4的
VARCHAR


我有一个表单设置,可以在数据库中插入一个新的注释,但是我不知道如何让我的Javaservlet从它以前的值中获取注释id。例如0001到0002。

您不想将VARCHAR用作id列。在postgres中,您可以创建一个序列,然后为每个插入获取该序列的下一个值

基本上,你会做一些

CREATE SEQUENCE mysequence START 101
INSERT INTO my_comment values (nextval('mysequence'), 'this is my comment');
然后,当您插入时,您可以执行以下操作

CREATE SEQUENCE mysequence START 101
INSERT INTO my_comment values (nextval('mysequence'), 'this is my comment');

您不想对id列使用VARCHAR。在postgres中,您可以创建一个序列,然后为每个插入获取该序列的下一个值

基本上,你会做一些

CREATE SEQUENCE mysequence START 101
INSERT INTO my_comment values (nextval('mysequence'), 'this is my comment');
然后,当您插入时,您可以执行以下操作

CREATE SEQUENCE mysequence START 101
INSERT INTO my_comment values (nextval('mysequence'), 'this is my comment');
首先使用。它自动创建并附加序列对象,并将序列中的
默认值设置为
nextval()
。它能满足你所有的需要。列的有效类型为
integer
。还有
bigserial
。只需按照手册的链接进行操作

CREATE TABLE comments (
    comment_id serial PRIMARY KEY
   ,comment text NOT NULL
   );
您可以忽略
INSERT
命令的列:

INSERT INTO my_comment (comment)
VALUES ('My comment here');
comment\u id
自动填写。
但是您应该始终为
INSERT
提供列列表。如果以后更改表布局,代码可能会以有害的方式中断。对于特殊命令或保证表结构时(如在同一事务中创建表时),可以跳过列列表。除此之外,请提供列列表

如果您希望返回生成的
注释\u id
,而无需再次往返服务器:

INSERT INTO my_comment (comment)
VALUES ('My comment here');
RETURNING comment_id;
插入我的注释(注释)
价值观(“我在这里的评论”);
返回评论id
详细信息请参见优秀手册。

首先使用。它自动创建并附加序列对象,并将序列中的
默认值设置为
nextval()
。它能满足你所有的需要。列的有效类型为
integer
。还有
bigserial
。只需按照手册的链接进行操作

CREATE TABLE comments (
    comment_id serial PRIMARY KEY
   ,comment text NOT NULL
   );
您可以忽略
INSERT
命令的列:

INSERT INTO my_comment (comment)
VALUES ('My comment here');
comment\u id
自动填写。
但是您应该始终为
INSERT
提供列列表。如果以后更改表布局,代码可能会以有害的方式中断。对于特殊命令或保证表结构时(如在同一事务中创建表时),可以跳过列列表。除此之外,请提供列列表

如果您希望返回生成的
注释\u id
,而无需再次往返服务器:

INSERT INTO my_comment (comment)
VALUES ('My comment here');
RETURNING comment_id;
插入我的注释(注释)
价值观(“我在这里的评论”);
返回评论id

优秀手册中的详细信息。

如果您想坚持使用varchar,您会意识到,如果长度为4,您将无法处理超过10000条评论,对吗?这仅适用于Uni项目。对Java来说非常陌生,所以对nooby问题感到抱歉。“nooby”问题仍然是很好的问题,你必须在某个地方学习,对吗?如果你想坚持使用varchar,你会意识到长度为4,你将无法处理超过10k条评论,对吧?这只适用于Uni项目。对Java来说非常陌生,所以很抱歉出现了nooby问题。“nooby”问题仍然是很好的问题,您必须在某个地方学习,对吗?