JAVA 中String数组赋初值

我定义了一个未知长度的数组:String[]name=newString[]{};想将数据库中查到的数据赋给这个数组:for(i=0;rs.next();i++){nam... 我定义了一个未知长度的数组: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);”这里出错。为什么?怎么改?
展开
 我来答
zsc我行我素
2013-11-26 · TA获得超过241个赞
知道小有建树答主
回答量:142
采纳率:0%
帮助的人:92万
展开全部

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);
}

这只是一个思路
梦里乾坤only
2013-11-26 · 超过10用户采纳过TA的回答
知道答主
回答量:47
采纳率:0%
帮助的人:38.2万
展开全部
这是数组下标溢出的错误。就是你存入的数组长度大于你定义的数组长度。原因是因为你实例化了一个空数组。如果按你所想要的效果的话,应该定义动态长度的数组来接受,而这个长度则刚好是你从数据库获取的数组元素个数。如下代码:
//从数据库取得结果集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()?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
挂在天空的风筝
2013-11-26
知道答主
回答量:17
采纳率:0%
帮助的人:6万
展开全部
数组下标越界
数组是不允许扩充空间的,创建时需指定数组空间大小。你看你的循环语句,明显会出错!
改用集合形式才可以实现,最后转化成数组!
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("列名")的形式取出数据
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我是平头哥我怕谁d
2013-11-26 · TA获得超过239个赞
知道小有建树答主
回答量:289
采纳率:0%
帮助的人:173万
展开全部
凡是new 的都在在堆中开辟内存的
你定义的是一个静态一维数组 里面是空的(因为你带了{ } 号)
不过也有内存 他的内存空间是在堆中的
String str[ ] = new String[10]; 像这样 是一个 动态的
它在堆中开辟了10 个空间 且他们的地址是连续的 空间大小都是一致的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
钱与岁不23
2013-11-26 · TA获得超过277个赞
知道小有建树答主
回答量:476
采纳率:0%
帮助的人:68.3万
展开全部
没有定义数组的长度 所以导致java.lang.ArrayIndexOutOfBoundsException 报错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式