sqlite插入时间字段_sqlite 获取最后插入id

本文主要介绍了SQLite数据库中的特殊rowid字段。它是不重复的64位有符号整数,默认起始值为1,单调递增且由SQLite内部维护。还说明了rowid的别名、使用规则,如创建表时设置特定主键时它的情况,以及rowid达到最大值时的处理、隐藏特性等,同时提及相关API函数。

(点击上方公众号,可快速关注)

SQLite数据库中的表均有一个特殊的rowid字段,它是一个不重复的64位有符号整数,默认起始值为1。rowid别名为oid或_rowid_,但在创建表的SQL声明语句中只能使用rowid作为关键字。如果在创建表的时候设置了类型为integer的具有自动增长性的主键,那么这时的主键相当于是rowid的别名。

rowid只能是单调递增的,它由SQLite内部维护,不能自己指定。对于失败的插入操作,rowid也可能在原来的基础上执行了自增。删除或回滚操作并不会减小rowid的值。当rowid达到所能表示的最大值时,这时如果有新纪录要插入,系统就会从之前没有被使用过的(或从已经被删除的记录的)rowid中随机取出一个作为rowid。若没有可用的rowid,系统就会抛出SQLITE_FULL的错误。

rowid字段在表中默认是隐藏的,也就是说,除非SQL查询语句中指定返回rowid,否则查询结果不会包含有rowid字段。

可以在创建表时使用WITHOUT ROWID以声明不生成rowid字段,例如:

CREATE TABLE IF NOT EXISTS wordcount(

         word TEXT PRIMARY KEY,

         cnt INTEGER

) WITHOUT ROWID;

将关键字AUTOINCREMENT使用在声明为WITHOUT ROWID的表不但不起作用,还将引发一个错误。

SQLiteAPI 函数sqlite3_last_insert_rowid()可以取得最后一条插入的记录的rowid。但sqlite3_last_insert_rowid()是基于当前进程的。也就是说,sqlite3_last_insert_rowid()取到的是当前进程最后一次插入记录的rowid。对于不是当前进程插入的记录,sqlite3_last_insert_rowi()均返回0。sqlite3_last_insert_rowi()对应的SQL声明为last_insert_rowid(),例如:select last_insert_rowid() from exam_tbl

看完本文有收获?请转发分享更多人

因为分享是一种美德

06c1b9787483494e8274098e3aa48be8.gif

