簡體   English   中英

將ResultSet轉換為int數組

[英]Converting ResultSet to array of to int

我試圖將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;
}

我該如何轉換呢?

就個人而言,我會將它們放入列表中,然后最后轉換為數組。

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,則此方法將不起作用,您需要更改滾動類型以使其起作用。

您需要將每個結果從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

有兩種方法可以解決此問題:

  1. 執行另一個查詢以首先提取大小,提取大小,然后創建此大小的數組:

     String sizeQuery = "SELECT count(*) FROM " + Dbnum + ".tabName where ObjectID=?"; 
  2. 創建一個Integer List ,向其中添加結果(如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; 

您可以使生活更輕松,並使用ArrayList:

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

如果仍然希望將其放在數組中,則可以在以后創建它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM