首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我在switch查询中的case不总是被执行?

在switch查询中,case不总是被执行的原因可能有以下几种情况:

  1. 没有匹配的case值:如果switch表达式的值与任何一个case的值都不匹配,那么switch语句将不会执行任何case块。这时可以考虑添加一个default块,作为没有匹配的情况下的默认处理逻辑。
  2. 没有break语句:在每个case块的末尾,应该添加break语句来终止当前case的执行并跳出switch语句。如果没有break语句,程序将会继续执行下一个case块,直到遇到break语句或者switch语句结束。这种情况下,可以通过在每个case块的末尾添加break语句来解决。
  3. case值重复:如果多个case的值相同,那么只有第一个匹配的case块会被执行,后面的相同值的case块将被忽略。如果需要多个case块执行相同的逻辑,可以将它们放在一起,不需要使用break语句。
  4. switch表达式类型不匹配:switch表达式的类型必须与case值的类型相同或者可以进行隐式转换。如果类型不匹配,那么case块将不会被执行。可以检查switch表达式和case值的类型是否一致,如果不一致,可以进行类型转换或者使用合适的类型进行比较。
  5. switch表达式为null:如果switch表达式为null,那么将会抛出NullPointerException异常,导致switch语句无法执行。可以确保switch表达式不为null,或者在使用之前进行null判断。

总结起来,要确保在switch查询中的case被执行,需要注意以下几点:确保有匹配的case值,每个case块末尾添加break语句,避免case值重复,确保switch表达式类型匹配,确保switch表达式不为null。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【用户、角色、权限】模块如何查询拥有某角色用户

用户与角色是多对多关系, 一个角色可以被赋予给多个用户,一个用户也可以拥有多个角色; 查询拥有某角色所有用户, 如果用leftjoin查询,会造成重复记录: 举例错误做法: select...`create_time` desc limit 38; 这个查询虽然用到了(or `system_user_role`.`role_id` is null )防止结果缺失,但会有重复记录出现!...如果一个用户, 被赋予了角色(id为6ce3c030-a2e0-11e9-8bdc-495ad65d4804) 该用户又被赋予了另一个角色(id为其他值) 那么这个查询中会查出该用户, 违背了我们需求...system_user_role.user_id and system_user_role.role_id = '6ce3c030-a2e0-11e9-8bdc-495ad65d4804' ); 这个做法用到了not exists子查询...注意:这样查询是可以设置与父查询关联条件(where system_user.id = system_user_role.user_id) 这种查询比(not in)查询要快多!

2.6K20

为什么建议复杂但是性能关键表上所有查询都加上 force index

对于 MySQL 慢 SQL 分析 之前文章,提到过 SQL 调优一般通过下面三个工具: EXPLAIN:这个是比较浅显分析,并不会真正执行 SQL,分析出来可能不够准确详细。...但是不能直观看出来为啥会走错索引,需要通过 OPTIMIZER TRACE 进行进一步定位。但是进一步定位之前,想先说一下 MySQL InnoDB 查询优化器数据配置。...即每次更新,随机采集表以及表每个索引 20 页数据,用于估算每个索引查询消耗是多大以及全表扫描消耗是多大,控制单个表配置是 STATS_SAMPLE_PAGES( CREATE TABLE...这也引出了一个新可能大家也会遇到问题,原有索引基础上,加了一个复合索引(举个例子就是原来只有 idx_user_id,后来加了 idx_user_status_pay),那么原来只按照 user_id...所以最好一开始就能估计出大表量级,但是这个很难。 结论和建议 综上所述,建议线上对于数据量比较大表,最好能提前通过分库分表控制每个表数据量,但是业务增长与产品需求都是不断迭代并且变复杂

1.3K20

C语言中分支与循环

因为这就是悬空else问题,如果出现了多个if和else,就会有这样一条规则,else总是跟最近if匹配。这也就是为什么上述代码最终什么都不输出原因。...,如下: 在上述代码,需要注意点有: 一、case 和后面的数字之间必须有空格 二、每个case语句执行完成后,需要加上一个break,才能跳出这个switch语句 在上面的代码,如果去掉了break...因为switch语句也是有分支效果,只有语句中使用了break,才可以跳出switch语句,如果某一个case语句后面没有break语句,代码将继续执行下去,有可能执行其他语句中代码,直到遇到了...break或者switch语句结束,所以上述代码,还执行了case 1和case 2。...switch语句中default: 使用switch语句中也会遇到一种情况,switch表达式值无法匹配代码case语句,这时要不不做处理,要不就在switch语句中加入default语句

7110

深入JavaScript,编写高质量JavaScript代码基本要点

switch模式 var inspect_me = 0,result = '';switch (inspect_me) {case 0:result = "zero";break;case 1:result...= "one";break;default:result = "unknown";} 这个简单例子中所遵循分割约定如下: 每个caseswitch对齐 每个case中代码缩进 每个case...避免隐式类型转换 JavaScript变量比较时候会隐式类型转换。这就是为什么一些诸如:false == 0 或 “” == 0 返回结果是true。...当字符串以”0″开头时候就有可能会出问 题,例如,部分时间进入表单域,ECMAScript 3,开头为”0″字符串被当做8进制处理了,但这已在ECMAScript 5改变了。...为了避免矛盾和意外结果,总是指定基数参数。

51820

为什么switchcase没有break不行

前言 一个小姐姐拿着一个switch选择题来问我。 之所以这么笃定地回答这个问题,并不是知道其中原理,而是之前一个群里,有人问了同类型问题,瞥了一眼记住了答案,所以才依葫芦画瓢。...小姐姐接着问我为什么说少个break,但凡再问一句:为什么少个break结果就不一样,就回答不出来了。所以,为了将尴尬扼杀于摇篮,还是研究一下breakswitch作用。...javac编译和javap查看: 「tableswitch」和「lookupswitch」都用于switch条件跳转,前者用于case值连续,例如上面代码0、1、2;后者用于case连续。...从字节码可以看出:switchcase条件和对应代码块是分开。...再写代码样例,这次代码给每个case都加上break。

69220

详解分支和循环结构(剖析if语句,switch语句,while循环,for循环,do-while循环)

分支结构 if语句 if(表达式) 语句1 else 语句2 表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句执⾏ C语⾔,0为假,⾮0表⽰真,也就是表达式结果如果是...} 若expression没有与之对应value则执行default switch语句中case和default顺序问题 switch语句中 case ⼦句和 default⼦句有要求顺序吗...其实, switch 语句中 case语句和default语句是没有顺序要求,只要你顺序是满足实际需求就可以。 不过我们通常是把 default ⼦句放在最后处理。...注: • switch expression 必须是整型表达式 • case值,必须是整形常量表达式 为什么输入4会出现图中错误呢?...整个循环过程,表达式1初始化部分只被执行1次,剩下就是表达式2、循环语句、表达式3循环。

