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
相关产品推荐
相关产品推荐

