return Object [] []给出RuntimeException:Uncompilable源代码

时间:2013-06-23 10:20:05

标签: java arrays object nullpointerexception

我编写了一个方法,该方法将返回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;必须被抓住或宣布被抛出

2 个答案:

答案 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 - 只是它可能被抛出而您没有考虑到这种可能性。