-2

Object[][]のデータとして使用するを返すメソッドを作成しましたJTable。Microsoft Access データベースからデータを読み取り、各情報を のセルに入力しObject [][]ます。私の問題は、メソッドの return ステートメントで、RuntimeException. a を使用し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; キャッチするか、投げることを宣言する必要があります

4

2 に答える 2

4

スレッド「AWT-EventQueue-0」での例外 java.lang.RuntimeException: コンパイルできないソース コード - 報告されていない例外 java.sql.SQLException; キャッチするか、投げることを宣言する必要があります

これは、コンパイルされないコードを実行していることを意味します。Eclipse などの一部の IDE ではこれが許可されていますが、これらのエラーを見つけて修正するコストを最大化することを意味するため、これは私の意見では非常に悪い考えです。この機能をオフにすることをお勧めします。

java.lang.RuntimeException: コンパイルできないソース コード - 何が原因でしょうか?


可能であれば、このコードを非常に異なる方法で記述します。データベース接続を開いたり閉じたりすると、非常にコストがかかります。List<String[]>24 行あると仮定する代わりに、a を使用してすべての行を読み取ることができます。

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. 指定されたメソッドは実際に declarethrows SQLExceptionを行うため、エラーは実際には別のメソッド (おそらくこれを呼び出すメソッド) にあると思います。

この例外は、 SQLException が実際にスローされることを示しているわけではありません。スローされる可能性があり、その可能性を考慮していないことだけを示していることに注意してください。

于 2013-06-23T10:55:38.623 に答える