当前位置: 技术问答>java相关
数据库问题(大家快来帮把手,实在不行,我可以再放100分)
来源: 互联网 发布时间:2015-05-02
本文导语: 在java中写数据库: a表:id,name,time,quantity, 向a表中插入一行值,包括了除id外的所有项,要求得到由系统自动填写的这一行的id值,麻烦是后面几项均不唯一,因此无法使用select id where name=**这种方法,而且数据库同...
在java中写数据库:
a表:id,name,time,quantity,
向a表中插入一行值,包括了除id外的所有项,要求得到由系统自动填写的这一行的id值,麻烦是后面几项均不唯一,因此无法使用select id where name=**这种方法,而且数据库同时被多人使用,各位有什么好方法吗?
a表:id,name,time,quantity,
向a表中插入一行值,包括了除id外的所有项,要求得到由系统自动填写的这一行的id值,麻烦是后面几项均不唯一,因此无法使用select id where name=**这种方法,而且数据库同时被多人使用,各位有什么好方法吗?
|
如何获得刚插入数据库的记录的ID号?
1.SQL Server
对于SQL Server 2000来说,它提供了两个全新的函数(IDENT_CURRENT,SCOPE_IDENTITY),并且改进了@@IDENTITY的不足.当你插入新记录后,可以调用函数:
PRINT IDENT_CURRENT('table') '这将获得新的IDENTITY值,不管数据库中是不是有记录添加(这就避免了@@IDENTITY的连接限制)
或者:PRINT SCOPE_IDENTITY() '这将获得在当前存储过程,触发器等其他程序创建的最新记录的IDENTITY值.
而全局变量@@IDENTITY有一个问题,当对一张表执行insert时,如果该表有触发器程序在执行插入操作,然后,接着在另一张表中插入记录,这样返回@@IDENTITY值就是第二张表的IDENTITY值。
如果你用的不是SQL Server 2000,你最好一个简单的存储过程来解决这个问题。
CREATE PROCEDURE myProc
@param1 INT
AS
BEGIN
SET NOCOUNT ON
INSERT INTO someTable
(
intField
)
VALUES
(
@param1
)
SET NOCOUNT OFF
SELECT NEWID = @@IDENTITY
END
在ASP中你可以这样做:
2.Access
对于Access,你可以用下面这样的方法:
然而对于多人同时向数据库中添加数据,我们就要利用记录集的adOpenKeyset游标来防止出错。例如下面的例子:
1.SQL Server
对于SQL Server 2000来说,它提供了两个全新的函数(IDENT_CURRENT,SCOPE_IDENTITY),并且改进了@@IDENTITY的不足.当你插入新记录后,可以调用函数:
PRINT IDENT_CURRENT('table') '这将获得新的IDENTITY值,不管数据库中是不是有记录添加(这就避免了@@IDENTITY的连接限制)
或者:PRINT SCOPE_IDENTITY() '这将获得在当前存储过程,触发器等其他程序创建的最新记录的IDENTITY值.
而全局变量@@IDENTITY有一个问题,当对一张表执行insert时,如果该表有触发器程序在执行插入操作,然后,接着在另一张表中插入记录,这样返回@@IDENTITY值就是第二张表的IDENTITY值。
如果你用的不是SQL Server 2000,你最好一个简单的存储过程来解决这个问题。
CREATE PROCEDURE myProc
@param1 INT
AS
BEGIN
SET NOCOUNT ON
INSERT INTO someTable
(
intField
)
VALUES
(
@param1
)
SET NOCOUNT OFF
SELECT NEWID = @@IDENTITY
END
在ASP中你可以这样做:
2.Access
对于Access,你可以用下面这样的方法:
然而对于多人同时向数据库中添加数据,我们就要利用记录集的adOpenKeyset游标来防止出错。例如下面的例子:
|
多人使用肯定有问题的,建议你自己建一个表来实现类似于序列生成器的功能。
如下:
create table seq
(item varchar(20) not null,
val number(20) not null);
update seq
set val = val + 1
where item = ?
select val into ? from seq where item = ?
每次在插入时,先更新该表记录(val+1),然后用此值插入表中即可。
另外把ID设为主键
如不明白,可到QQ上找我:38350637
如下:
create table seq
(item varchar(20) not null,
val number(20) not null);
update seq
set val = val + 1
where item = ?
select val into ? from seq where item = ?
每次在插入时,先更新该表记录(val+1),然后用此值插入表中即可。
另外把ID设为主键
如不明白,可到QQ上找我:38350637