首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Java SQL查询转换为Java Object [][]?

如何将Java SQL查询转换为Java Object [][]?
EN

Stack Overflow用户
提问于 2012-04-08 16:53:35
回答 3查看 5.7K关注 0票数 1

我正在寻找一种用Java查询SQL数据库并返回对象的方法。下面是SQL查询:

代码语言:javascript
复制
 private static Object result[][] = null;
 result = run.query(conn, "select * from TREEDATA", rsh);

以下是数据应该镜像的示例:

代码语言:javascript
复制
    Object[][] table = {
        {1, null, "Root"}, //i=0
        {2, 1, "Node2"}, //i=1
        {3, 2, "Node3"}, //i=2
        {4, 3, "Node4"}, //i=3
        {5, 4, "Node5"}, //i=4
        {6, 5, "Node6"}, //i=5
        {7, 6, "Node7"}, //i=6
        {8, 1, "Node8"}, //i=7
        {9, 1, "Node9"}, //i=8
        {10, 9, "Node10"},};    //i=9

下面是结果集处理程序,其中包含我无法理解的代码:

代码语言:javascript
复制
    public Object[][] handle(ResultSet rs) throws SQLException {
        if (!rs.next()) {
            System.out.println("result set is null");
            return null;
        }
        ResultSetMetaData meta = rs.getMetaData();
        int rows = 0;
        while (rs.next()) {
            rows++;
        }
        Object[][] result = new Object[rows];
        int i = 0;
        while (rs.next()) {
 //How do I do what I need to do in order to return result[][] 
            result[i][] = rs.getObject(3);           
            System.out.println(result[i][2].toString());
        }
        return result;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-08 17:22:53

下面是您开始时的实现:

代码语言:javascript
复制
    public Object[][] handle(ResultSet rs) throws SQLException {
        if (!rs.last()) { //If false, the result set is empty.
            System.out.println("result set is null");
            return null;
        }
        int rowCount = rs.getRow(); // You are pointing on the last row, so this will get the row number of the last row.
        rs.beforeFirst(); // Reset your cursor.
        ResultSetMetaData meta = rs.getMetaData();
        int columnCount = meta.getColumnCount();
        Object[][] result = new Object[rowCount][columnCount];
        int i = 0;
        while (rs.next()) {
            for (int j = 0; j < columnCount; j++) {
                result[i][j] = rs.getObject(j);
            }
        }
        return result;
}

但就我个人而言,我更希望该函数返回ArrayList<Object[]>,甚至更好的List<TreeData>,但是您需要手动实现TreeData对象并使用行值填充它。这就是JPA/Hibernate的用武之地。但是,根据您的应用程序的不同,这可能又有点过头了。

票数 2
EN

Stack Overflow用户

发布于 2012-04-08 17:00:46

在您的函数中,首先使用ArrayList,而不是Object[][]。所以你不需要计算行数。

然后对于每一行

代码语言:javascript
复制
while(rs.next()) {
  Object[] row = new Object[meta.getColumnCount()];
  for (int i = 0 ; i < row.length ; ++i) {
    row[i] = rs.getObject(i+1); // remember thet on ResultSet object first column is 1
  }
  rows.add(row); // add row to the ArrayList
}

最后,您可以使用toArray()在数组中转换您的ArrayList

票数 1
EN

Stack Overflow用户

发布于 2012-04-08 17:01:29

这是你想要的吗?在循环获取数据之前,您需要重置结果集。

代码语言:javascript
复制
Object[][] result = new Object[rows];
rs.first();
int i = 0;
while (rs.next()) {
  result[i] = new Object[3];
  result[i][0] = rs.getObject(1);
  result[i][1] = rs.getObject(2);
  result[i][2] = rs.getObject(3);
  i++;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10061611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档