Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.sql.SQLException:在SWT中使用时数据库被锁定_Java_Database_Sqlite_Data Binding_Swt - Fatal编程技术网

java.sql.SQLException:在SWT中使用时数据库被锁定

java.sql.SQLException:在SWT中使用时数据库被锁定,java,database,sqlite,data-binding,swt,Java,Database,Sqlite,Data Binding,Swt,我正试图通过ibatis实现,使用SWT/Jface数据绑定到DB来删除SWT表行 每当我尝试从客户端(SWT)执行插入或删除操作时,就会出现以下异常 当我试图通过ibatis直接命中DB(SQLite)时,这不会发生 下面是我正在使用SWT按钮执行的删除操作的代码部分,并尝试删除SWT表行 SWT代码 btnDeleteWorkspaceRow.addSelectionListener(new SelectionAdapter() { @Override public

我正试图通过ibatis实现,使用SWT/Jface数据绑定到DB来删除SWT表行

每当我尝试从客户端(SWT)执行插入或删除操作时,就会出现以下异常

当我试图通过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
btnDeleteWorkspaceRow.addSelectionListener(新建SelectionAdapter()){
@凌驾
公共无效WidgeSelected(SelectionEvent e){
IStructuredSelection=(IStructuredSelection)m_workplaceViewer.getSelection();
WorkplaceDetail WorkplaceDetail=(WorkplaceDetail)selection.getFirstElement();
boolean confirm=MessageDialog.openConfirm(shell,“confirm Delete”,“确定要删除行“++workplaceDetail.getCode()+”?”);
如果(确认){
**int code=186;**(硬编码行值-实际DB行数)
WorkplaceDaoImpl WorkplaceDaoImpl=新的WorkplaceDaoImpl();
试一试{
**WorkplaceDaoImpl.deleteWorkplaceDetail(代码);**
}捕获(SQLException e1){
e1.printStackTrace();
}
m_bindingContext.updateModels();
}
}           
});
这是我在SWT中调用的Ibatis DAO实现代码
**workacsedaoimpl.java**
public void deleteWorkplaceDetail(内部代码)
抛出SQLException{
SqlSession session=sqlSessionFactory.openSession();
删除(“WorkplaceDetail.deleteWorkplaceById”,代码);
commit();
session.close();
}
**Ibatis配置**
从workplaceCode=#{code}的工作区中删除
请帮我解决这个问题。我正在使用SQLite数据库

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

是的,您是真的。。。我正在使用SQLite和Ibatis。有没有办法解决这个问题…因为我没有直接使用JDBC…而是使用ibatis。那么我如何确保单连接…而不是通过多个DB连接。我在下面添加了标记,以确保在sqlmap配置中有单活动连接,
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