0 0

获取最大ID值,再插入到数据库问题10

问题:
要往数据库插入一条记录,插入语句不包含主键时,报ID值不能为null。经观察,ID值的规律为自增。
现在的实现方法是:
先查出最大ID
select max(FInterID) as id from seorder
interID = queryRs.getInt("id");
再把ID加1
interID += 1;

但是,如果多个用户同时执行统一程序,可能会导致在同一时间获取到的最大ID是同一个,从而插入记录时插入失败。
在网上查了资料,用同一个域控制?那上面说得不明白。请问这个怎么实现,或者有没其他方法?
谢谢!

问题补充:<div class="quote_title">zhoulei984623 写道</div><div class="quote_div">是什么数据库&nbsp; 如果支持sequence,那么新建一个sequence,比如名字叫seq <br />那么插入的时候这样写insert table (id, .....) values (nextVal(seq), ..... <br /> <br />这样id就会根据sequence规则自动生成</div> <br /> <br /> <br /> <br />数据库是SQL2005 <br />数据库是客户的,已经有历史数据,不能再新建了 <br />
2011年11月08日 10:27

6个答案 按时间排序 按投票排序

0 0

/**
* @author zc
* @version 2011-11-9 上午09:19:54
*/

public class ClassA {

private static int count;

public static synchronized int getCount() {
ClassA.count += 1;
return ClassA.count;
}

public static void setCount(int count){
ClassA.count = count;
}

public static void main(String[] args) throws InterruptedException {
Thr thr = new Thr();
Thr thr1 = new Thr();
thr.start();
thr1.start();
}

}

class Thr extends Thread {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(ClassA.getCount());
}
}
}

2011年11月09日 10:25
0 0

/**
* @author zc
* @version 2011-11-9 上午09:19:54
*/

public class ClassA {

private static int count;

public static synchronized int getCount() {
return ClassA.count;
}

public static synchronized void setCount(int count) throws InterruptedException {
ClassA.count = count + 1;
Thread.sleep(1000);
}

public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
try {
ClassA.setCount(i);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(ClassA.getCount());
}
}

}

2011年11月09日 09:24
0 0

那就在服务器启动的时候查一次,做一个全局变量,根据这个变量就可以的

2011年11月09日 09:16
0 0

