strSQL = "INSERT INTO emp(NO, EMP_NAME, EMP_TEL)VALUES(088000, 'JIMMY', *****)";
stmt.executeUpdate(strSQL);
我有此声明将新员工插入数据库。
如果我希望通过向前一名员工添加1来自动生成员工NO,该怎么办?如何在JSP中完成?
答案 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询问最后插入的idLAST_INSERT_ID()
答案 3 :(得分:0)
是的,当然,您可以通过将“employee no”设置为唯一而在此列属性中设置A_I(auto_increament)来实现此目的
答案 4 :(得分:0)
emp
ID int NOT NULL AUTO_INCREMENT
的数据库架构
strSQL = "INSERT INTO emp(EMP_NAME, EMP_TEL) VALUES('ABC_NAME', '321321')";
JSP
进行任何逻辑操作。转发Servlet
中的所有输入并执行此操作。答案 5 :(得分:0)
有几种方法可以做。
答案 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来使用快捷方式。
如果您希望此方法如下所示:
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();