请问:二维数组的问题,为什么会出现空指针异常的错误?

QueenZ 2008-07-25 06:53:18
我是新手,刚开始学JAVA,做作业的过程中出现了java.lang.NullPointerException的错误,请大家帮忙看一下

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class DB {

static int i;

class data{
String num;
String name;
String sex;
String age;
String nation;
String type;
String phone;
String add;
}

public static void main(String args[])
{
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; //加载JDBC驱动
String dbURL = "jdbc:sqlserver://localhost:1433;DatabaseName=LifeLine"; //连接服务器和数据库sample
String userName = "sa"; //默认用户名
String userPwd = "123456"; //密码
Connection dbConn;

try
{
Class.forName(driverName);
dbConn = DriverManager.getConnection(dbURL, userName, userPwd);

String str1 = "SELECT * FROM 病人信息";
Statement stmt = dbConn.createStatement();
ResultSet rs2 = stmt.executeQuery(str1);

int j = 0;
data[][] aa = new data[4][8];

while((rs2.next()))
{
String dbbrnum = rs2.getString("编号");
String dbbrname = rs2.getString("姓名");
String dbbrsex = rs2.getString("性别");
String dbbrage = rs2.getString("年龄");
String dbminzu = rs2.getString("民族");
String dbfeetype = rs2.getString("费用类型");
String dbphone = rs2.getString("电话");
String dbaddress = rs2.getString("地址");

aa[j][0].num = dbbrnum;//(!!!!!空指针异常出现在这里,不知道哪里出了问题!!!!!)
aa[j][1].name = dbbrname;
aa[j][2].sex = dbbrsex;
aa[j][3].age = dbbrage;
aa[j][4].nation = dbminzu;
aa[j][5].type = dbfeetype;
aa[j][6].phone = dbphone;
aa[j][7].add = dbaddress;
j++;
System.out.print(aa[j][0].num + "\t" + aa[j][1].name + "\t" + aa[j][2].sex + "\t" + aa[j][3].age + "\t" + aa[j][4].nation
+ "\t" + aa[j][5].type + "\t" + aa[j][6].phone + "\t" + aa[j][7].add+"\n");


}
catch(Exception e)
{
e.printStackTrace();
}
}
}

...全文
402 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
z82364593110 2010-07-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dreamhunter_lan 的回复:]
data[][] aa = new data[4][8];这里只说明每一个aa[i][j]是将指向一个data对象的引用,但在你还没有new出一个对象付给每个aa[i][j]之前,他们都指向了null,因此在到aa[j][0].num = dbbrnum;时是一定会抛出空指针异常的~
[/Quote]

dreanight 2010-07-14
  • 打赏
  • 举报
回复
学习了哦
dreamhunter_lan 2008-07-26
  • 打赏
  • 举报
回复
data[][] aa = new data[4][8];这里只说明每一个aa[i][j]是将指向一个data对象的引用,但在你还没有new出一个对象付给每个aa[i][j]之前,他们都指向了null,因此在到aa[j][0].num = dbbrnum;时是一定会抛出空指针异常的~
zhouyong80 2008-07-26
  • 打赏
  • 举报
回复
上面的代码更正一下,将
j++;
System.out.print(aa.get(j).num + "\t" + aa.get(j).name + "\t" + aa.get(j).sex + "\t" + aa.get(j).age + "\t" + aa.get(j).nation
+ "\t" + aa.get(j).type + "\t" + aa.get(j).phone + "\t" + aa.get(j).add+"\n");
改成
System.out.print(aa.get(j).num + "\t" + aa.get(j).name + "\t" + aa.get(j).sex + "\t" + aa.get(j).age + "\t" + aa.get(j).nation
+ "\t" + aa.get(j).type + "\t" + aa.get(j).phone + "\t" + aa.get(j).add+"\n");
j++;
zhouyong80 2008-07-26
  • 打赏
  • 举报
回复
我认为是你的对象的赋值问题,你声明了二维数组data[][] aa = new data[4][8]; 并没有对它进行赋值,所以java就默认初始化你这个二维数组变量,将它所有元素的值都赋为null,当你执行aa[j][0].num的时候,实际上是null.num,当然是空指针异常了。所以这里的数据结构不建议用二维数组来表示。你为什么不用map对象呢?


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.*;

public class DB {

static int i;

class data{
String num;
String name;
String sex;
String age;
String nation;
String type;
String phone;
String add;
}

public static void main(String args[])
{
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; //加载JDBC驱动
String dbURL = "jdbc:sqlserver://localhost:1433;DatabaseName=LifeLine"; //连接服务器和数据库sample
String userName = "sa"; //默认用户名
String userPwd = "123456"; //密码
Connection dbConn;

try
{
Class.forName(driverName);
dbConn = DriverManager.getConnection(dbURL, userName, userPwd);

String str1 = "SELECT * FROM 病人信息";
Statement stmt = dbConn.createStatement();
ResultSet rs2 = stmt.executeQuery(str1);

int j = 0;
Map<int, data> aa = new HashMap<int, data>();

while((rs2.next()))
{
data d = new data();
d.num = rs2.getString("编号");
d.name = rs2.getString("姓名");
d.sex = rs2.getString("性别");
d.age = rs2.getString("年龄");
d.nation = rs2.getString("民族");
d.type = rs2.getString("费用类型");
d.phone = rs2.getString("电话");
d.add = rs2.getString("地址");

aa.put(j, d);
j++;
System.out.print(aa.get(j).num + "\t" + aa.get(j).name + "\t" + aa.get(j).sex + "\t" + aa.get(j).age + "\t" + aa.get(j).nation
+ "\t" + aa.get(j).type + "\t" + aa.get(j).phone + "\t" + aa.get(j).add+"\n");


}
catch(Exception e)
{
e.printStackTrace();
}
}
}
  • 打赏
  • 举报
回复
对了,你定义个二维的干么呢。。
直接data[] aa = new data[4];
aa[j].name
aa[j].num
这样就行了。。。
QueenZ 2008-07-25
  • 打赏
  • 举报
回复
数据库里能取出数据的,就是赋值到数组的地方有问题
  • 打赏
  • 举报
回复
袄,另一个就是根本没读到记录
QueenZ 2008-07-25
  • 打赏
  • 举报
回复
数据库里只有4条信息,而且改大了还是有错误
  • 打赏
  • 举报
回复
只能说明你的rs.next()的结果多于4条了。。
你可以先把data[][] aa = new data[4][8]; 的第一维定大点,然后看结果,

62,630

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