我正在尝试将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;
}
我该怎么转换呢?
答案 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)
有两种方法可以解决问题:
执行另一个查询以首先提取大小,提取大小,然后创建此大小的数组:
String sizeQuery = "SELECT count(*) FROM " + Dbnum + ".tabName where ObjectID=?";
创建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));
}
如果您仍然希望它在数组中,您可以在之后创建它。