You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Switch Case转换为While循环并从数据库获取目的地数据

解决方案:用数据库存储+内存映射替代硬编码Switch

核心思路

把目的地编码与名称的映射关系从代码硬编码转移到数据库存储,通过一次性加载数据库数据到内存Map(用while遍历结果集完成初始化),后续直接通过编码快速获取名称,既简化代码,又提升维护性与性能。

代码实现

1. 初始化加载数据库映射(应用启动时执行一次)

先从数据库读取所有目的地数据,用while遍历结果集填充到内存Map中:

// 全局缓存映射,多线程环境建议用ConcurrentHashMap保证线程安全
private static final Map<String, String> DESTINATION_MAP = new ConcurrentHashMap<>();

// 初始化方法,在应用启动阶段调用
public void initDestinationMapping() {
    String querySql = "SELECT code, name FROM destinations"; // 假设数据库表名为destinations,字段code(编码)、name(名称)
    
    try (Connection conn = DriverManager.getConnection("你的数据库URL", "用户名", "密码");
         PreparedStatement stmt = conn.prepareStatement(querySql);
         ResultSet rs = stmt.executeQuery()) {
        
        // 用while遍历结果集,填充映射表
        while (rs.next()) {
            String code = rs.getString("code");
            String name = rs.getString("name");
            DESTINATION_MAP.put(code, name);
        }
    } catch (SQLException e) {
        // 实际项目中建议用日志框架记录异常,而非直接打印
        e.printStackTrace();
    }
}

2. 获取目的地名称(替代原Switch逻辑)

直接从缓存Map中获取,找不到则返回默认提示:

String targetCode = gettingcarValue.getNameDestination();
String nameDestination = DESTINATION_MAP.getOrDefault(
    targetCode, 
    "Location not found: " + targetCode
);

备选方案:实时查询数据库(不推荐,性能较低)

如果必须每次都从数据库查询(比如数据实时变动且无法缓存),也可以用while遍历结果集获取匹配数据:

String targetCode = gettingcarValue.getNameDestination();
String nameDestination = "Location not found: " + targetCode;
String querySql = "SELECT name FROM destinations WHERE code = ?";

try (Connection conn = DriverManager.getConnection("你的数据库URL", "用户名", "密码");
     PreparedStatement stmt = conn.prepareStatement(querySql)) {
     
    stmt.setString(1, targetCode);
    try (ResultSet rs = stmt.executeQuery()) {
        // 结果集最多一条,while遍历获取
        while (rs.next()) {
            nameDestination = rs.getString("name");
        }
    }
} catch (SQLException e) {
    e.printStackTrace();
}

方案对比

  • 缓存Map方案:性能最优(O(1)查询),仅初始化时查一次数据库,适合目的地数据不频繁变动的场景,是首选方案。
  • 实时查询方案:每次查询都走数据库,性能较差,仅适合数据实时更新且无法缓存的极端场景。

内容的提问来源于stack exchange,提问作者RockyRay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:31:16