将ResultSet转换为int数组

时间:2014-01-16 11:10:11

标签: java arrays resultset

我正在尝试将ResultSet转换为int的数组,因为我的方法返回int[]

public static int[] GetPathIDsFromDB (String Dbnum, int objectid) throws SQLException{
    String selectSQL = "SELECT ID FROM " + Dbnum + ".tabName where ObjectID=?";
    dbConnection = getDBConnection();
    preparedStatement = dbConnection.prepareStatement(selectSQL);
    preparedStatement.setInt(1 , objectid);
    ResultSet rs = preparedStatement.executeQuery();  
    //int [] rsIDs = new rs.count;
    int [] rsIDs = null;
    while (rs.next()) {
        rsIDs=rs.getInt(1); // the error int cannot be converted to int[]
    }
    return rsIDs;
}

我该怎么转换呢?

4 个答案:

答案 0 :(得分:1)

就个人而言,我会将它们放入列表中,然后在最后转换为数组。

List<Integer> rsIds = new ArrayList<Integer>();
while (rs.next()) {
  rsIds.add(rs.getInt(1));
}
return rsIds.toArray(new Integer[](rsIds.size());

它应该通过自动装箱自动将Integer []转换为int []。


看到我是一个白痴,这不起作用,我就这样做了:

rs.last();
int[] rsIds = new int[rs.getRow()];
rs.beforeFirst();
int counter = 0;
while (rs.next()) {
  rsIds[counter] = rs.getInt(1);
  counter++;
}

如果ResultSet的类型为TYPE_FORWARD_ONLY,则无效。您需要更改滚动类型才能使其工作。

答案 1 :(得分:0)

您需要将ResultSet中的每个结果添加到数组中,为此您需要一个计数器变量作为数组的索引。

此外,正确初始化您的int[]数组,因为目前它刚刚初始化为null

int[] rsIDs = new int[size]; // decide the size
int counter = 0; // counter
while (rs.next()) {
    rsIDs[counter++] = rs.getInt(1);
}

如果您事先不知道尺寸,那么最好使用ArrayList代替array

答案 2 :(得分:0)

有两种方法可以解决问题:

  1. 执行另一个查询以首先提取大小,提取大小,然后创建此大小的数组:

    String sizeQuery = "SELECT count(*) FROM " + Dbnum + ".tabName where ObjectID=?";
    
  2. 创建List Integer,向其添加结果(如M21B8所述),然后将其转换为int[],如下:

    int size = list.size();
    int[] result = new int[size];
    for (int i = 0; i < size; i++) {
        result[i] = list.get(i);
    }
    
    return result;
    

答案 3 :(得分:0)

您可以让您的生活更轻松,并使用ArrayList:

ResultSet rs = preparedStatement.executeQuery();      
ArrayList<Integer> rsIDs = new ArrayList<>();
while (rs.next()) {
    rsIDs.add(rs.getInt(1));
}

如果您仍然希望它在数组中,您可以在之后创建它。