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);”这里出错。为什么?怎么改? 展开
想将数据库中查到的数据赋给这个数组:
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);”这里出错。为什么?怎么改? 展开
6个回答
展开全部
更多追问追答
追问
我不止赋值给一个数组,我的结果集有两列结果,赋值如下:
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);
}
这只是一个思路
展开全部
这是数组下标溢出的错误。就是你存入的数组长度大于你定义的数组长度。原因是因为你实例化了一个空数组。如果按你所想要的效果的话,应该定义动态长度的数组来接受,而这个长度则刚好是你从数据库获取的数组元素个数。如下代码:
//从数据库取得结果集rs
String[] name=new String[rs.getRow()];
for(i = 0;rs.next();i++){
name[i] = rs.getString(1);//后面这段代码直接拿你的,你这里取值赋值为同一个值也得自己更改下
}
//从数据库取得结果集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()?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数组下标越界
数组是不允许扩充空间的,创建时需指定数组空间大小。你看你的循环语句,明显会出错!
改用集合形式才可以实现,最后转化成数组!
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("列名")的形式取出数据
数组是不允许扩充空间的,创建时需指定数组空间大小。你看你的循环语句,明显会出错!
改用集合形式才可以实现,最后转化成数组!
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("列名")的形式取出数据
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
凡是new 的都在在堆中开辟内存的
你定义的是一个静态一维数组 里面是空的(因为你带了{ } 号)
不过也有内存 他的内存空间是在堆中的
String str[ ] = new String[10]; 像这样 是一个 动态的
它在堆中开辟了10 个空间 且他们的地址是连续的 空间大小都是一致的
你定义的是一个静态一维数组 里面是空的(因为你带了{ } 号)
不过也有内存 他的内存空间是在堆中的
String str[ ] = new String[10]; 像这样 是一个 动态的
它在堆中开辟了10 个空间 且他们的地址是连续的 空间大小都是一致的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有定义数组的长度 所以导致java.lang.ArrayIndexOutOfBoundsException 报错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询