首页
学习
活动
专区
圈层
工具
发布

sqlite 获取最后插入id

SQLite数据库中的表均有一个特殊的rowid字段,它是一个不重复的64位有符号整数,默认起始值为1。...rowid只能是单调递增的,它由SQLite内部维护,不能自己指定。对于失败的插入操作,rowid也可能在原来的基础上执行了自增。删除或回滚操作并不会减小rowid的值。...若没有可用的rowid,系统就会抛出SQLITE_FULL的错误。 rowid字段在表中默认是隐藏的,也就是说,除非SQL查询语句中指定返回rowid,否则查询结果不会包含有rowid字段。...SQLiteAPI 函数sqlite3_last_insert_rowid()可以取得最后一条插入的记录的rowid。但sqlite3_last_insert_rowid()是基于当前进程的。...也就是说,sqlite3_last_insert_rowid()取到的是当前进程最后一次插入记录的rowid。对于不是当前进程插入的记录,sqlite3_last_insert_rowi()均返回0。

7.7K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【sqlite3】网络socket编程温度采集智能存储与上报项目技术------sqlite3数据库基础

    返回值:成功,SQLITE_OK,出错错误码 */ const char *sqlite3_errmsg(sqlite3 *db) /* 功能:通过db句柄,得到数据库操作的错误信息 返回值:错误信息的首地址...arg 给回调函数的参数 errmsg 错误信息 返回值:成功 SQLITE_OK */ int (*callback)(void *arg, int, char**, char**) /*...define DATABASE "stu.db" //插入函数 int do_insert(sqlite3 * db) { int id; char name[32] = {}; int score...\n"); } return 0; } //删除函数按照id int do_delete(sqlite3 * db) { int id; char sql[128] = {};...\n"); } //创建一张数据库的表格,如果表格存在打印errmsg消息,不进行重复创建操作 if(sqlite3_exec(db, "create table stu (id Integer

    23610

    sqlite3的C语言使用(三)

    _open("xxx.db",&db); int rc = sqlite3_exec(db,"CREATE TABLE IF NOT EXISTS pass(pass_id INTEGER PRIMARY...当我们要插入大量数据的时候,我们如果每插入每个语句都用sqlite3_prepare来准备一下sql语句的话会非常慢,所以我们用通配符先建立一个sql语句,用sqlite3_prepare来准备好。...= rc) { printf("数据%s重复或插入出错\n",szPass); printf("是否继续(1继续0退出)\n"); int n; scanf("%d",&n)...再使用sqlite3_step执行它,就可以完成一个密码的插入工作。     下面是所有sqlite3_bind函数,从函数名大概就能知道是干什么的。...继续看循环体,我写的if语句的作用主要是防止有重复的密码出现(因为我的字段pass_text是unique约束,如果密码重复INSERT语句就会出错)。如果有重复密码出现,让用户决定是否继续运行程序。

    2.1K10

    深入理解SQLite:存储引擎、索引、事务与锁

    在特定场景下,SQLite还支持全文索引和R-Tree索引以满足不同的需求。但是索引并非总是有效的。在某些情况下,索引可能失效,例如查询条件使用了函数或表达式,或者查询条件不满足索引的列顺序。...在btree.c文件中,当一个事务开始时,SQLite会调用sqlite3BtreeBeginTrans函数获取一个共享锁(SHARED)。共享锁允许多个事务同时读取数据,但阻止其他事务写入数据。...在SQLite中,可重复读隔离级别通过MVCC实现。在pager.c文件中,SQLite使用MVCC来管理多个并发事务。每个事务都有一个唯一的事务ID,用于标识事务的版本。...当事务读取数据时,SQLite会调用pagerAcquire函数获取一个数据页面。这个函数会检查每个页面的版本,只返回事务ID小于或等于当前事务ID的版本。...当事务写入数据时,SQLite会创建一个新的数据页面,并将其事务ID设置为当前事务ID。这样,每个事务都可以看到一个一致的数据快照,而不会被其他事务的更新干扰。

    2.5K10

    CC++ 通过SQLiteSDK增删改查

    该函数返回一个整数值,代表函数的执行状态。如果函数成功执行,返回 SQLITE_OK。如果有错误发生,返回一个表示错误代码的整数值。可以通过 sqlite3_errmsg 函数获取更详细的错误信息。...该函数返回一个整数值,用于表示函数的执行状态。如果函数成功执行,返回 SQLITE_OK。如果有错误发生,返回一个表示错误代码的整数值。...callback: 回调函数,用于处理查询结果的每一行数据。 callback_param: 传递给回调函数的参数。 errmsg: 用于存储错误消息的指针。...其他错误码,表示执行过程中出现了错误。 sqlite3_column_text 用于获取查询结果集中某一列的文本值。...该函数返回 SQLITE_OK 表示成功,返回其他错误码表示失败。

    2K10

    Python数据库操作与异常处理:一个让我半夜爬起来修Bug的故事

    正常情况下,手机号是唯一的,不会重复。但那天因为网络抖动,用户点了两次提交按钮,后端接口收到了两个一模一样的注册请求。第一个请求成功了,插入了用户数据。...# SQL语法错误cursor.execute("CREATE TABLE users id INTEGER") # sqlite3.OperationalError: near "id": syntax...常见于:主键冲突(重复插入同一主键)唯一键冲突(重复的手机号、邮箱)外键约束失败(引用了不存在的父表记录)NOT NULL约束失败这类异常往往需要业务逻辑来处理——不是简单报错就完事了,要判断该怎么做。...上下文管理器:让你的数据库代码自动"善后"很多人的数据库代码长这样:def get_user(user_id): conn = sqlite3.connect('app.db') cursor...用with(上下文管理器)来解决:def get_user(user_id): with sqlite3.connect('app.db') as conn: with conn.cursor

    22010

    【测试SQLite】测试SQLite支持的SQL语句分类

    , password, email) VALUES ('user1', 'password1', 'user1@example.com'); -- 模拟错误:尝试插入重复的唯一键 INSERT INTO...'ID already exists') END; END; -- 开始事务 BEGIN TRANSACTION; -- 创建保存点 SAVEPOINT my_savepoint; -- 尝试插入重复数据...,则不会有任何输出 -- 如果加载成功但自定义函数不存在,则会出现错误消息,指示找不到指定的函数 -- 如果加载失败,则会出现错误消息 -- 在测试前,请确保 "my_extension.so" 和...substring(X, Y, Z) -- 由于SQLite不支持substring函数,此查询会失败 -- 预期输出:错误,提示函数不存在 -- SELECT id, test_string, substring...', 'non_existing_buffer'); -- 预期结果: NULL 或 错误 unicode(X) -- 测试SQLite的unicode(X)函数 -- 插入一些测试数据 INSERT

    1.9K00

    SQLite3与CC++的结合应用

    = SQLITE_OK)     {         printf("无法关闭,错误代码: %s\n", sqlite3_errmsg(conn));         exit(-1);     }      ...= SQLITE_OK)  {      printf("操作失败,错误代码: %s", err_msg);      exit(-1);  }  }  sqlite3_exec的原型如下: SQLITE_API...第三个参数为回调函数的指针。因为这里只是创建表和插入数据,并没有数据返回,所以不需要填写回调函数。以NULL代替。 第四个参数为回调函数所要使用的参数。同第三条。 第五个参数为错误信息。...SEC 4: 再常言道:“有插入,就有读取!”下面来读取数据库文件中的数据。 刚才提到了sqlite3_exec的回调函数,现在需要这个函数了。..., &err_msg);  TIP: 前面创建表、插入数据的代码可以先注释掉,否则运行一次就会插入10条数据,会造成点困扰。

    2.3K10

    从 Android 到 Windows Phone 8:使用 SQL 数据库

    有时光靠普通键值对和/或文件并不能满足项目对数据存储的需求,尤其是当项目中包含大量重复的结构化数据(例如日历应用中的事件)时。对于这种类型的数据,你可能会希望使用一个关系型存储工具来处理。...你可能会注意到出现了一些错误。这是因为 sqlite-net 依赖于尚未移植到 Windows Phone 8 平台的 csharp-sqlite 库。...单击”生成“选项卡并将以下内容添加到条件编译符号文本框中:;USE_WP8_NATIVE_SQLITE。 按F6构建解决方案。现在应该不会有错误并能正常生成。...SQLiteAsyncConnection("blog"); await conn.CreateTableAsync(); } SQLiteAsyncConnection 类的构造函数中的...Title TEXT, Text TEXT )"); } 插入数据 现在我们已经创建了一张表,使用以下代码可以将一条记录添加到表中: public async void InsertPost(Post

    3.5K100

    Android 转 Windows Phone 8:SQL 数据库的操作

    特别是当您处理重复的结构化数据时,比如一些日程。对于这类信息,您需要使用的是关系存储。所谓的关系存储,通常是一个 SQL 数据库。...如果您查看错误列表,将会发现一些报错。这是因为 sqlite-net 依赖于尚未移植到 Windows Phone 8 的 csharp-sqlite。...new SQLiteAsyncConnection("blog"); await conn.CreateTableAsync(); } SQLiteAsyncConnection 类的构造函数中的...INTEGER PRIMARY KEY, Title TEXT, Text TEXT )"); } 插入一个记录 目前表已经被创建,接下来可以使用以下代码将记录添加到表中: public async...new SQLiteAsyncConnection("blog"); await conn.InsertAsync(post); } Android 提示 在 Android 中,您可以使用以下代码插入记录

    4.9K80
    领券