JAVA 中String数组赋初值

我定义了一个未知长度的数组:String[] name = new String[]{};
想将数据库中查到的数据赋给这个数组:

for(i = 0;rs.next();i++){
name[i] = rs.getString(1);
}
可是报错:
严重: Exception occurred during processing request: 0
java.lang.ArrayIndexOutOfBoundsException: 0
显示的是: “name[i] = rs.getString(1);”这里出错。为什么?怎么改?

String[] name = new String[]{};

 

 

这样定义数组它的实际长度为0   所以你调用name[0]的时候就已经是数组越界了

你可以打印一个name.length看看就知道了

 

建议你用List<String> name = new ArrayList<String>();来接收,如果必须用数组的话, 可以将list转换成数组

 

 

追问

我不止赋值给一个数组,我的结果集有两列结果,赋值如下:
for(i = 0;rs.next();i++){
name[i] = rs.getString(1);
age[i]=rs.getString(2);
}
age数组的创建方法和name是一样的,name和age也是对应的。这样就没法用list了吧?

追答

那就封装成一个对象
class A {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

List list = new ArrayList();

然后在这里
for(i = 0;rs.next();i++){
A a = new A();
a.setName(rs.getString(1));
a.setAge(age[i]=rs.getString(2));
list.add(a);
}

这只是一个思路

追问

这个思路我想过,可是我还得把这些数据和我页面的数据做对比……
我想做的东西是:在页面中得到一组名字与其对应的年龄,与数据库中的数据做对比,如果有重复的就更改对应的年龄,不重复的添加入在数据库中。所以……

追答

你页面传过来的一们放到List list2 中 然后用for循环比较啊

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-26
这是数组下标溢出的错误。就是你存入的数组长度大于你定义的数组长度。原因是因为你实例化了一个空数组。如果按你所想要的效果的话,应该定义动态长度的数组来接受,而这个长度则刚好是你从数据库获取的数组元素个数。如下代码:
//从数据库取得结果集rs
String[] name=new String[rs.getRow()];
for(i = 0;rs.next();i++){
name[i] = rs.getString(1);//后面这段代码直接拿你的,你这里取值赋值为同一个值也得自己更改下
}追问

好像rs.getRow()方法得到的是当前的行数,而不是总行数吧?
我通过rs.last()方法,然后int length = rs.getRow();得到总行数。
可是,我想重新得到该结果集的数据怎么办?
用rs.first();还是rs.beforeFirst()?

本回答被提问者采纳
第2个回答  2013-11-26
数组下标越界
数组是不允许扩充空间的,创建时需指定数组空间大小。你看你的循环语句,明显会出错!
改用集合形式才可以实现,最后转化成数组!
List<String> list=new ArrayList<String>();
while(rs.next()){
list.add(rs.getString(1));
}
Object[] objects = list.toArray();
不知道你能不能看懂javaSE!
你写的循环语句,也不是标准的开发形式,往往采用next()方法取值:自动取出当前记录,并移动游标判断是否还有记录。
还有就是往往不采用rs.getString(index)提取,而是采用rs.getString("列名")的形式取出数据
第3个回答  2013-11-26
凡是new 的都在在堆中开辟内存的
你定义的是一个静态一维数组 里面是空的(因为你带了{ } 号)
不过也有内存 他的内存空间是在堆中的
String str[ ] = new String[10]; 像这样 是一个 动态的
它在堆中开辟了10 个空间 且他们的地址是连续的 空间大小都是一致的
第4个回答  2013-11-26
没有定义数组的长度 所以导致java.lang.ArrayIndexOutOfBoundsException 报错
相似回答