void air_struct_insert(AirconParaInfo* info,sqlite3_stmt *stmt) { // 获取实时时间 int64_t time = getCurrentTimeWithMilliseconds(); // 绑定整型数据 int index = 1; // 第二帧数据 sqlite3_bind_int(stmt, index++, info->working_mode); sqlite3_bind_int(stmt, index++, info->reserved2_1); sqlite3_bind_int(stmt, index++, info->reserved2_2); sqlite3_bind_int(stmt, index++, info->outlet_temp); sqlite3_bind_int(stmt, index++, info->return_temp); sqlite3_bind_int(stmt, index++, info->environment_temp); sqlite3_bind_int(stmt, index++, info->return_pressure); sqlite3_bind_int(stmt, index++, info->outlet_pressure); sqlite3_bind_int(stmt, index++, info->Unit_Number); sqlite3_bind_int(stmt, index++, info->fault_code); sqlite3_bind_int(stmt, index++, info->fault_level); // 第三帧数据 sqlite3_bind_int(stmt, index++, info->compressor_status); sqlite3_bind_int(stmt, index++, info->heating_belt_status); sqlite3_bind_int(stmt, index++, info->electric_heating_status); sqlite3_bind_int(stmt, index++, info->water_pump_status); sqlite3_bind_int(stmt, index++, info->fan1_status); sqlite3_bind_int(stmt, index++, info->fan2_status); sqlite3_bind_int(stmt, index++, info->fan3_status); sqlite3_bind_int(stmt, index++, info->reserved3_1); sqlite3_bind_int(stmt, index++, info->compressor_speed); sqlite3_bind_int(stmt, index++, info->water_pump_speed); sqlite3_bind_int(stmt, index++, info->reserved3_2); sqlite3_bind_int(stmt, index++, info->reserved3_3); sqlite3_bind_int(stmt, index++, info->reserved3_4); sqlite3_bind_int(stmt, index++, info->reserved3_5); sqlite3_bind_int(stmt, index++, info->reserved3_6); // 第四帧数据 sqlite3_bind_int(stmt, index++, info->outlet_return_pressure_sensor_fault); sqlite3_bind_int(stmt, index++, info->ac_over_voltage_alarm); sqlite3_bind_int(stmt, index++, info->ac_under_voltage_alarm); sqlite3_bind_int(stmt, index++, info->reserved4_1); sqlite3_bind_int(stmt, index++, info->reserved4_2); sqlite3_bind_int(stmt, index++, info->reserved4_3); sqlite3_bind_int(stmt, index++, info->reserved4_4); sqlite3_bind_int(stmt, index++, info->reserved4_5); sqlite3_bind_int(stmt, index++, info->reserved4_6); sqlite3_bind_int(stmt, index++, info->reserved4_7); sqlite3_bind_int(stmt, index++, info->reserved4_8); sqlite3_bind_int(stmt, index++, info->reserved4_9); sqlite3_bind_int(stmt, index++, info->reserved4_10); sqlite3_bind_int(stmt, index++, info->reserved4_11); // 第五帧数据 sqlite3_bind_int(stmt, index++, info->outlet_pressure_sensor_fault); sqlite3_bind_int(stmt, index++, info->return_pressure_sensor_fault); sqlite3_bind_int(stmt, index++, info->low_pressure_sensor_fault); sqlite3_bind_int(stmt, index++, info->outlet_temp_sensor_fault); sqlite3_bind_int(stmt, index++, info->system_low_pressure_alarm); sqlite3_bind_int(stmt, index++, info->system_high_pressure_switch_alarm); sqlite3_bind_int(stmt, index++, info->exhaust_temp_high_alarm); sqlite3_bind_int(stmt, index++, info->can_communication_fault_alarm); sqlite3_bind_int(stmt, index++, info->suction_temp_sensor_fault); sqlite3_bind_int(stmt, index++, info->cooling_system_abnormal); sqlite3_bind_int(stmt, index++, info->low_suction_overheat_alarm); sqlite3_bind_int(stmt, index++, info->compressor_vfd_over_voltage_alarm); sqlite3_bind_int(stmt, index++, info->compressor_vfd_under_voltage_alarm); sqlite3_bind_int(stmt, index++, info->compressor_vfd_over_current_alarm); sqlite3_bind_int(stmt, index++, info->compressor_vfd_over_temp_alarm); sqlite3_bind_int(stmt, index++, info->compressor_vfd_comm_fault_alarm); sqlite3_bind_int(stmt, index++, info->compressor_vfd_phase_loss_alarm); sqlite3_bind_int(stmt, index++, info->compressor_vfd_other_fault_alarm); sqlite3_bind_int(stmt, index++, info->water_pressure_low); sqlite3_bind_int(stmt, index++, info->exhaust_temp_high_lock); sqlite3_bind_int(stmt, index++, info->system_high_pressure_lock); sqlite3_bind_int(stmt, index++, info->system_low_pressure_lock); sqlite3_bind_int(stmt, index++, info->comp_inverter_overcurrent_lock); sqlite3_bind_int(stmt, index++, info->comp_inverter_overvoltage_lock); sqlite3_bind_int(stmt, index++, info->comp_inverter_undervoltage_lock); sqlite3_bind_int(stmt, index++, info->comp_inverter_overtemp_lock); sqlite3_bind_int(stmt, index++, info->comp_inverter_phase_loss_lock); sqlite3_bind_int(stmt, index++, info->comp_inverter_other_fault_lock); sqlite3_bind_int(stmt, index++, info->reserved5_1); sqlite3_bind_int(stmt, index++, info->reserved5_2); sqlite3_bind_int(stmt, index++, info->reserved5_3); sqlite3_bind_int(stmt, index++, info->reserved5_4); sqlite3_bind_int(stmt, index++, info->reserved5_5); // 第六帧数据 sqlite3_bind_int(stmt, index++, info->high_pressure_sensor_fault); sqlite3_bind_int(stmt, index++, info->environment_temp_sensor_fault); sqlite3_bind_int(stmt, index++, info->return_temp_sensor_fault); sqlite3_bind_int(stmt, index++, info->exhaust_temp_sensor_fault); sqlite3_bind_int(stmt, index++, info->reserved6_1); sqlite3_bind_int(stmt, index++, info->reserved6_2); sqlite3_bind_int(stmt, index++, info->outlet_low_temp_alarm); sqlite3_bind_int(stmt, index++, info->outlet_high_temp_alarm); sqlite3_bind_int(stmt, index++, info->outlet_pressure_high_alarm); sqlite3_bind_int(stmt, index++, info->reserved6_3); sqlite3_bind_int(stmt, index++, info->reserved6_4); sqlite3_bind_int(stmt, index++, info->reserved6_5); sqlite3_bind_int(stmt, index++, info->reserved6_6); sqlite3_bind_int(stmt, index++, info->reserved6_7); sqlite3_bind_int(stmt, index++, info->System_water_shortage_alarm); sqlite3_bind_int(stmt, index++, info->condensate_pressure_high); sqlite3_bind_int(stmt, index++, info->high_pressure_temperature_pressure_sensor_fault); sqlite3_bind_int(stmt, index++, info->low_pressure_temperature_pressure_sensor_fault); sqlite3_bind_int(stmt, index++, info->Lack_malfunction_refrigerant); sqlite3_bind_int(stmt, index++, info->Electronic_water_pump_fault); sqlite3_bind_int(stmt, index++, info->Electronic_expansion_valve_fault); sqlite3_bind_int(stmt, index++, info->Electronic_fan_fault); sqlite3_bind_int(stmt, index++, info->high_pressure_temperature_sensor_temperature_fault); sqlite3_bind_int(stmt, index++, info->low_pressure_temperature_sensor_temperature_fault); sqlite3_bind_int(stmt, index++, info->Fault_battery_import_temperature_sensor); sqlite3_bind_int(stmt, index++, info->Fault_battery_import_pressure_sensor); sqlite3_bind_int(stmt, index++, info->Fault_battery_exit_temperature_sensor); sqlite3_bind_int(stmt, index++, info->Communication_Lost_Fault_Electronic_Water_Pump); sqlite3_bind_int(stmt, index++, info->Communication_Lost_Fault_Electronic_Expansion_Valve); sqlite3_bind_int(stmt, index++, info->Communication_Lost_Fault_Compressor); sqlite3_bind_int(stmt, index++, info->ERROR_ConnectionTimedOut); sqlite3_bind_int64(stmt, index++, time); }
最新发布
09-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值