【问题标题】:Connection management with ActiveJDBC使用 ActiveJDBC 进行连接管理
【发布时间】:2015-03-07 03:21:30
【问题描述】:

目前我正在使用 ActiveJDBC,据我所知,这是一个非常好的和有用的框架。但是我对它的 JDBC-Connection 管理有一些问题,因为它将打开的连接附加到当前线程。这意味着,如果我在程序初始化时打开连接,一切正常;但是如果我之后实例化一个 JFrame 并尝试在 ActionListener 中从/向数据库读取/写入数据,它将产生错误,因为没有连接到调度线程。

如何解决这个问题?我宁愿只有一个连接,我可以一直访问(通过 Base.connection()),而不是每个线程都附加一个连接..

提前致谢

【问题讨论】:

    标签: java swing activejdbc


    【解决方案1】:

    我建议你以这种方式实现动作监听器:

    public class AJListenerAdapter implements ActionListener{
      public void actionPerformed(ActionEvent e){
         Base.open(...);
         doPerform(ActionEvent e);
         Base.close(...);
      }
    
      protected abstract doPerform(ActionEvent e);
    }
    

    然后只继承这个适配器并实现doPerform() 方法。

    此外,您可能希望使用池中的连接。这是一个例子 https://github.com/javalite/activejdbc/blob/master/activejdbc/src/test/java/org/javalite/activejdbc/C3P0PoolTest.java

    【讨论】:

    • 感谢您的回复!但是每次发生数据库访问时打开和关闭连接不会是性能问题吗(例如 AbstractTableModel.getValueAt(...))?
    • 如果您使用我上面提到的连接池,则不会。或者,您可以将自己的 DataSource 实现为具有一个且只有一个连接的单例,并将其传递给Base.open(datasource)
    • 好的,我正在努力让它工作;但我无法弄清楚。我正在尝试将数据放入 TableModel。为每个 getValueAt 打开和释放连接不起作用(不足为奇)。因此,我尝试使用 List 启动 TableModel(查询在我的主线程中“执行”),即使从另一个线程访问 List,它也可以工作!我能够很好地填充 100000 行表。但我不能使用任何实际执行新查询/更新/等的方法。 (例如查询父母/孩子)因为该线程没有连接..
    • 知道了;只需要在调度线程中完成所有工作。愚蠢的错误。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2023-03-10
    相关资源
    最近更新 更多