我正在尝试创建一个网站(使用html,javascript和jsp),同时向db发送修改和选择查询。 MySQL显然不喜欢(ConcurrectModificationException
无处不在)。
我想创建一些接收sql语句并发的东西,然后根据某些属性将它们命令到一个队列中,然后在确保它们没有完成后逐个执行队列相互矛盾(删除表后的插入语句会发生矛盾)。
问题在于我不确定如何检查两个语句是否发生冲突。我想到的是检查表格在理论上在执行语句时是什么样的(通过在重复的表上运行它们),然后如果抛出错误,则语句与另一个语句冲突。但这意味着我必须多次复制表格,我非常怀疑它会起作用。
那么,我如何检查两个语句是否冲突?
例如:
String sql1 = "DELETE FROM users WHERE id=3625036";
String sql2 = "UPDATE users SET displayName=\\"FOO\\" WHERE id=3625036";
如果同时收到这两个然后以某种方式排序,那么sql2
可能会在sql1
之后执行,这将引发异常。如何检查给定示例中的冲突?
答案 0 :(得分:3)
我认为你不应该让学生完成管理排队等任务。你所描述的内容的复杂性是重要的,更重要的是,这是数据库系统的用途。他们应该被教导不要重新发明轮子,因为他们可以利用比他们能够建造得更好的东西。除非您特别想要教授这种低级数据库构建。
答案 1 :(得分:1)
应该是mysql 尝试更新mysql驱动程序的驱动程序问题。 另一种解决方法是在代码中实现表级同步。
示例:
class UserDAO{
public void upateUsers(String sql){
synchronized(UserDAO.class){
// do update operations
}
}
public void deleteUser(String sql){
synchronized(UserDAO.class){
// do delete operations
}
}
}