【问题标题】:Getting Embedded Derby Database entire table into a string array将嵌入式 Derby 数据库整个表放入字符串数组
【发布时间】:2014-05-08 03:10:53
【问题描述】:

我是SQL 的初学者,尽管我知道的足够多。让我困惑的不是这些陈述,而是与 Java 的结合让我感到困惑。

基本上我正在尝试显示一个JTable,它显示了数据库中的数据。我的思路是简单地将所有数据放入String array 并使用for loop 添加到我的JTable's model

数据库表只有两列,varchar(30)date。尽管使用 Derby 并且在线文档对我来说是拉丁文,但我完全迷失了方向。我已经能够使用ConnectionStatement 对象来执行SQL Queries 毫无问题地设置数据库。

我认为我的答案在ResultSet 中的某个地方,因为我可以用SELECT * FROM table_name 将整个表格query,只是不知道如何将该对象放入String Array

我为这个杂乱无章的问题道歉,工作累死了。

TL;DR:将整个表从 Derby Database 获取到 String Array

【问题讨论】:

    标签: java sql derby


    【解决方案1】:

    您实际上并不需要获取 String 数组。您可以使用next() 循环遍历ResultSet

    来自docs

    ResultSet 对象维护一个指向其当前数据行的游标。最初,光标位于第一行之前。 next 方法将光标移动到下一行,并且由于在 ResultSet 对象中没有更多行时返回 false,因此可以在 while 循环中使用它来遍历结果集。

    类似这样的:

    ResultSet rs = ...
    while (rs.next()) {
        String yourVarCharColumn = rs.getNString("varchar column name");
        Date yourDateColumn = rs.getDate("date column name");
        // Add to your JTable
    }
    

    【讨论】:

      【解决方案2】:

      您可能需要List 而不是数组。由于您基本上有一个二维结果,因此您需要一个 List 的数组(或列表)。

      “外部”列表表示结果中的行,“内部”列表包含每行的列。

      String query = "select varchar_column, date_colum from the_table";
      // this could a List<List<String>> just as well
      List<String[]> rows = new ArrayList<String[]>();
      
      
      Statement stmt = connection.createStatement();
      ResultSet rs = stmt.executeQuery(query);
      
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      
      while (rs.next()) 
      {
         // create a list holding the values for a single row
         String[] columnValues = new String[2];
         columnValues[0] = s.getString(1); 
         java.sql.Date date = rs.getDate(2);
         columnValues[1] = sdf.format(date);
         rows.add(columnValues);
      }
      rs.close();
      stmt.close();
      

      当然,您需要在上面添加错误处理。您也可以使用Object[] 而不是String[] 作为“行列表”的元素。 Object[] 的优点是您可以将 Date 实例的格式留给 JTable 的渲染器,这为您提供了更多的灵活性。

      使用“嵌套列表”,您可以创建一个可用于JTableTableModel。最重要的部分是getValueAt() 方法。一个非常基本的实现可能如下所示:

      public class MyModel 
        extends AbstractTableModel
      {
      
        private List<String[]> data = null;
        public MyModel(List<String[]> data)
        {
           this.data = data;
        }
      
        public Object getValueAt(int row, int column)
        {
          List<String> columnValues = data.get(row);
          return columnValues[column];
        }
      
        ... implement other methods from the TableModel
      }
      

      同样,这没有错误检查或处理,只是一个基本示例。

      【讨论】:

      • 我不确定模型中的 data 是如何更新的。在创建对象时我必须传入嵌套列表,但是当我向数据库添加更多数据时,我将如何更新该列表?
      • @Eric:表格模型的代码只是一个“大纲”——当然还有很多缺失。我只是想给你一个起点。
      • 我很感激,不过我实际上能够让它以全新的方式工作。无论如何,谢谢。
      猜你喜欢
      • 1970-01-01
      • 2015-09-23
      • 1970-01-01
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-25
      相关资源
      最近更新 更多