16410

C语言分支和循环语句

另外,C语言中,0表示假,非0表示真,也就是输出结果为0,则语句执行,表达式结果不是0,则语句执行。        ...原因是 switch 语句也是分⽀效果,只有 switch 语句中使⽤ break 才能在跳出 switch 语 句,如果某⼀个 case 语句后边没有 break 语句,代码会继续玩下执⾏,有可能执...就⽐如上⾯代码就执⾏了 case 2 语句。 所以 switch 语句中 break 语句是⾮常重要,能实现真正分⽀效果。...4.3 switch语句中default switch 语句中 case 语句和 default 语句是没有顺序要求,只要你顺序是满⾜实 际需求就可以。...表达式3用于循环变量调整 整个循环过程,表达式1只被执行一次,剩下就是表达式2,循环语句,表达式3

11810

带你走进从零认识JavaScript到精髓(五)JavaScript 分支语句

语句作用是告诉浏览器该做什么。 分号 分号用于分隔 JavaScript 语句。 通常我们每条可执行语句结尾添加分号。 使用分号另一用处是一行编写多条语句。...随后表达式值会与结构每个 case 值做比较。如果存在匹配,则与该 case 关联代码块会被执行。请使用 break 来阻止代码自动地向下一个 case。...case穿透 由于switch case语句比较时候用是全等 语法: /* switch-case 选择结构 条件是一个具体数据,使用具体数据和case数据进行全等比较 switch...case "A":// 没有case添加break;。...; 世界上最痴心等待,就是你是switchcase,或许永远选上自己,但是永远相伴。

43200

c语言从入门到实战——分支和循环

输出结果是:什么都不输出。 为什么呢? 这就是悬空 else 问题,如果有多个 if 和 else ,可以记住这样一条规则, else 总是跟最接近 if 匹配。...5.2 switch语句中break 前面的代码,如果我们去掉case语句中break,会出现什么情况呢?...就比如上面的代码就执行了 case2 语句。 所以 switch 语句中 break 语句是非常重要,能实现真正分支效果。...5.3 switch语句中default 使用 switch 语句时候,我们经常可能遇到一种情况,比如 switch表达式值无法匹配代码 case 语句时候,这时候要不就不做处理,...整个循环过程,表达式1初始化部分只被执行1次,剩下就是表达式2、循环语句、表达式3循环。

10610

全国二级C知识点总结2-C程序结构

2.知识点:if语句嵌套 l 内嵌结构,else总是与前面最近且未曾配对if语句配对,组成一对if-else语句。...4.知识点:switch语句 l switch语句圆括号表达式值必须是整型或字符型,不能为实型。 l case表达式可以是求得整型和字符型常量表达式,但不能含有变量。...然后,继续划分循环体内语句,如果循环体内语句只有一条switch语句,其内部出现了break,遇到break,要结束当前switch语句执行,继续执行下一次循环。...当s=1时,执行case 1,case 2,由于case 1后面没有break,会继续执行case 2,遇到break,退出switch;当s=2时,执行case 2,退出switch;当s=3时,执行...当s=1时,执行case 1,case 2,由于case 1后面没有break,会继续执行case 2,遇到break,退出switch;当s=2时,执行case 2,退出switch;当s=3时,执行

58620

Java中所有的关键字及用法

无效") } switch,查找name相同值,如果不管找找得到都break,跳出。...注意:表达式值不可以是long型数据,否则会导致编译错误。 2、switch语句中,如果表达式值和case后面的常量值相同,则执行其后语句,直到遇到break语句或执行至switch完结为止。...不管有没有异常被抛出、捕获,finally块都会被执行。try块内容是无异常时执行到结束。catch块内容,是try块内容发生catch所声明异常时,跳转到catch块执行。...throws 用来声明一个方法可能抛出所有异常信息,将异常声明但是处理,而是将异常往上传,谁调用就 交给谁处理。 try 出现在方法体,它自身是一个代码块,表示尝试执行代码块语句。...语句总是和方法有密切关系,return语句总是用在方法,有两个作用,一个是返回值方法指定类型值(这个值总是确定),一个是结束方法执行(仅仅返回一个return)。

26420

Go语言核心36讲(Go语言进阶技术十二)--学习笔记

for语句中,总是会对紧挨在当次迭代对应元素后边那个元素,进行重新赋值,新值会是这两个元素值之和。...好了,要公布答案了。打印内容会是[7 3 5 7 9 11]。先来重现一下计算过程。当for语句被执行时候,range关键字右边numbers2会先被求值。...刚才说过,只要switch表达式结果值与某个case表达式任意一个子表达式结果值相等,该case表达式所属case子句就会被选中。...当然了,如果被选中case子句附带语句列表包含了fallthrough语句,那么紧挨它下边那个case子句附带语句也会被执行。...在上一个问题阐述还重点表达了一点,不知你注意到了没有,那就是:switch语句case子句选择上是具有唯一性

38501

偏执却管用10条Java编程技巧

不要相信“-1” 知道这很偏执,Javadoc关于 String.indexOf() 早期描述是这样… “字符字符序列第一次出现位置将作为结果[被返回],如果字符不存在则返回-1。...也许某个特定场合下他们将会需要另一种 编码值,如果区分大小写的话,otherString 就会被包含进去…此时或许可以返回 -2呢?谁知道呢。...所以说偏执是有好处。 9.总是switch语句里加上default Switch…作为最滑稽表达式之一,不知道是该心存敬畏还是默默哭泣。...不管怎样,我们既然无法摆脱 switch必要时候我们最好能够正确使用它,例如: Java代码 // Bad switch (value) { case 1: foo(); break...10.用大括号隔开switch每一个case块 事实上,switch是最坑爹语句,任何喝醉了或是赌输了的人都可以某种语言中使用它。

74670

轻松拿捏C语言——分支语句

; return 0; } C语言中,0为假,非0表示真,也就是表达式结果如果是0,则语句执行,表达式结果如果不是0,则语句执行。...,都会被执行。...但是当你去运行代码,输出结果是:什么都不输出。 为什么呢? 这就是悬空 else 问题,如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近 if 匹配。...3.2switch语句中break switch 语句也是分支效果,只有 switch 语句中使用 break 才能在跳出 switch 语 句,如果某⼀个 case 语句后边没有 break...如果switch表达式值无法匹 配代码 case 语句时候,这时候要不就不做处理,要不就得 switch 语句中加入 default 子句。

6310

滚雪球学Java(12):JavaSE-if条件语句入门指南:掌握代码分支流程!

条件语句是Java一种常见控制结构,用于根据条件来执行不同代码块。摘要本文将介绍Java条件语句,包括if语句、if-else语句、if-else-if语句和switch语句。...内容if语句if语句是最基本条件语句,Java语法如下:if (condition) { // 如果条件为真,则执行这里代码}其中,condition是一个可以求值为布尔类型表达式。...if-else语句中,else代码块总是if代码块后面,建议将else代码块放在if代码块下一行。注意if-else-if语句中各个条件顺序,将最常见情况放在前面,可以提高代码效率。...switch语句中,要记得每个case语句都要有一个break语句,避免出现不必要执行。...以上是if语句一些常用用法和注意事项。实际编程,if语句经常被用来处理不同条件分支,如判断用户输入是否合法、处理异常情况、实现不同逻辑分支等。

10821
领券