将嵌入式Derby数据库整个表转换为字符串数组

时间:2014-05-08 03:10:53

标签: java sql derby

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

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

数据库表只有2列,varchar(30)date。虽然使用Derby我完全迷失了,在线文档对我来说很拉丁。我已经能够使用ConnectionStatement个对象来设置数据库而不会出现SQL Queries

我认为我的答案位于ResultSet内,因为我query可以SELECT * FROM table_name整个表格,只是不知道如何将该对象变为String Array }。

我为这个杂乱无章的问题道歉,因工作而疲惫不堪。

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

2 个答案:

答案 0 :(得分:1)

你真的不需要获取String数组。您可以使用ResultSet循环浏览next()

来自docs

  

ResultSet对象维护指向其当前数据行的游标。最初,光标位于第一行之前。下一个方法将游标移动到下一行,因为当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
}

答案 1 :(得分:1)

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

“outer”列表表示结果中的行,“inner”列表包含每行的列。

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的渲染器,这样可以提高灵活性。

使用“嵌套列表”,您可以创建可用于TableModel的{​​{1}}。最重要的部分是JTable方法。一个非常基本的实现可能如下所示:

getValueAt()

同样,这不是错误检查或处理,只是一个基本的例子。