我编写了一个方法,该方法将返回Object[][]
作为JTable
的数据。我从Microsoft Access数据库中读取数据,然后将每条信息放入Object [][]
的单元格中。我的问题是我的方法的return语句,它给了我一个RuntimeException
。当我使用System.out.println()
打印出对象的每个元素时,所有数据都在那里,并且它工作正常,但是当它返回到该对象时,它就会落空。
public Object [] [] AllWorldBestTimes() throws SQLException
{
DatabaseConnection connection = new DatabaseConnection();
ResultSet result = connection.SelectStatements("SELECT * FROM WorldBestTimes");
count = 24;
Object [] [] data = new String[count][4];
int row = 0;
while(row < count)
{
data [row][0] = result.getString(1);
data [row][1] = result.getString(2);
data [row][2] = result.getString(3);
data [row][3] = result.getString(4);
result.next();
System.out.println(data [row][0]);
System.out.println(data [row][1]);
System.out.println(data [row][2]);
System.out.println(data [row][3]);
row++;
}
connection.close();
return data;
}
上面的代码显示了打印出来时需要返回的确切数据,但是返回它会给我RuntimeException
。
更新
堆栈跟踪:
线程“AWT-EventQueue-0”中的异常java.lang.RuntimeException:无法编译的源代码 - 未报告的异常java.sql.SQLException;必须被抓住或宣布被抛出
答案 0 :(得分:4)
线程“AWT-EventQueue-0”中的异常java.lang.RuntimeException:无法编译的源代码 - 未报告的异常java.sql.SQLException;必须被抓住或宣布被抛出
这意味着您正在运行无法编译的代码。有些IDE允许这样的例如eclipse,在我看来这是一个非常糟糕的想法,因为它意味着你最大限度地发现和修复这些错误的成本。我建议你关掉这个功能。
java.lang.RuntimeException: Uncompilable source code - what can cause this?
如果可以的话,我会写这个代码非常不同。打开和关闭数据库连接非常昂贵。您可以使用List<String[]>
来读取所有行,而不是假设有24行。
public String[][] AllWorldBestTimes() throws SQLException {
return select("SELECT * FROM WorldBestTimes");
}
public String[][] select(String selectSQL) throws SQLException {
// TODO use a connection pool instead.
Connection connection = new DatabaseConnection();
List<String[]> data;
PreparedStatement statement = null;
ResultSet result = null;
try {
statement = connection.prepareStatement(selectSQL);
result = statement.executeQuery();
data = new ArrayList<String[]>();
int columnCount = result.getMetaData().getColumnCount();
while (result.next()) {
String[] row = new String[columnCount];
for (int i = 0; i < columnCount; i++)
row[i] = result.getString(i + 1);
data.add(row);
}
} finally {
if (result != null) {
result.close();
}
if (statement != null) {
statement.close();
}
connection.close();
}
return data.toArray(new String[data.size()][]);
}
}
答案 1 :(得分:2)
线程“AWT-EventQueue-0”中的异常java.lang.RuntimeException:无法编译的源代码 - 未报告的异常java.sql.SQLException;必须被抓住或宣布被抛出
此错误消息表明您正在运行部分编译的程序和无法编译的部分,因为它调用的方法可能会抛出SQLException
而不会捕获该异常或声明{{1} }。由于给定的方法实际上声明了throws SQLException
,我假设错误实际上是在一个不同的方法(可能是调用这个方法的那个)。
请注意,此重复操作并不表示实际抛出了任何SQLException - 只是它可能被抛出而您没有考虑到这种可能性。