Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Java SQL查询转换为Java对象[]?_Java_Sql_Arrays_Object - Fatal编程技术网

如何将Java SQL查询转换为Java对象[]?

如何将Java SQL查询转换为Java对象[]?,java,sql,arrays,object,Java,Sql,Arrays,Object,我正在寻找一种使用Java查询SQL数据库并返回对象[]的方法。以下是SQL查询: private static Object result[][] = null; result = run.query(conn, "select * from TREEDATA", rsh); 以下是数据应该镜像的示例: Object[][] table = { {1, null, "Root"}, //i=0 {2, 1, "Node2"}, //i=1

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

 private static Object result[][] = null;
 result = run.query(conn, "select * from TREEDATA", rsh);
以下是数据应该镜像的示例:

    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
以下是结果集处理程序,其代码我无法理解:

    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;
}

在函数中,首先使用
ArrayList
,而不是
对象[]
。所以你不需要数行

那么每行

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
}
while(rs.next()){
Object[]行=新对象[meta.getColumnCount()];
对于(int i=0;i

最后,您可以在函数中使用
toArray()
在数组中转换
ArrayList
,首先使用
ArrayList
而不是
对象[][]
。所以你不需要数行

那么每行

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
}
while(rs.next()){
Object[]行=新对象[meta.getColumnCount()];
对于(int i=0;i

最后,您可以使用
toArray()

在数组中转换
ArrayList
?在循环获取数据之前,需要重置结果集

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++;
}

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

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++;
}

以下是您启动的实现:

    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;
}
public Object[][]句柄(ResultSet rs)引发SQLException{
如果(!rs.last()){//如果为false,则结果集为空。
System.out.println(“结果集为空”);
返回null;
}
int rowCount=rs.getRow();//您指向的是最后一行,因此这将获得最后一行的行号。
rs.beforeFirst();//重置光标。
ResultSetMetaData meta=rs.getMetaData();
int columnCount=meta.getColumnCount();
Object[][]结果=新对象[rowCount][columnCount];
int i=0;
while(rs.next()){
对于(int j=0;j

但就我个人而言,我更希望函数return
ArrayList
或者更好的
List
,但是您需要手动实现并用行值填充
TreeData
对象。这就是JPA/Hibernate的用武之地。。但是,根据您的应用程序,这可能又是一种过分的做法。

以下是您启动的实现:

    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;
}
public Object[][]句柄(ResultSet rs)引发SQLException{
如果(!rs.last()){//如果为false,则结果集为空。
System.out.println(“结果集为空”);
返回null;
}
int rowCount=rs.getRow();//您指向的是最后一行,因此这将获得最后一行的行号。
rs.beforeFirst();//重置光标。
ResultSetMetaData meta=rs.getMetaData();
int columnCount=meta.getColumnCount();
Object[][]结果=新对象[rowCount][columnCount];
int i=0;
while(rs.next()){
对于(int j=0;j

但就我个人而言,我更希望函数return
ArrayList
或者更好的
List
,但是您需要手动实现并用行值填充
TreeData
对象。这就是JPA/Hibernate的用武之地。。但是,根据您的应用程序,这可能又是一种过分的做法。

他的查询使用
select*
,因此您无法确保列始终是3。同意,for循环是一种更可靠的解决方案。他的查询使用
select*
,因此您无法确保列始终是3。同意,for循环是一个更健壮的解决方案。