当前位置: 首页 > 知识库问答 >
问题:

将结果集从 JDBC 加载到二维表中

宦书
2023-03-14
public void selectStudent() throws SQLException{
    try{
        con= this.getConnection();
        if(con!=null){
            // Create and execute an SQL statement that returns some data.
            String SQL = "SELECT * FROM dbo.Student";
            stmt = con.createStatement();
            rs = stmt.executeQuery(SQL);

            // Iterate through the data in the result set and display it.
            while (rs.next()) {
                for(int i=0;i<=5;i++){
                      data[rs.getRow()][i]=rs.getString(i+1);
                }
            }
            closeConnection();
        }else System.out.println("Error: No active Connection");
   }catch(Exception e){
        e.printStackTrace();
   }
}

我想将JDBC SQL查询的结果添加到一个二维对象数组中,以便将来在表(swingUI)中使用。不幸的是,上面的代码不起作用,我不知道为什么——我在将结果保存到数据对象时出错。

我得到的错误类型是NullPointerException。

共有1个答案

许华清
2023-03-14

我想你有一个这样的对象:

Object[][] data; 

为此,您会收到一个错误NullPointerException,因为它没有初始化它,所以在您将结果放入此数组之前,您应该像这样初始化它:

data = new String[numberOfRow][6];
while (rs.next()) {
  for(int i=0; i<=5; i++){
      data[rs.getRow()][i]=rs.getString(i+1);
  }
}

编辑

Object[][] data = {{"Kathy", "Smith", "Snowboarding", new Integer(5), new Boolean(false)}, 
            {"John", "Doe", "Rowing", new Integer(3), new Boolean(true)}};

这使您越来越多地定义属性的类型,因此我建议您创建一个新的Type,例如:

public class TypeObject {

    private String s1;
    private String s2;
    private String s3;
    private String i1;
    private boolean b1;

    public TypeObject(String s1, String s2, String s3, String i1, boolean b1) {
        this.s1 = s1;
        this.s2 = s2;
        this.s3 = s3;
        this.i1 = i1;
        this.b1 = b1;
    }

    //getters and setters
}

因此,相反,使用和 Object[][] 使用 TypeObject[],您可以轻松设置或获取属性,如下所示:

TypeObject[] data = new TypeObject[numberRow];
TypeObject d = new TypeObject(rs.getString("c1"), rs.getString("c2"), rs.getString("c3"), rs.getInt("c4"), rs.getBoolean("c5"));

data[i] = d;

因此,这种方式的优点是:

  • 您可以在表中添加一个新列,因此您可以轻松地在TypeObject类中添加一个新字段
  • 您可以按照需要创建构造函数。
  • 和和
 类似资料:
  • 我有一个用户类,有16个属性,比如名字,姓氏,出生日期,用户名,密码等...这些都存储在MySQL数据库中,当我想要检索用户时,我使用ResultSet。我想将每一列映射回用户属性,但我这样做的效率似乎非常低。例如,我正在做: 也就是说,我检索所有的列,然后通过将所有的列值插入用户构造函数来创建用户对象。 有人知道更快、更整洁的方法吗?

  • 主要内容:ResultSet类型,ResultSet的并发性,浏览结果集,查看结果集,更新结果集SQL语句执行后从数据库查询读取数据,返回的数据放在结果集中。 语句用于从数据库中选择行并在结果集中查看它们的标准方法。 接口表示数据库查询的结果集。 对象维护指向结果集中当前行的游标。 术语“结果集”是指包含在对象中的行和列数据。 接口的方法可以分为三类: 浏览方法:用于移动光标。 获取方法:用于查看光标指向的当前行的列中的数据。 更新方法:用于更新当前行的列中的数据。 然后在基础数据库中更新数

  • 问题内容: 我正在使用CsvJdbc(它是用于csv文件的JDBC驱动程序)来访问csv文件。我不知道csv文件包含多少列。如何获得列数?是否有任何JDBC函数?我在java.sql.ResultSet中找不到任何方法。 为了访问该文件,我使用类似于CsvJdbc网站上示例的代码。 问题答案: 您可以从ResultSetMetaData获取列号:

  • 我需要帮助将结果集值从servlet转发到jsp,而不使用JSTL实现 工作流程: 用户在输入框中输入值并单击搜索按钮 单击搜索时会调用servlet。servlet专注于数据库实现并将结果集值转发到请求所在的同一jsp页面。 问题:我的结果集大小是3,但仅表顶部的值就打印在我的jsp页面中。其余2个值缺失。我希望所有的值都打印在我的jsp页面中。 这是我的代码: Productlist.jsp

  • 问题内容: 我正在使用JDBC来实现非常简单的数据库连接。 我已经创建了连接/语句并执行了查询。我在调试器中检查语句的查询对象,以确认它正在发送正确的查询。然后,我再次检查了数据库中的查询(直接从调试器复制),以确保其返回数据。但是,返回的结果集在.next()上给出false 这里有我遗漏的常见陷阱吗? 还有myDB类(一个简单的包装程序,使我可以将连接/语句代码放入任何项目中) 编辑:根据建议

  • 我正在从数据库中读取pdf文件列表,对它们进行解析,并用它们执行一些任务 当我阅读这个pdf列表时,我发现从pdf中提取图像需要花费更多的时间,而且我不需要阻止我的主线程来阅读图像。所以我想在一个单独的线程中执行提取图像 我想从一个又一个pdf中读取图像,而不是一次将所有pdf加载到内存中(由于内存问题)。所以我只想要两条线;一个应该是主线程(从pdf中读取一些文本并执行其他操作),另一个应该是提