【问题标题】:Insert/Update SQL table from observablelist从 observablelist 插入/更新 SQL 表
【发布时间】:2013-05-18 03:57:29
【问题描述】:

好的,所以我正在使用 ObservableList,它工作正常,但现在我需要使用 observable 列表将行插入和更新 SQL 数据库表中的行。我发现很少有关于在 JavaFX 和 SQL 数据库之间工作的信息……数据表的所有示例都有在 java 代码中创建的数据。当我在这篇文章中看到“更新 SQL 数据库”时,我充满了希望:

Update sql database from FoxPro data on Glassfish server

但不适用于我的情况。

所以问题是,如何启动从 ObservableList 中读取的代码,以便运行我的 SQL Insert 语句?如果您能指出一个使用 ObservableList 并创建/添加/更新 SQL 表的示例代码,我将不胜感激。

谢谢!

问题更新:

我不能在这里发布相关代码,因为相关部分是我没有的。但是,我在想我需要做的是这样的:

mylist.moveToFirst();
while (mylist.next()) {
    make connection // think I got it
    INSERT INTO mytable (name, address, phone) VALUES (observablename, observableaddress, observablephone // think I got this as well

显然,我将我对其他领域的知识应用于 ObservableList,但我这样做是为了展示我知道如何处理我的 ObservableList (我的列表)。

再次感谢您的帮助。

【问题讨论】:

    标签: javafx-2 sql-insert observablelist


    【解决方案1】:

    今天结结巴巴,这个问题还没有真正得到回答。一旦我了解了更多关于这种情况的信息,我重新发布了一个更具体的新问题,这个问题也没有得到解答,但我确实想通了,并在此处发布了答案:Understanding my ObservableList

    但是,为了整洁,让我在这里发布一些代码以帮助我记住,并帮助其他看到这个问题并说“是的,但是解决方案是什么?!?!?”的人

    一般来说,它看起来像这样:

    1. 我喜欢先打开我的连接并准备我的声明。
    2. 使用迭代器从列表中获取变量
    3. 在迭代器中,将变量添加到准备好的语句并执行。

    我在某处读到了有关批量执行语句的信息,但我对每个列表所做的更新很少,这似乎太复杂了,所以我只是在迭代器中单独进行每个更新。

    具体来说,这里有一些代码:

    Connection con;
    con = [your connection string]; // I actually keep my connection string in its own class
            // and just call it (OpenDB.connect()). This way I can swap out the class OpenDB
            // for whatever database I'm using (MySQL, MS Access, etc.) and I don't have to
            // change a bunch of connection strings in other classes.
    PreparedStatement pst;
    String insertString = "INSERT INTO People (Name, Address, Phone) VALUES (?, ?, ?)";
    pst = con.prepareStatement(insertString);
    
    for(Person p : mylist) { // read as: for each Person [a data model defined in a class
            // named Person] which in this set of statements we shall call 'p' within the list
            // previously defined and named 'mylist' ... or "For each Person 'p' in 'mylist'"
        String name = p.name.get(); // get the name which corresponds to the Person in this object of 'mylist'
        String address = p.address.get(); // ditto, address
        Integer phone = p.phone.get(); // ditto, phone. Did as integer here to show how to add to pst below
    
        pst.setString(1, name); // replace question mark 1 with value of 'name'
        pst.setString(2, address); // ditto, 2 and 'address'
        pst.setInt(3, phone); // ditto, 3 and 'phone'
    
        pst.executeUpdate();
    

    我就是这样做的。不确定这是否是“正确”的方法,但它确实有效。欢迎任何意见,因为我仍在学习。

    【讨论】:

      【解决方案2】:

      在 JavaFX 中,您通常会成为创建示例的人 :)

      ObservableList 支持侦听器,这些接收事件会告诉您默认情况下添加或更新了什么。 javadocs here 中有一个很好的例子。

      要获取更新事件,您需要为创建列表here 的方法提供“提取器”。这应该获取列表中对象的一个​​实例,并提供一个您要侦听的属性数组。

      【讨论】:

      • 感谢您提供的信息。但是,我不明白这如何帮助我将 ObservableList 与我的 SQL Insert 语句联系起来。 listener 属性非常有用,也是我使用 ObservableList 在 TableView 中显示数据的原因。但是我现在如何使用它来编写插入语句呢?
      • 如果您收到包含添加项目的事件,那么您可以插入它们、更新更新的项目等。
      • 我相信这对做过这件事的人来说是非常有意义的,但是这个答案对我没有帮助,我从来没有见过这个。你能指出一些真正起作用的代码吗?
      • 你只需要迭代一个列表并插入每个项目吗?谷歌“java foreach”和“jdbc insert tutorial”,这是很好的在线代码示例。任何你在 java 中看到 List 或 ArrayList 的地方,你都可以以完全相同的方式使用 ObservableList。
      猜你喜欢
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 2017-05-13
      • 2011-12-03
      • 1970-01-01
      • 2014-01-03
      相关资源
      最近更新 更多