【问题标题】:Filling Object[] data填充 Object[] 数据
【发布时间】:2012-01-08 00:53:54
【问题描述】:

我已经定义了一个变量

Object[] data;

如何在下一步填写数据?

我想做这样的事情:

    public Object[] select() {
   Object[] data; // Here I definded it
    try {
        stmt = conn.createStatement();
        rs = stmt.executeQuery("SELECT * FROM CUSTOMERS");
        while (rs.next()) {

/* data = {(rs.getString("fname"), (rs.getString("lname")); */
// I know it's wrong, but how can I fill it with data from a database?

        }
        rs.close();
        stmt.close();
    } catch (SQLException ex) {
        System.out.println("error while selecting");
        System.err.println(ex);
    }
    return data;
}


// -----
// somewhere else
model.addRow(DB.INSTANCE.select());

【问题讨论】:

标签: java database


【解决方案1】:

这是

 data[i++] = new Object[] {rs.getString("fname"), rs.getString("lname")}; 

但坦率地说,我会考虑创建一个新类的选项。我什至给它起了一个花哨的名字:Customer

这样你的主循环应该是这样的:

 while (rs.next()) {
     data[i++] = new Customer(rs.getString("fname"), s.getString("lname"));
 }

现在您可能会问什么是i,我们如何首先创建data?所有的好问题。您事先不知道结果集将持续多长时间,因此数组不是一个好主意。尝试改用List

public List<Customer> select() {
    List<Customer> data = new ArrayList<Customer>(); // Here you define it
    // some code
        while (rs.next()) {
            data.add(new Customer(rs.getString("fname"), (s.getString("lname")));
        }
    // etc.
    return data;
}

请注意,您几乎可以大声朗读它:data,请添加一个新的Customer

最后,我强烈建议您查看finally 关键字:它可以节省您花在奇怪和间歇性错误上的时间。

希望对您有所帮助。

【讨论】:

  • 即使我只是想将新数据加载到 JTable 中?我不想以任何方式与他们合作。
  • 也许你可以创建一个直接选择和更新JTable的addRow方法?
  • @kavuch 特别是如果您只想在 JTable 中显示数据:查看自定义 TableModels,它们不是很闪亮吗?说真的,这取决于。如果您只需要一个二维数组,请使用new Object[] {rs.getString("fname"), rs.getString("lname")}; 读取元素,使用List&lt;Object[]&gt; 来保存这些元素,并使用return data.toArray(new Object[data.size()][]); 来获取结果矩阵。不过,这是一种糟糕的方法,我绝不会推荐它。
  • @Cemre 封装呢?您最终会得到一个既了解 DB 详细信息又了解 Swing 内部的方法——确实是一团糟。
  • 非常有趣的异常。我相信您使用的是 NetBeans,问题在此处进行了描述:stackoverflow.com/questions/2333285/… — 从代码来看,您似乎混合了几种方法:您存储到 List 的内容必须对应于列表声明的泛型类型。不幸的是,cmets 不适合讨论,所以要么创建一个新问题来概述这个问题,要么只检查所有类型:IDE 应该为您突出显示违规行为。
【解决方案2】:

我认为在这种情况下最好使用数组列表(因为您可能不知道“SELECT * FROM CUSTOMERS”查询将返回多少数据)并使用其 .add 方法而不是使用本机数组。

试试:

ArrayList<Object> myArray = new ArrayList<Object>(); 

while(...){
   myArray.add(anything that has type Object);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 2017-09-09
    • 2014-01-20
    • 2018-02-24
    • 2012-07-14
    • 2013-06-01
    • 2014-04-24
    相关资源
    最近更新 更多