我是SQL
的初学者,虽然我知道得足够多。这些陈述并不会让我感到困惑,而是与Java的结合让我感到困惑。
基本上我正在尝试显示一个显示数据库中数据的JTable
。我的想法是简单地将所有数据放入String array
并使用for loop
添加到我的JTable's
model
。
数据库表只有2列,varchar(30)
和date
。虽然使用Derby我完全迷失了,在线文档对我来说很拉丁。我已经能够使用Connection
,Statement
个对象来设置数据库而不会出现SQL Queries
。
我认为我的答案位于ResultSet
内,因为我query
可以SELECT * FROM table_name
整个表格,只是不知道如何将该对象变为String Array
}。
我为这个杂乱无章的问题道歉,因工作而疲惫不堪。
TL; DR:从String Array
获取整个表格Derby Database
。
答案 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()
同样,这不是错误检查或处理,只是一个基本的例子。