我有一个Access数据库,我需要检索除第一个和最后一个之外的所有字段并将其显示在JTable中。当我创建我的Object [] []时,一切都运行得很好但是当我返回它时,我得到一个NullPointerException。我试图通过打印整个对象来找到数据库中可能存在空值的位置但是工作正常且没有值为null。为什么要返回Object [] []给我一个NullPointerException以及如何修复它?
堆栈跟踪是: 线程“AWT-EventQueue-0”中的异常java.lang.NullPointerException
public Object [] [] SetTrainingLogTable() throws SQLException
{
DatabaseConnection connection = new DatabaseConnection();
//Retrieves all the data from the TrainingLog table
ResultSet resultset = connection.SelectStatements("SELECT * FROM TrainingLog");
//Retrieves the number of entries
ResultSet numberofworkouts = connection.SelectStatements("SELECT COUNT(*) FROM TrainingLog");
int count = numberofworkouts.getInt(1);
number = count;
String[][] table = new String [count] [6];
//Number to incriment for while loops
int row = 0;
String date = "";
while(row<count)
{
date = resultset.getString(2);
table [row][0] = calculate.RefineDate(date);
table [row][1] = resultset.getString(3);
table [row][2] = resultset.getString(4);
table [row][3] = resultset.getString(5);
table [row][4] = resultset.getString(6);
table [row][5] = resultset.getString(7);
resultset.next();
row++;
}
Object[][] data = table;
connection.close();
return data;
}
我运行了一个调试器,它只在运行返回行时给出错误。
答案 0 :(得分:0)
最好发布堆栈跟踪并告诉哪一行引发错误。但是,编写此类代码的典型方法是:
Connection con = ...;
Statement st = ...;
ResultSet rs = ...;
while (rs.next()) {
// ...
}
结果集开始指向第一行之前的。 rs.next()
返回是否存在下一行,如果存在,则前进到该行。你能用那种风格重写它吗?
其他建议:
Object[]
来存储每行的数据?称之为Workout
。List<Workout>
代替Object[][]
吗?String
:使用java.sql.Date
或java.util.Date
。在工作中,我有一个使用字符串作为日期的大型旧程序,它使用不同的格式在不同的时间转换值。这真是太悲惨了。SELECT *
。给出要返回的列的名称。使用rs.getString("column_name")
语法。