数据库并发操作丢失更新解决方案
2015-01-15 22:40
218 查看
数据库并发操作丢失更新
两种丢失更新的区别:http://blog.csdn.net/mageshuai/article/details/4544188
一种解决方案:给数据库表添加版本号控制
修改前判断拿到的记录版本号和数据库中的版本号是否相同,
相同则更新记录并更新版本号,
不同则不修改
例:
public void updateObject(){
Date nextVersion = new Date();
if (isLatestVersion(recordId, currentVersion, nextVersion)) {
//TODO update this record
}
}
public boolean isLatestVersion(int recordId, Date currentVersion, Date nextVersion) {
String checkSql = "SELECT (? = version) from " + tableName + " WHERE recordId = ? LIMIT 1";
boolean isLatest = getJdbcTemplate(checkSql, new Object[]{currentVersion, recordId}, Boolean.class);
if (!isLatest)
return false;
String updateSql = "UPDATE " + tableName + " SET version = ? WHERE recordId = ?";
getJdbcTemplate(updateSql, new Object[]{nextVersion, recordId});
return true;
}
两种丢失更新的区别:http://blog.csdn.net/mageshuai/article/details/4544188
一种解决方案:给数据库表添加版本号控制
修改前判断拿到的记录版本号和数据库中的版本号是否相同,
相同则更新记录并更新版本号,
不同则不修改
例:
public void updateObject(){
Date nextVersion = new Date();
if (isLatestVersion(recordId, currentVersion, nextVersion)) {
//TODO update this record
}
}
public boolean isLatestVersion(int recordId, Date currentVersion, Date nextVersion) {
String checkSql = "SELECT (? = version) from " + tableName + " WHERE recordId = ? LIMIT 1";
boolean isLatest = getJdbcTemplate(checkSql, new Object[]{currentVersion, recordId}, Boolean.class);
if (!isLatest)
return false;
String updateSql = "UPDATE " + tableName + " SET version = ? WHERE recordId = ?";
getJdbcTemplate(updateSql, new Object[]{nextVersion, recordId});
return true;
}
相关文章推荐
- 数据库并发操作带来的问题以及解决方案
- 高并发下数据库丢失更新问题
- 并发数据库事务缺锁导致的数据不一致情况:丢失更新,脏读,不可重复读,幻读
- 转载:LINQ to SQL更新数据库操作
- web策略类游戏开发(三) 多线程下数据库并发更新的处理
- vfp6-8用 oracle作后端数据库时,vfp 远程视图总是提示“更新冲突”的解决方案
- LINQ to SQL更新数据库操作
- MSSQL从2000升级到2005丢失数据库关系图的解决方案
- VB+ADO检测数据库并发操作和处理并解决并发冲突
- VB6.0用recordset对数据库进行的更新操作
- 用OleDB或ODBC方式操作Excel,出现“不能更新。数据库或对象为只读”
- 复习ORACLE 数据库DBA操作日志(不停更新.........)
- 使用JSP开发应用程序时的编码(中文等乱码)问题的建议解决方案(包括接受request和数据库操作)
- 多用户或并发数据库访问或操作的问题
- 数据库的常用操作指令(随时保持更新)
- 使用JSP开发应用程序时的编码(中文等乱码)问题的建议解决方案(包括接受request和数据库操作)
- [讨论]有关Spring+Hibernate更新数据库的操作
- 封装的ADO.NET对数据库操作经典类 [更新]
- Sqlserver 在查询分析器里如何访问远程的的数据库,进行数据查询更新等操作。
- Visual C# 2008+SQL Server 2005 数据库与网络开发--8.2.2 用户数据操作的并发