在解析数据库中一个字段的数据的时候总是报数组越界(ava.lang.StringIndexOutOfBoundsException: String index out of range: -6)这个错误,具体情况:
数据库中有4W多条数据,我要比较a字段和b字段中是否有相同部分,用到了字符串的substring()方法
我测试过多次,但每次报错的数据都不一样,都报数组越界的错。
IR_SID IR_SRCNAME
----------- -------------------------
5963 JB 3540-1983 ;
IR_SID IR_SRCNAME
----------- -------------------------
7216 JB/T 8648.2-1997 ;
IR_SRCNAME的数据是我要用substring()方法处理的数据,运行一次会报处理JB 3540-1983出现数组越界的错,再重新运行一次会报处理JB/T 8648.2-1997出现数组越界的错,运行多少次就会出现多少次不同的数据报错,并且都是数组越界,我的问题是如果真的是某个数据或者某些数据在用substring()处理的时候有错的话应该是一直报错,为什么运行一次就报不同的数据有错呢?
下面是具体代码:
conn = DBConnectionManager.getInstance().getConnection();String sql = "select IR_SID,IR_URLTITLE,IR_SRCNAME from URLCONTENT";SQLHelper.conn = conn;list = SQLHelper.ExecuteReader(sql, null);for(int i = 0 ; i < list.size(); i ++){Object[] obj = (Object[]) list.get(i);id = Integer.parseInt(obj[0].toString());urltitle = ((String) obj[1]).trim();if(obj[2] == null||"".equals(((String) obj[2]).trim())){ srcnames = "";}else{ srcnames = ((String) obj[2]).trim();}String titlenum = null;String newcol = "";if(!urltitle.contains("-")){ urltitle = urltitle+"-";} titlenum = (urltitle.substring(urltitle.lastIndexOf(" ")+1, urltitle.lastIndexOf("-"))).trim(); if(srcnames!=null){ String[] srcname = srcnames.split(";"); for(int j = 0 ; j < srcname.length ; j ++){ if(srcname[j]!=null&&srcname[j].length()!=0){ if(!srcname[j].trim().contains("-")){ srcname[j] = srcname[j].trim()+"-"; } String srcnum = (srcname[j].trim().substring(srcname[j].trim().lastIndexOf(" ")+1, srcname[j].trim().lastIndexOf("-"))).trim(); if(srcnum.equals(titlenum)){ newcol = srcname[j].trim(); } } } } updatesql.append("update URLCONTENT set col='"+newcol+"' where IR_SID="+id+";");}connect = DBConnectionManager.getInstance().getConnection();SQLHelper.conn = connect;SQLHelper.ExecuteNonQuerys(updatesql.toString(), null);System.out.println("执行完毕!");
------解决方法--------------------------------------------------------
select IR_SID,IR_URLTITLE,IR_SRCNAME from URLCONTENT
你查询出来的数据并没有按照指定条件排序,所以查询出来的结果集的顺序也不同
所以每一次都不一样
------解决方法--------------------------------------------------------
select IR_SID,IR_URLTITLE,IR_SRCNAME from URLCONTENT where IR_SID = 5963
然后跟踪调试程序看看是什么情况。