sqlite多行插入_sqlite 插入多条数据 并返回添加行的自增ID

本文探讨在WPF应用中使用SQLite数据库批量插入数据时如何优化性能并获取自增ID。针对一次性插入多条记录的需求,讨论了不使用事务的性能影响和使用事务时如何获取插入ID的问题,提出了查询最大ID和使用sqlite3_last_insert_rowid函数的方案,同时寻求在性能和获取ID间找到平衡的方法。

场景:

现在使用WPF 绑定数据源(List类似类型的链表类),

这个数据源有可能在一个时间内写入多条记录到Sqlite数据库中,也有可能在很短的时间内写入一条数据到数据(PS:时间可能很快)。

这个程序主要是用于设备通讯的。主要是采集设备上报的一些数据,通过数据在后台进行分析解析,然后将解析后的结果存到数据库中。

由于涉及到画面的数据绑定,并不能每添加一次数据库就进行一次数据库的查询,所以在写入到数据库前是可以做出那个写入对象,但是这个写入对象的数据库主键ID(自增字段)是无法得知的。数据库在本地存放的,并不是网络型的数据库。

数据库:sqlite3 开发工具:vs2012

数据库DLL 使用的是Sqlite官方的 System.Data.Sqlite.dll   (32位版,具体版本号记不清了) 使用技术 WPF

手写部分的代码吧,有可能不对

添加的对象:

InsertEventData = new EventData();

InsertEventData.Data = XXXXX;InsertEventData.time = XXXXX;

数据库插入语句:

SqliteDataCommand command= new SqliteDataCommand();

command.CommandText = "insert into table1 (data,time,.....) values ('xxxxx','xxxx',....)";

command.ExecuteQueueCount();

大体是这样吧。

百度,谷歌结果 sqlite 貌似一次只能插入一条数据,

1.一次要插入几十条记录的话,sqlite如果不使用事务的话,插入的IO操作很影响性能的。并且插入时间也很长。但是这样是可以一条一条的取得插入后的记录。

取得的方法

1)插入后,再执行一个查询语句 select max(id) from table1

2)插入后,使用  sqlite3_last_insert_rowid 这条语句来返回,PS:个人感觉这个不是很靠谱),并且是否存在这个语句还没有调查。

2.如果一次插入了几十条记录,如果开启事务。那么我想无论如何插入数据时是取不到插入后的自增ID的,因为我还没有执行commit 所以。说这样 虽然可能是减少了I/O开销,但是好像就无法返回自增ID了。

问题:1.如何做插入的速度能在最优的性能上,耗时最少,开销最少。

2.由于页面模型绑定需要知道这个插入后的ID,那么如何在条件1满足的情况下还可以取得我一次插入了多条记录后,这些记录在写入到数据库里的自增ID的值。

谢谢~~~~~~

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值