(六)组合查询—机房收费系统

本文介绍了一种针对数据库查询的优化方法,通过使用Select Case语句来转换字段名称,并根据不同的条件组合形成SQL查询语句,提高了查询效率。

前提:

写代码有的时候会执行的次数很多,所以需要优化,让运行变得更快。

内容:

在串一遍组合查询的思路

任务一:进行关联性判断,(就是如果第一个“与”“或”之不存在,就只执行第一行,,如果第二个“与”“或”不存在,就执行两行,否则执行第三行

任务二:进行判断,信息不完整不能有空值,(例如:在只执行第一行的前提下,就绝不执行第一行有空值

任务三:查询(将所有的查询写出)

任务四:显示(代码如下)

'任务四: 显示信息


   With myFlexGrid1
                .Rows = 1
'                .CellAlignment = 4
    '            居中显示
                .TextMatrix(0, 0) = "卡号"
                .TextMatrix(0, 1) = "姓名"
                .TextMatrix(0, 2) = "上机日期"
                .TextMatrix(0, 3) = "上机时间"
                .TextMatrix(0, 4) = "下机日期"
                .TextMatrix(0, 5) = "下机时间"
                .TextMatrix(0, 6) = "消费金额"
                .TextMatrix(0, 7) = "余额"
                .TextMatrix(0, 8) = "备注"
                
                
    '            任务四:显示查询数据
    
                Do While Not mrc.EOF
    '                一直执行到最后条记录
                    .Rows = .Rows + 1
    '                可防止空白行的出现
'                    .CellAlignment = 4
    '                居中显示
                    .TextMatrix(.Rows - 1, 0) = Trim(mrc.Fields(1))
                    .TextMatrix(.Rows - 1, 1) = Trim(mrc.Fields(2))
                    .TextMatrix(.Rows - 1, 2) = Trim(mrc.Fields(6))
                    .TextMatrix(.Rows - 1, 3) = Trim(mrc.Fields(7))
                    If IsNull(mrc.Fields(8)) Then
                    .TextMatrix(.Rows - 1, 4) = ""
                    Else
                    .TextMatrix(.Rows - 1, 4) = Trim(mrc.Fields(8))
                    End If
                    If IsNull(mrc.Fields(9)) Then
                    .TextMatrix(.Rows - 1, 5) = ""
                    Else
                    .TextMatrix(.Rows - 1, 5) = Trim(mrc.Fields(9))
                    End If
                    .TextMatrix(.Rows - 1, 6) = Trim(mrc.Fields(11))
                    .TextMatrix(.Rows - 1, 7) = Trim(mrc.Fields(12))
                    .TextMatrix(.Rows - 1, 8) = Trim(mrc.Fields(13))
                 
                    mrc.MoveNext
    '                    移动到下一条数据
                Loop
            End With
            
        mrc.Close


之前的时候写的很多人后一点的减少,成了这个样子。

数据库查询的优化代码

<span style="font-size:24px;"><span style="font-size:24px;">Public str,  str1,str2 As String</span></span>
<span style="font-size:24px;"><span style="font-size:24px;"> </span><pre name="code" class="vb"><span style="font-size:24px;">Select Case str
            Case "卡号"
                str = "cardno"
            Case "姓名"
                str = "studentname"
            Case "上机日期"
                str = "ondate"
            Case "上机时间"
                str = "ontime"
            Case "下机日期"
                str = "offdate"
            Case "下机时间"
                str = "offtime"
            Case "消费金额"
                str = "consume"
            Case "余额"
                str = "cash"
            Case "备注"
                str = "status"
            Case Else
                str = ""
End select
</span></span>


<span style="font-size:24px;"><span style="font-size:24px;">Select Case str1
            Case "卡号"
                str1 = "cardno"
            Case "姓名"
                str1 = "studentname"
            Case "上机日期"
                str1 = "ondate"
            Case "上机时间"
                str1 = "ontime"
            Case "下机日期"
                str1 = "offdate"
            Case "下机时间"
                str1 = "offtime"
            Case "消费金额"
                str1 = "consume"
            Case "余额"
                str1 = "cash"
            Case "备注"
                str1 = "status"
            Case Else
                str1= ""</span></span>
<span style="font-size:24px;"><span style="font-size:24px;">End select</span></span>

str2的select case 同理
                        
  
<span style="font-size:24px;">If Combo1.Text = "" Or Combo4.Text = "" Or Text1.Text = "" Then MsgBox "第一行信息不完整,请重新输入。", vbOKOnly + vbExclamation, "提示": Exit Sub</span>

<span style="font-size:24px;">If Combo2.Text = "" Or Combo5.Text = "" Or Text2.Text = "" Then MsgBox "第二行信息不完整,请重新输入。", vbOKOnly + vbExclamation, "提示": Exit Sub</span>

<span style="font-size:24px;">If Combo3.Text = "" Or Combo6.Text = "" Or Text3.Text = "" Then MsgBox "第三行信息不完整,请重新输入。", vbOKOnly + vbExclamation, "提示": Exit Sub</span>

<span style="font-size:24px;"> txtSQL = "select * from line_Info where " & str & Combo4.Text & "'" & Trim(Text1.Text) & "' " & one & str1 & Combo5.Text & "'" & Trim(Text2.Text) & "'" & two & str2 & Combo6.Text & "'" & Trim(Text3.Text) & "'"
        Set mrc = ExecuteSQL(txtSQL, MsgText)
        If mrc.EOF Then
            MsgBox "没有信息", vbOKOnly + vbExclamation, "提示"</span>

进一步优化的代码

<span style="font-size:24px;">s = 0
If one = "" Then
    
    If Combo1.Text = "" Or Combo4.Text = "" Or Text1.Text = "" Then MsgBox "第一行信息不完整,请重新输入。", vbOKOnly + vbExclamation, "提示": Exit Sub
    txtSQL = "select * from line_Info where " & Co(Combo1.Text) & z & Combo4.Text & "'" & Trim(Text1.Text) & "' "
            Set mrc = ExecuteSQL(txtSQL, MsgText)
ElseIf two = "" Then
     
     If Combo2.Text = "" Or Combo5.Text = "" Or Text2.Text = "" Then MsgBox "第二行信息不完整,请重新输入。", vbOKOnly + vbExclamation, "提示": Exit Sub
     txtSQL = "select * from line_Info where " & Co(Combo1.Text) & z & Combo4.Text & "'" & Trim(Text1.Text) & "' " & one & Co(Combo2.Text) & x & Combo5.Text & "'" & Trim(Text2.Text) & "'"
      Set mrc = ExecuteSQL(txtSQL, MsgText)
Else
     
     If Combo3.Text = "" Or Combo6.Text = "" Or Text3.Text = "" Then MsgBox "第三行信息不完整,请重新输入。", vbOKOnly + vbExclamation, "提示": Exit Sub
     txtSQL = "select * from line_Info where " & Co(Combo1.Text) & z & Combo4.Text & "' " & Trim(Text1.Text) & "' " & one & Co(Combo2.Text) & x & Combo5.Text & "'" & Trim(Text2.Text) & "' " & two & Co(Combo3.Text) & y & Combo6.Text & "'" & Trim(Text3.Text) & "'"
     Set mrc = ExecuteSQL(txtSQL, MsgText)
End If
        If mrc.EOF Then
            MsgBox "没有信息", vbOKOnly + vbExclamation, "提示"
        End If</span>


select case

用在了模块里

<span style="font-size:24px;">Public Function Co(str)
        s = s + 1 '第几次执行
        Select Case str
            Case "卡号"
                str = "cardno"
            Case "姓名"
                str = "studentname"
            Case "上机日期"
                str = "ondate"
            Case "上机时间"
                str = "ontime"
            Case "下机日期"
                str = "offdate"
            Case "下机时间"
                str = "offtime"
            Case "消费金额"
                str = "consume"
            Case "余额"
                str = "cash"
            Case "备注"
                str = "status"
            Case Else
                str = ""
                        
        End Select
If s = 1 Then
z = str
ElseIf s = 2 Then
x = str
Else
y = str
End If


End Function</span>

总结:

机房的组合查询还没有进一步的优化,目前基本功能实现了,优化下文待续。

内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
评论 19
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值