-2

我编写了一个方法,该方法将返回一个Object[][]用作 a 的数据JTable。我从 Microsoft Access 数据库中读取数据,然后将每条信息放入Object [][]. 我的问题是我的方法的 return 语句,它给了我一个RuntimeException. 当我使用 aSystem.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;必须被抓住或宣布被扔掉

4

2 回答 2

4

线程“AWT-EventQueue-0”中的异常 java.lang.RuntimeException:无法编译的源代码 - 未报告的异常 java.sql.SQLException;必须被抓住或宣布被扔掉

这意味着您正在运行无法编译的代码。某些 IDE 允许这样做,例如 eclipse,在我看来这是一个非常糟糕的想法,因为这意味着您可以最大限度地提高查找和修复这些错误的成本。建议你关闭这个功能。

java.lang.RuntimeException:无法编译的源代码 - 什么会导致这种情况?


如果可以的话,我会写出非常不同的代码。打开和关闭数据库连接非常昂贵。您可以使用 aList<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()][]);

    }
}
于 2013-06-23T10:32:39.023 回答
2

线程“AWT-EventQueue-0”中的异常 java.lang.RuntimeException:无法编译的源代码 - 未报告的异常 java.sql.SQLException;必须被抓住或宣布被扔掉

此错误消息表明您正在运行一个部分编译的程序,而未能编译的部分这样做是因为它调用了一个方法,该方法可能会抛出一个SQLException没有捕获该异常或声明的方法throws SQLException。由于给定的方法实际上确实声明throws SQLException了,我假设错误实际上是在另一种方法中(可能是调用这个方法的方法)。

请注意,此异常并不表示实际抛出了任何 SQLException - 只是它可能会被抛出并且您不考虑这种可能性。

于 2013-06-23T10:55:38.623 回答