java.sql.SQLException:在SWT中使用时数据库被锁定
我正试图通过ibatis实现,使用SWT/Jface数据绑定到DB来删除SWT表行 每当我尝试从客户端(SWT)执行插入或删除操作时,就会出现以下异常 当我试图通过ibatis直接命中DB(SQLite)时,这不会发生 下面是我正在使用SWT按钮执行的删除操作的代码部分,并尝试删除SWT表行 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
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