-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;
}

我得到的错误:

在 logictesting.LogicTesting.main(LogicTesting.java:29) Java 结果中的 logictesting.mySQLManager.GetDevices(mySQLManager.java:130) 线程“main”java.lang.NullPointerException 中的异常结果:1

4

4 回答 4

4

问题Devices在于null

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

最简单的解决方法可能是Devices变成一个,ArrayList从那时起它很容易动态增长。

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

两个数组(设备是空指针的当前原因和数组 Dispositivos 也需要初始化)都是空的;在使用它们之前初始化你的数组。

此外,我建议将您的两个字符串值包装到一个对象中,然后使用该对象的列表 - 代码看起来会更干净。

于 2013-01-18T18:25:14.850 回答
1

String[] Devices = null;你没有初始化设备。并将值插入 null Devices[index + 0]throws NullPointerException。更好的是你可以试试这个。因为数组是固定的。

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 回答