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

Android应用访问SQLBASE数据库特殊字符乱码问题求助

解决Android中SQLBASE数据库特殊字符乱码问题

能否正常访问含特殊字符的数据?

可以正常访问,乱码是字符编码不匹配导致的,只要调整编码配置或转换逻辑就能解决。

解决方法

  • 在JDBC连接URL中指定字符集
    SQLBASE的JDBC驱动支持通过连接参数指定字符编码,修改你的连接URL,添加对应参数(不同版本驱动参数可能为charSet或encoding),示例:

    // 假设原URL是jdbc:sqlbase://192.168.1.100:2155/mydb,添加字符集参数
    // 若数据库用UTF-8:
    jdbc:sqlbase://192.168.1.100:2155/mydb?charSet=UTF-8
    // 若数据库用ISO-8859-1(Latin1):
    jdbc:sqlbase://192.168.1.100:2155/mydb?charSet=ISO-8859-1
    

    确保参数和数据库实际使用的字符集一致。

  • 手动编码转换(当连接参数无效时)
    如果驱动不支持通过URL指定编码,读取字段时先获取字节数组再转换为对应编码的字符串:

    // 替换原daten.Bezeichnung = rs.getString("bezeichnung1");
    byte[] rawBytes = rs.getBytes("bezeichnung1");
    // 假设数据库存储编码为ISO-8859-1,转换为UTF-8字符串
    daten.Bezeichnung = new String(rawBytes, "ISO-8859-1");
    

    注意:需要确认SQLBASE数据库实际使用的字符编码(比如Windows-1252、UTF-8等),再选择对应的转换编码。

  • 修复SQL注入风险(附带优化)
    你当前代码通过字符串拼接生成SQL,不仅有注入风险,还可能引发编码相关问题,改用PreparedStatement参数绑定:

    String sql = "SELECT titel_nr, bezeichnung1, isbn, loesch_datum "
            + "FROM sysadm.titel "
            + "WHERE mandant = ? AND (isbn = ? OR ean_nr = ? OR titel_nr LIKE ?)";
    PreparedStatement ps = conn.prepareStatement(sql);
    ps.setString(1, config.CONFIG_MANDANT);
    ps.setString(2, barcode);
    ps.setString(3, barcode);
    ps.setString(4, "%" + barcode + "%"); // LIKE查询需加通配符的话在这里处理
    ResultSet rs = ps.executeQuery();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:50:07