类似switch的条件语句ps(case)

本文介绍了一种基于不同字段类型的数据库查询方法。通过条件判断选择执行不同的SQL语句来获取字符串类型、日期类型、长整型及数值类型的数据。此方法适用于多种应用场景,如应用程序初始化时加载配置等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    Evaluate &str_init_db_type
      When "1"
         SQLExec("SELECT TZ_APP_ATTR_STR FROM PS_TZ_APP_ATTR_DHW WHERE TZ_APP_INS_ID = :1 AND TZ_APP_ATTR_ID = :2", &int_app_ins_num, &str_init_field_name, &str_init_field_value);
         Break;
      When "2"
         SQLExec("SELECT TO_CHAR(TZ_APP_ATTR_DATE,'YYYY/MM/DD') FROM PS_TZ_APP_ATTR_DAT WHERE TZ_APP_INS_ID = :1 AND TZ_APP_ATTR_ID = :2", &int_app_ins_num, &str_init_field_name, &str_init_field_value);
         Break;
      When "3"
         SQLExec("SELECT TZ_APP_ATTR_LONG FROM PS_TZ_APP_ATTR_ARE WHERE TZ_APP_INS_ID = :1 AND TZ_APP_ATTR_ID = :2", &int_app_ins_num, &str_init_field_name, &str_init_field_value);
         Break;
      When "4"
         SQLExec("SELECT TZ_APP_ATTR_NUM FROM PS_TZ_APP_ATTR_NUM WHERE TZ_APP_INS_ID = :1 AND TZ_APP_ATTR_ID = :2", &int_app_ins_num, &str_init_field_name, &str_init_field_value);
         Break;
      End-Evaluate;
<think>我们正在处理用户的问题:用户遇到了Java中"duplicate case label"(重复的case标签)的编译错误,想要知道如何解决。 根据用户提供的引用[2]和[3]以及我们自己的知识,我们可以知道: 在Java的switch语句中,不允许有两个相同的case常量。也就是说,每个case标签必须唯一。 引用[2]中描述了一个场景:用户可能在多个case标签中使用了相同的值,比如: case 1: ... case 2: ... case 1: ... // 这里重复使用了1,会导致编译错误 同样,在引用[3]中,虽然讨论的是C/C++中字符串作为case标签的问题,但也提到了重复标签的问题。 因此,我们需要指导用户检查他们的switch语句,确保每个case标签的值都是唯一的。 解决方案步骤: 1. 检查switch语句中所有case标签的值,找出重复的值。 2. 修改代码,确保每个case标签的值都是唯一的。 3. 如果是因为多个case需要执行相同的代码块,可以考虑使用fall-through(即不使用break,让多个case共享同一段代码)或者合并case标签(Java 7以后支持字符串switch,Java 12以后支持更复杂的模式,但基本常量值必须唯一)。 另外,注意:在Java中,switchcase标签可以是byte, short, char, int(及其包装类),枚举常量,字符串(Java 7及以上)等。但是,不允许重复的常量值。 示例: 错误示例: int day = 3; switch (day) { case 1: System.out.println("Monday"); break; case 2: System.out.println("Tuesday"); break; case 1: System.out.println("Another Monday?"); break; // 这里重复了case 1 default: System.out.println("Invalid day"); } 正确做法: // 如果确实需要两个不同的case执行相同的代码,可以这样写: switch (day) { case 1: case 2: // 注意,这里case 1和case 2都会执行下面的代码 System.out.println("Weekday"); break; case 3: System.out.println("Wednesday"); break; // ... 其他case } 或者,如果两个case需要执行不同的代码,那么必须确保标签值不同。 因此,我们给用户的建议是:检查并确保每个case标签的值都是唯一的。如果多个case需要执行相同的代码,可以将它们合并(多个case写在一起,然后执行同一段代码)。 另外,注意在Java 12中引入了switch表达式,可以使用箭头语法,并且允许多个常量在一个case中,例如: case 1, 2 -> System.out.println("Weekday"); 这样写更清晰。 所以,根据用户使用的Java版本,可以有不同的写法。 总结: 1. 检查重复的case值,修改为唯一值。 2. 如果多个case需要执行相同代码,使用fall-through(多个case写在一起)或者使用逗号分隔多个常量(Java 12及以上)。 现在,我们按照用户要求生成相关问题: §§相关问题§§ 1. Java的switch语句支持哪些数据类型? 2. 如何在Java的switch语句中合并多个case? 3. Java 12中switch表达式有哪些新特性?</think>### Java case标签重复错误解决方法 在Java中,当switch语句中出现相同的case常量值时,编译器会抛出"duplicate case label"错误。这是因为每个case标签必须是唯一的常量表达式。以下是解决方案和示例: #### 错误示例 ```java int num = 2; switch (num) { case 1: System.out.println("One"); break; case 2: System.out.println("Two"); break; case 2: System.out.println("Duplicate!"); break; // 编译错误:重复的case标签 default: System.out.println("Default"); } ``` #### ✅ 解决方案 1. **检查重复值** 确保所有case标签的值唯一: ```java switch (num) { case 1: ... break; case 2: ... break; // 值2只能出现一次 case 3: ... break; } ``` 2. **合并相同逻辑的case(Java 12+)** 使用逗号分隔多个匹配值: ```java switch (num) { case 1, 3 -> System.out.println("奇数"); // Java 12+箭头语法 case 2, 4 -> System.out.println("偶数"); } ``` 3. **传统fall-through写法** 多个case共享同一段代码: ```java switch (num) { case 1: case 3: // 无break,执行相同逻辑 System.out.println("奇数"); break; case 2: case 4: System.out.println("偶数"); break; } ``` #### ⚠️ 注意事项 - 常量类型必须匹配:`case`值需与`switch`变量类型一致(如`int`、`enum`、`String`等) - 避免隐式类型转换导致的重复,如`case 'A':`和`case 65:`(ASCII值相同)会冲突 - 枚举场景需确保枚举常量名称不重复[^2] > **关键原则**:每个`case`标签必须是**编译时可确定的唯一常量值**,这是Java语言规范的基本要求[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值