0

ibatisの実装を通じてDBにSWT/Jfaceデータを使用して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
4

1 に答える 1

0

以前の説明と関連する質問から、異なるスレッドで同時に SQLite データベースにアクセスしようとしていると思います。ボタン イベント ハンドラー コードが SWT UI スレッド内で実行されています。他のコードが他のスレッドでデータベースに接続しようとしている可能性があります。

于 2012-11-13T09:23:54.673 に答える