【问题标题】:java.sql.SQLException: database is locked while using in SWTjava.sql.SQLException:在 SWT 中使用时数据库被锁定
【发布时间】:2012-11-01 12:05:57
【问题描述】:

我正在尝试使用 SWT/Jface 数据通过 ibatis 实现删除 SWT 表行。

每当我尝试从客户端 (SWT) 执行插入或删除操作时,我都会遇到异常。

org.apache.ibatis.exceptions.PersistenceException: 
### Error committing transaction.  Cause: java.sql.SQLException: database is locked

当我尝试通过 ibatis 直接访问 DB (SQLite) 时,不会发生这种情况。

以下是我使用 SWT 按钮执行删除操作并尝试删除 SWT 表行的代码部分。

SWT 代码....

btnDeleteWorkspaceRow.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        IStructuredSelection selection = (IStructuredSelection) m_workplaceViewer.getSelection();                       
WorkplaceDetail workplaceDetail = (WorkplaceDetail) selection.getFirstElement();
boolean confirm = MessageDialog.openConfirm(shell,                          "Confirm Delete", "Are you sure you want to delete row"+                                    + workplaceDetail.getCode() + "'?");
if (confirm) {

 **int code =186;**   (Hardcoded row value- actual DB row number)                                       
 WorkplaceDaoImpl workplaceDaoImpl = new WorkplaceDaoImpl();

try {
**WorkplaceDaoImpl.deleteWorkplaceDetail(code);**                               
} catch (SQLException e1) {
                                                e1.printStackTrace();
}
m_bindingContext.updateModels();
}
}           
});

This is Ibatis DAO implementation code which i am invoking in SWT

**WorkplacseDaoImpl.java**

public void deleteWorkplaceDetail(int code)
            throws SQLException {
         SqlSession session = sqlSessionFactory.openSession();      
         session.delete("WorkplaceDetail.deleteWorkplaceById", code);    
         session.commit();
         session.close();        
}

**Ibatis Configuration**

  <delete id="deleteWorkplaceById">
    delete from Workplace where workplaceCode=#{code}
  </delete>

Please help me to resolve this issue. I am using SQLite DB

【问题讨论】:

    标签: java database sqlite data-binding swt


    【解决方案1】:

    根据您的描述和之前的related question,我认为您正试图同时在不同的线程中访问 SQLite 数据库。按钮事件处理程序代码在 SWT UI 线程内运行。您可能有其他代码尝试在其他线程中连接到数据库。

    【讨论】:

    • 是的,你是真正的 Alex……我正在使用 SQLite 和 Ibatis。有什么办法可以解决这个问题...因为我没有直接使用 JDBC...而不是使用 ibatis。所以我怎样才能确保单连接...而不是通过多个 DB 连接。
    • 我在下面添加了标签以确保我在 sqlmap 配置中有单个活动连接,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 2011-08-05
    • 2019-04-13
    相关资源
    最近更新 更多