java:将结果集格式化为数组

时间:2012-03-07 17:42:27

标签: java

我的java生锈了,我想知道是否有人可以给我一个如何执行以下操作的代码示例:

我有一个数据库调用的结果集,它返回下表:

object_id(int),marker_id(int),xpos(float),ypos(float)

结果按object_id分组,以便你有这样的东西:
1023, 19, 0.2, 0.8
1023, 63, 0.2, 0.9
1023, 63, 0.2, 0.9
1072, 63, 0.2, 0.23
1072, 63, 0.2, 0.9
1072, 63, 0.2, 0.6
1012, 63, 0.2, 0.6
1012, 63, 0.2, 0.6

我一直在寻找生成两个2d双数组的最有效方法 第一个 double[][] array1 = {
{0.2,0.8,0.2,0.9...},
{0.2,0.8,0.2,0.9...},
...}

每个子数组包含row1,row2等的序列x1,y1,x2,y2,x3,y3,用于结果集中对应的object_id。

第二个2d数组将包含:
double[][] array2 = {
{1.0},
{0.9},
{0.8},
...
{0.0}}

每个唯一object_id都有一个条目,第一个条目有1.0,最后一个条目有0.0

两个数组应该具有相同的长度,因为每个条目代表一个object_id

希望有意义

由于

1 个答案:

答案 0 :(得分:0)

以下编辑的答案

“我需要将其转换为数组以输入到另一个库.-- user257543”

为了做到这一点,一种方法是将列转换为数组,然后根据需要组合它们。

    //get the size of the ResultSet
    myResultSet.last();
    int resultSetSize = myResultSet.getRow();
    //initialize your arrays to be joined
    int[] array1 = new int[resultSetSize];
    int[] array2 = new int[resultSetSize];
   //loop through the result so array1 will be the same as column1 of your table, etc.
    int count = 0;
    myResultSet.beforeFirst();
    while (myResultSet.next()){
        array1[count] = myResultSet.getInt("my column 1");
        array2[count] = myResultSet.getInt("my column 2");
        count++;
    }
    //declare rows and columns for easy code readability
    int row = 0;
    int column = 2;
    //set your combined array row and column lengths
    int[][] aCombined = new int[array1.length][column];
    //reset your column value to put array1 down column 0
    column = 0;
    for (int tempInt : array1){
        aCombined[row][column] = tempInt;
        row++;
    }
    //reset your row and go to the next column to do the same as above
    row = 0;
    column = 1;
    for (int tempInt : array2){
        aCombined[row][column] = tempInt;
        row++;
    }

使用上面的代码,如果您的原始数组是:         int [] array1 = {1,2,3,4};         int [] array2 = {5,6,7,8}; aCombined然后会导致[[1,5],[2,6],[3,7],[4,8]]

可以将其视为

  • [column1 / array1,column2 / array2]

  • [1,5]

  • [2,6]

  • [3,7]

  • [4,8]

下面的原始答案

为什么需要将其转换为数组?为什么不直接使用结果集呢?

例如,如果你需要获取object_id为1072的所有对象的marker_id,只需:

public ArrayList getMarkerID(int objectId){
     ArrayList<int> myArrayList = new ArrayList<>();
     myResultSet.beforeFirst();
     while (myResultSet.next()){
         if (myResultSet.getInt("object_id") == objectId){
              myArrayList.add(myResultSet.getInt("marker_id"));
         }
      }
      return myArrayList;
  }

(我只是快速输入它,并没有测试它,所以我可能会丢失一个分号或逻辑可能会稍微偏离)