问题描述:
向DB2数据库中一varchar类型字段中插入一条String类型数据,程序使用String.length()来进行数据的长度校验,如果数据是纯英文,没有问题,但是如果数据中包含中文,校验可以通过,但是在数据入库时经常会报数据超长。
问题分析:
既然问题是数据超长,那么问题应该就是出在数据长度校验上,也就是出在String.length()这个方法上。
解决方式:
既然是判断数据长度时以字符为标准导致出错,那么思路就很明确了,在进行数据长度校验时,取数据的字节长度
/** * 判断传进来的字符串,是否 * 大于指定的字节,如果大于递归调用* 直到小于指定字节数 * @param s * 原始字符串 * @param num * 传进来指定字节数 * @return String 截取后的字符串 */ public static String substr(String s,int num){int changdu = s.getBytes().length;if(changdu > num){s = s.substring(0, s.length() - 1);s = substr(s,num);}return s;}最后字符串处理如下
String error = tTbWorkFlowUI.mErrors.getFirstError();int i = error.indexOf("<br>");int j = error.lastIndexOf("<br>");error = error.substring(i + 4, j);error = error.replaceAll("<br>", ",");try {if(error.getBytes("utf-8").length>999){error=substr(error, 900);}} catch (UnsupportedEncodingException e) {e.printStackTrace();}