热门标签 | 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 啊..

推荐阅读
  • 本文探讨了如何在C#应用程序中通过选择ComboBox项从MySQL数据库中检索数据值。具体介绍了在事件处理方法 `comboBox2_SelectedIndexChanged` 中可能出现的常见错误,并提供了详细的解决方案和优化建议,以确保数据能够正确且高效地从数据库中读取并显示在界面上。此外,还讨论了连接字符串的配置、SQL查询语句的编写以及异常处理的最佳实践,帮助开发者避免常见的陷阱并提高代码的健壮性。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 本文介绍如何在将数据库从服务器复制到本地时,处理因外键约束导致的数据插入失败问题。 ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • C# 中 SQLite 报错:在 "\\s\\" 附近出现语法错误,如何解决? ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 基于试题数据的智能化管理平台采用Java语言进行面向对象编程,旨在构建一个高效的试题信息管理系统。该系统在JDK 6.0和MyEclipse 10.6环境下开发,通过优化试题数据管理和处理流程,提升系统的稳定性和用户体验。平台支持多用户操作,具备强大的数据处理能力和灵活的扩展性,适用于各类教育机构和考试组织。 ... [详细]
  • 深入解析数据库中的存储过程与触发器技术
    本文深入探讨了数据库中的存储过程与触发器技术。存储过程是一组预编译的SQL语句,经过优化后存储在数据库服务器中,以提高执行效率。在大型数据库系统中,通过调用存储过程的名字,用户可以快速执行复杂的操作,从而提升系统的性能和响应速度。此外,触发器作为一种特殊的存储过程,能够在特定事件发生时自动执行,进一步增强了数据库的自动化管理和数据完整性。 ... [详细]
  • 在C#中开发MP3播放器时,我正在考虑如何高效存储元数据以便快速检索。选择合适的数据结构,如字典或数组,对于优化性能至关重要。字典能够提供快速的键值对查找,而数组则在连续存储和遍历方面表现优异。根据具体需求,合理选择数据结构将显著提升应用的响应速度和用户体验。 ... [详细]
  • Android和iOS的数据库都是用SQLite来实现.一,SQLite数据库简介:轻量级:SQLite数据库是一个轻量级的数据库,适用于少量数据的CURD;文件本质:SQL ... [详细]
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社区 版权所有