0

I am trying to delete SWT table row using SWT/Jface datadinding to DB through ibatis implementation.

I am getting below exception whenever i try to do insert or delete operation from client side (SWT).

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

This doesn't happen when i try to hit DB (SQLite) through ibatis directly.

Below is the code section for delete operation i am doing with SWT button and trying to delete SWT table row.

SWT Code....

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

1 Answer 1

0

From your description and related question before, I think you are trying to access SQLite database in different threads at the same time. Button event handler code is running inside of SWT UI thread. You may have other code trying to connect to database in other threads.

Sign up to request clarification or add additional context in comments.

2 Comments

Yes you are true Alex... I am using SQLite and Ibatis. Is there any way to resolve this...since i am not using JDBC directly...instead using ibatis.So how can i make sure Single connection...instead of going through multiple DB connection.
I have added below tag to make sure i have single active connection in sqlmap configuration, <property name="poolMaximumActiveConnections" value="1"/> <property name="poolMaximumIdleConnections" value="1"/>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.