是什么数据库  如果支持sequence,那么新建一个sequence,比如名字叫seq
那么插入的时候这样写insert table (id, .....) values (nextVal(seq), .....

这样id就会根据sequence规则自动生成

2011年11月08日 16:00
0 0

sqlserver可以设置主键自增
oracle可以创建一个sequence

2011年11月08日 10:57
0 0

永远不要干这种事!去取最大值,然后插进去!!!
主机mac地址哈希 + 进程id + 时间戳

2011年11月08日 10:27

相关推荐

    Oracle插入数据时获取自增ID

    下面将详细介绍如何通过序列和触发器实现在插入数据时自动生成并获取ID。 #### 序列(sequence) 序列是一种用于生成连续整数值的对象,它可以在创建表时或之后定义,并被用来为表中的特定字段提供唯一的递增值。...

    C#.NET中如何批量插入大量数据到数据库中

    // 从GridView中获取数据并批量插入数据库 // ... } ``` 批量插入数据库时,有几种方法可以提高效率: 1. **使用SQL事务**:将多个插入操作封装在一个事务中,可以减少与数据库的交互次数,提高性能。在C#.NET中...

    c#连接sqlserver数据库插入数据从数据库获取时间示

    本示例将详细介绍如何使用C#连接到SQL Server数据库,执行插入操作,并从数据库中获取时间。以下是具体的步骤和知识点: 1. **安装必要的库**:首先,你需要在C#项目中引入`System.Data.SqlClient`命名空间,这可以...

    生成数据库值为插入语句

    在数据库管理中,生成数据库值为插入语句是一项常见的任务,尤其在数据迁移、测试数据准备或者数据分析过程中。插入语句(INSERT语句)用于向数据库表中添加新的记录。以下将详细介绍如何生成这些语句以及相关的...

    sql语句插入MySQL数据库操作指南

    在团队协作中,如果数据库表结构频繁变动,可以使用版本控制工具(如Git)来管理SQL脚本,确保每个人都能及时获取到最新的数据库变更。同时,可以利用Flyway或 Liquibase等数据库迁移工具来自动化这个过程,它们能...

    java连接数据库并且向数据库插入数据

    一旦获取到数据库连接,我们就可以编写SQL语句来插入数据。假设我们有一个名为`users`的表,包含`id`、`name`和`email`字段,插入数据的SQL语句可能如下: ```sql INSERT INTO users (name, email) VALUES ('John ...

    delphi Image控件插入数据库查询数据库更新数据库

    此函数实现了将图像数据插入数据库的操作,并返回插入后的记录 ID。 - 创建 `TJpegImage` 对象,并从 Image 控件中提取图像数据。 - 使用 SQL 语句将图像数据插入到 `T_ImageOfChannel` 表的 `channelimage` 字段中...

    读取excel数据插入数据库

    总结起来,通过Apache POI读取Excel数据和MyBatis插入数据库的流程如下: 1. 引入Apache POI和MyBatis相关依赖。 2. 使用POI读取Excel文件,获取数据并转换为目标对象。 3. 创建MyBatis的Mapper接口,定义插入数据的...

    ckeditor插入数据库例子

    这个“ckeditor插入数据库例子”是一个实践教程,帮助初学者理解如何将CKEditor编辑的内容存储到数据库中,以便于之后的显示或处理。我们将详细探讨CKEditor的使用,以及与数据库交互的关键步骤。 首先,CKEditor是...

    将图片以字节流存到数据库再从数据库获取显示

    然后,通过SQL语句或者ORM框架(如Hibernate或MyBatis)将字节流插入到数据库中。 ```sql CREATE TABLE Images ( id INT PRIMARY KEY, imageData BLOB ); ``` ```java PreparedStatement pstmt = ...

    MybatisPlus中插入数据获取主键值示例代码

    在MybatisPlus中,插入数据并获取主键值是一个常见的需求,特别是在需要自增主键或者生成唯一ID的情况下。以下是对这个主题的详细阐述: 首先,我们需要了解MybatisPlus中的插入数据操作。在MybatisPlus中,可以...

    java向数据库插入数据与把数据显示到页面

    ### Java向数据库插入数据与把数据显示到页面 #### 一、背景介绍 在现代Web应用开发中,将数据从客户端提交至服务器,并最终存储到数据库中是一项常见的需求。此外,有时候还需要将数据库中的数据(例如图片)直接...

    oracle向数据库里插入图片

    在Oracle数据库中插入图片涉及到BLOB(Binary Large Object)数据类型,这是Oracle用来存储大量二进制数据,如图片、音频或视频文件等的一种方式。本文将详细介绍如何在Oracle数据库中插入、查询和管理图片。 首先...

    QT实现图片插入数据库并显示

    4. **SQL操作**:使用`QSqlQuery`类执行SQL语句,如INSERT,来将图像数据插入数据库。需要注意的是,插入BLOB字段时,可能需要使用`blob()`函数或者直接传入`QByteArray`对象。 5. **检索图像**:从数据库中检索...

    数据库表生成插入语句工具

    数据库表生成插入语句工具是一种实用的数据库管理辅助软件,主要功能是自动生成针对特定数据库表的INSERT语句。在数据库开发、数据迁移或备份恢复过程中,这种工具能极大地提高工作效率,减少手动编写SQL语句的工作...

    易语言数据库任意插入

    例如,你可以创建一个名为“数据库插入”的函数,接收表名、字段名和对应的值作为参数,然后在函数内部完成上述步骤。 在压缩包文件"数据库任意插入"中,可能包含了实现这一功能的易语言源代码文件。通过查看和学习...

    使用SQL Server 获取插入记录后的ID(自动编号)

    -- 插入记录并获取ID INSERT INTO mytable VALUES ('李四'); SELECT SCOPE_IDENTITY(); ``` 在上述示例中,插入记录后,使用 `SCOPE_IDENTITY()` 就能获取到新插入的`mytable`表记录的ID。 总结来说,理解并正确...

    android 插入彩信数据库代码

    本文将深入探讨如何在Android中插入彩信到其数据库,以及如何新建和导入彩信的相关知识点。 首先,理解Android中的MMS机制是至关重要的。Android系统通过ContentProvider接口与多媒体消息数据库交互,这个接口使得...

    insert和select结合实现"插入某字段在数据库中的最大值+1"的方法

    在数据库操作中,有时我们需要在插入新记录时确保某个字段的值是当前数据库中该字段的最大值加上1,以此来实现自动序列化或保持唯一性。这种需求在诸如订单编号、ID序列等场景中十分常见。本文将详细介绍如何通过`...

    将数据库数据导入mfc列表框,可以删除、修改、增加,并且同步保存到数据库中

    - **增加**:用户在列表框中添加新项后,需要创建一个新的`CADOCommand`对象,执行`INSERT INTO`语句将数据插入数据库。 - **删除**:选择列表框中的项,根据其索引获取对应的数据库记录ID,然后创建一个`DELETE`...

Global site tag (gtag.js) - Google Analytics