自动分配ID号

时间:2014-02-25 09:08:06

标签: java database jsp

strSQL = "INSERT INTO emp(NO, EMP_NAME, EMP_TEL)VALUES(088000, 'JIMMY', *****)";
stmt.executeUpdate(strSQL);

我有此声明将新员工插入数据库。

如果我希望通过向前一名员工添加1来自动生成员工NO,该怎么办?如何在JSP中完成?

7 个答案:

答案 0 :(得分:2)

虽然不是JSP,但可能的解决方案是在数据库中创建自动生成的递增列(称为 identity 列)。重要的是,这可以避免使用解决方案存在的竞争条件,该解决方案可以检索当前最大值并使其递增。

MySQL示例:

create table emp (
  emp_id integer not null auto_increment,
  ...
);

Apache Derby示例:

create table emp (
  emp_id integer not null generated always as identity,
  ...
);

MS SQL Server 2008 R2示例:

create table emp (
  emp_id integer not null identity,
  ...
);

INSERT语句不包含emp_id列。如果需要,请参阅Statement.getGeneratedKeys()以获取生成的ID。

答案 1 :(得分:0)

您可以在数据库的字段NO上使用 AUTOINCREMENT 选项,或执行SELECT MAX(NO) FROM emp

之类的查询

并获取最大值

答案 2 :(得分:0)

根据您的数据库...我给你一个mysql示例。

create table emp{
    NO int unsigned auto_increment,
    EMP_NAME varchar(30) not null,
    ...

}


insert into emp(EMP_NAME,...) values ("Jimmy", ...);

现在你可以通过

向mysql询问最后插入的id
LAST_INSERT_ID()

答案 3 :(得分:0)

是的,当然,您可以通过将“employee no”设置为唯一而在此列属性中设置A_I(auto_increament)来实现此目的

答案 4 :(得分:0)

  1. 使用emp
  2. 检查创建表ID int NOT NULL AUTO_INCREMENT的数据库架构
  3. 然后更新架构strSQL = "INSERT INTO emp(EMP_NAME, EMP_TEL) VALUES('ABC_NAME', '321321')";
  4. 虽然有可能但我们不应该对JSP进行任何逻辑操作。转发Servlet中的所有输入并执行此操作。

答案 5 :(得分:0)

有几种方法可以做。

  1. 像Oracle这样的一些数据库具有序列等功能,允许您随后增加数字并以原子形式运行。
  2. 将列(可能是主键)设置为自动增量(数据库选项),并且不要在查询中指定“否”。这样,您未添加的NO列将自动添加到数据库中。
  3. 您可以从数据库表中获取最大值并为新NO添加1,或者即使在文件,memcached中也可以保存这些最新值,无论您想要什么。这个#3的问题是,如果你不使程序在GET LATEST VALUE,ADD 1,CALL DATABASE INSERT QUERY之间成为原子,那么多个查询可以使用相同的NO。没关系,但是,如果NO是主键,因为只会执行第一次更新/插入查询而其他查询将因主键唯一违规而失败......但在某些情况下会出现问题。

答案 6 :(得分:0)

我认为这将解决您在数据库中的疑问并使用以下查询:

创建表格

CREATE TABLE `test` (
  `id` INT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  `emp_name` VARCHAR(50) NOT NULL,
  `emp_tel` INT(5) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

INSERT TABLE METHOD:1

INSERT INTO test
VALUES (0,jmail,1234567)OR(?,?,?);

INSERT TABLE METHOD:2

INSERT INTO test (id,emp_name,emp_tel)
VALUES (0,jmail,1234567);

如果您有任何疑问,请给我评论。

如果你使用sqlyog来使用快捷方式。

enter image description here

如果您希望此方法如下所示:

PreparedStatement ps = con.prepareStatement("INSERT INTO test(id,emp_name,emp_tel)
VALUES (0,jmail,1234567)");
ps.executeUpdate();

PreparedStatement ps = con.prepareStatement("INSERT INTO test(id,emp_name,emp_tel)
VALUES (?,?,?)");
ps.setString(1, id );
ps.setString(2, name);
ps.setString(3, tel);
ps.executeUpdate();
相关问题