关于SQL存储过程的疑问
[code=Java]
while (bool) {
if (st <= wbl.getNuberPrint()) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
st++;
long BagSerialNumber = manage.getBagNum(new Date());//从数据库表1中取出当天计数字段的值
lableEntity.setSerialNumber(BagSerialNumber+1);//计数的值加1后存入对象
bool = InsertBagUpdate(lableEntity);//调用存储过程写入数据库表1,存储过程返回值与预期一致的话返true
}
if (st == wbl.getNuberPrint()) {
break;
}
}
[/code]
上面是我的代码的一部分,现在的问题是实际使用中,一个月总有几次出现当天插入的值出现重复,我想请教下存储过程实际执行中会不会有延迟,导致我紧接着查询时出现没有查询到最新值的问题?还有最好怎么写才能避免此类问题,是用sql语句直接写更好吗? 次存储过程中只有插入表值的操作
谢谢
[解决办法]
不要先獲取,然後在程序中更新,直接調用一次程序,在數據庫中更新時獲取序列號並更新
[解决办法]
并发情况下,这个控制是不足的,总有时间差,唯一的方法是锁
在存储过程实现
开事务
取出当天计数字段的值(并加锁)
插入数据
提交事务
这样才能控制
[解决办法]
SET XACT_ABORT ONBEGIN TRANSACTION--计算相应数据--插入数据COMMIT TRANSACTION