【问题标题】:Resultset into 2d array结果集成二维数组
【发布时间】:2014-08-24 04:56:18
【问题描述】:

我刚刚做了一个 mysql 查询,它被放入了一个名为 result 的结果集中。

现在我希望它进入一个 2d 对象,稍后我可以使用它来显示查询结果。

我不太确定该怎么做,如果我应该做一个while循环然后放入一个数组中。 我已经通过 out.write 将结果中的某些内容测试到 txt 文件中。

ResultSet result = stmt.executeQuery(sql);

这是我得到的,我试过了:

int i =0;
        sqlresult = new String[result.getMetaData().getColumnCount()];
        while(result.next()){
            sqlresult[i] = result.getArray(sql);
            i++;
        }

但是我不断收到错误,并且它只有一维数组。

【问题讨论】:

    标签: java mysql arrays resultset


    【解决方案1】:

    您可以通过以下简单方式做到这一点:

    ResultSetMetaData metadata = Result.getMetaData();
    numberOfColumns = metadata.getColumnCount();
    ResultSetArray= new String[numberOfRows][numberOfColumns];
    int i=0;
    while (Result.next()) {
    
        for (int j = 0; j < numberOfColumns; j++) {
            ResultSetArray[i][j] = Result.getString(j+1);
        }
        i++;
    }
    

    【讨论】:

    • 虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。
    【解决方案2】:

    这应该给你一个二维数据结构,作为一个列表,包含与结果集中的行一样多的元素,行中的每个列值都有字符串值。

    int nCol = result.getMetaData().getColumnCount();
    List<String[]> table = new ArrayList<>();
    while( result.next()) {
        String[] row = new String[nCol];
        for( int iCol = 1; iCol <= nCol; iCol++ ){
                Object obj = result.getObject( iCol );
                row[iCol-1] = (obj == null) ?null:obj.toString();
        }
        table.add( row );
    }
    
    // print result
    for( String[] row: table ){
        for( String s: row ){
            System.out.print( " " + s );
        }
        System.out.println();
    }
    

    【讨论】:

    • 我不知道为什么,但是当我尝试这个时,我将引用放入数组表中。所以当我 sysout 时,我得到类似 [Ljava.lang.String;@6487d5bd, .. 有什么我做错了吗?
    • 这是意料之中的。您必须编写一个小循环来逐行打印。
    • 谢谢.. 是的,我忘了当它的 2darray 时我必须循环 :)
    【解决方案3】:

    这会将整个结果集转换为对象的二维数组。

            Object[][] resultSet = new Object[rows][columns];
            int row = 0;
            while (result.next()) {
                for (int i = 0; i < columns; i++) {
                    resultSet[row][i] = result.getObject(i+1);
                }
                row++;
            }
    

    【讨论】:

    • 这假设您知道行数,不是吗?
    【解决方案4】:

    我不确定你想要什么,但这段代码将从当前结果集中获取列值并将其存储在一个数组中。

             while(result.next()){
                 java.sql.Array columnVar = rs.getArray("ColumnName");
                 String[] zips = (String[])columnVar.getArray();
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-09
      • 1970-01-01
      • 2017-12-25
      • 2013-10-12
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多