热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQLite如何实现以下功能?REPLACEINTO语句无法解决

我用c#+sqlite做了一个多线程更新的程序。数据库字段如下:id(主键,自增字段),itemid(货物id),checkedtime(检查时间),a
我用c#+sqlite 做了一个多线程更新的程序。 

数据库字段如下:   

id(主键,自增字段) , itemid (货物id) ,checkedtime( 检查时间 ),     a区销售额 , b区销售额

注: itemid (货物id) ,checkedtime( 检查时间 ) 这两个字段建立了索引(唯一键);( 就是说无论何时表里面的 itemid (货物id) ,checkedtime( 检查时间 ) 这两个字段同时相同的只有一条数据。)


我想实现的功能:

程序使用2个线程处理同一批itemid,itemid对应不同区的销售额。
a线程先判断表里面是否存在itemid,如果不存在itemid的话则插入itemid、checkedtime、 a区销售额 ,如果存在itemid则更新a区销售额。

b线程先判断表里面是否存在itemid,如果不存在itemid的话则插入itemid、checkedtime、 b区销售额 ,如果存在itemid则更b区销售额。

目前我使用的语句:
a线程的语句
REPLACE INTO itemdetails(itemid,checkedtime,a区销售额 ) VALUES('256','2014-3-22','2300');

b线程的语句
REPLACE INTO itemdetails(itemid,checkedtime,b区销售额 ) VALUES('256','2014-3-22','5700');

遇到的问题:
当a线程先执行,插入了itemid为256和a区销售额的一行数据 ,如:

 itemid (货物id) ,checkedtime( 检查时间 ),     a区销售额 , b区销售额
      256                        2014-3-22                         2300
 
此时b线程再执行时,会直接把itemid为256的数据删除掉,然后再插入itemid为256和b区销售额的一行数据 ,变成了:

 itemid (货物id) ,checkedtime( 检查时间 ),     a区销售额 , b区销售额
      256                        2014-3-22                                              5700


但是我需要的是,  b线程在保留a区销售额的情况下,更新b区销售额,如:

 itemid (货物id) ,checkedtime( 检查时间 ),     a区销售额 , b区销售额
      256                        2014-3-22                           2300               5700

请问应该如何实现?程序原先使用了mysql数据库,在mysql数据库里面我使用了存储过程来实现这个功能,但是现在程序使用了sqlite,没有存储过程,不知道如何实现了。谢谢大伙指点!


1 个解决方案

#1


首先..你必须得设置唯一的一个 ID 啊..

推荐阅读
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 在Android Studio中查看SQLite数据库
    原来查看数据库内容,我们一般都是将数据库文件从手机导出,再用专门的软件打开查看,比较繁琐。最近发现了一个比较方便的方法:使用工具stetho。使用方式在gradle中配置depen ... [详细]
  • SQLite–CONSTRAINTS(约束)约束是数据列在表上执行的规则。这些是用来限制的数据类型可以进入一个表。这样可以确保数据的准确性和可靠性在数据库中。    级或表级约束可 ... [详细]
  • 有没有人用过sqlite?关于tablehasnocolumnnamedcolumn插入数据的时候报上边的错。问题是我明明有这一列。直接在sqlitedevoloper里执 ... [详细]
  • Python使用SQLite1.sqlite3的安装python2.5.x以上版本默认自带sqlite3模块。2.链接sqlite3数据库```#导入sqlite3模块import ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
author-avatar
kanliyan_857
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有