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

被折叠的 条评论
为什么被折叠?



