-2

データベースにテーブル 2x2 (2 列と 2 行が入力されています) があり、テーブル全体を配列に取得しようとしていますが、結果をコンソールに出力しようとするとNullPointerExceptionが発生します。何が欠けているのかわかりません。

メインコード:

public static void main(String[] args) {
    mySQLManager Manager = new mySQLManager();
    Manager.Connect();
    String[] Dispositivos = null;
    Dispositivos = Manager.GetDevices();
    for (int i = 0; i < Dispositivos.length; i++){
        System.out.println(Dispositivos[i]);
    }
    Manager.Disconnect();
}

方法:

public String[] GetDevices(){
    String[] Devices = null;
    String query = "SELECT * FROM devices";
    int index = 0;
    try {
        statement = connection.createStatement();
        resultSet = statement.executeQuery(query);
        while(resultSet.next()){
            Devices[index + 0] = resultSet.getString(1);
            Devices[index + 1] = resultSet.getString(2);
            index+=2;
        }
    } catch (SQLException ex) {
        System.out.println("\nNão foi possivel ler os dispositivos do database");
        System.out.print(ex.getMessage());

    }
    return Devices;
}

私が得ているエラー:

スレッド「メイン」での例外 java.lang.NullPointerException at logictesting.mySQLManager.GetDevices(mySQLManager.java:130) at logictesting.LogicTesting.main(LogicTesting.java:29) Java 結果: 1

4

4 に答える 4

4

問題はDevicesnullのとおりです。

        Devices[index + 0] = resultSet.getString(1);
        Devices[index + 1] = resultSet.getString(2);

最も簡単な修正はDevicesArrayList動的に拡張するのが簡単になるため、 に変更することです。

public String[] GetDevices(){
    List<String> Devices = new ArrayList<String>();
    String query = "SELECT * FROM devices";
    try {
        statement = connection.createStatement();
        resultSet = statement.executeQuery(query);
        while(resultSet.next()){
            Devices.add(resultSet.getString(1));
            Devices.add(resultSet.getString(2));
        }
    } catch (SQLException ex) {
        System.out.println("\nNão foi possivel ler os dispositivos do database");
        System.out.print(ex.getMessage());

    }
    return Devices.toArray(new String[0]);
}
于 2013-01-18T18:23:37.927 に答える
2

要素を挿入する前にDevices配列を初期化します。

public String[] GetDevices(){
    String[] Devices = new String[size];

要素を挿入する前に配列のサイズがわからない場合は、代わりに ArrayList などの動的配列を使用することをお勧めします

于 2013-01-18T18:24:18.367 に答える
1

両方の配列 (null ポインターの現在の原因であるデバイスと配列 Dispositivos も初期化する必要があります) は null です。配列を使用する前に初期化してください。

また、2 つの文字列値をオブジェクトにラップしてから、このオブジェクトのリストを使用することをお勧めします。コードはよりきれいに見えます。

于 2013-01-18T18:25:14.850 に答える
1

String[] Devices = null;初期化されたデバイスではありません。null に値を挿入すると、Devices[index + 0]がスローされますNullPointerException。あなたはこれを試すことができます。配列は 1 つに固定されているためです。

public String[] GetDevices(){
    List<String> Devices = new ArrayList<String>();
    String query = "SELECT * FROM devices";
    try {
        statement = connection.createStatement();
        resultSet = statement.executeQuery(query);
        while(resultSet.next()){
            Devices.add(resultSet.getString(1));
            Devices.add(resultSet.getString(2));
        }
    } catch (SQLException ex) {
        System.out.println("\nNão foi possivel ler os dispositivos do database");
        System.out.print(ex.getMessage());

    }
    return Devices.toArray(new String[Devices.size()]);
}
于 2013-01-18T18:31:09.207 に答える