使用存储过程,在操作数据库时开启事务,避免并发时同时操作造成数据重复

CREATE DEFINER=`root`@`localhost` PROCEDURE `GetSerialNo`(IN tsCode VARCHAR(50),OUT result VARCHAR(200) )BEGIN  DECLARE tsValue VARCHAR(50);  DECLARE tdToday VARCHAR(20);   DECLARE nowdate VARCHAR(20);   DECLARE tsQZ  VARCHAR(50);  DECLARE t_error INTEGER DEFAULT 0;  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;  START TRANSACTION;   /* UPDATE sys_sno SET sValue=sValue WHERE sCode=tsCode; */  SELECT sValue INTO tsValue FROM sys_sno WHERE sCode=tsCode;   SELECT sQz INTO tsQZ FROM sys_sno WHERE sCode=tsCode ;  -- 因子表中没有记录,插入初始值    IF tsValue IS NULL THEN    SELECT CONCAT(DATE_FORMAT(NOW(),'%y%m'),'0001') INTO tsValue;    UPDATE sys_sno SET sValue=tsValue WHERE sCode=tsCode ;    SELECT CONCAT(tsQZ,tsValue) INTO result;   ELSE        SELECT SUBSTRING(tsValue,1,4) INTO tdToday;    SELECT CONVERT(DATE_FORMAT(NOW(),'%y%m'),SIGNED) INTO nowdate;   -- 判断年月是否需要更新   IF tdToday = nowdate THEN     SET tsValue=CONVERT(tsValue,SIGNED) + 1;    ELSE     SELECT CONCAT(DATE_FORMAT(NOW(),'%y%m') ,'0001') INTO tsValue ;    END IF;    UPDATE sys_sno SET sValue =tsValue WHERE sCode=tsCode;    SELECT CONCAT(tsQZ,tsValue) INTO result;   END IF;   IF t_error =1 THEN   ROLLBACK;   SET result = 'Error';   ELSE   COMMIT;   END IF;   SELECT result ;  END;daoInteger getFaultNo(Map<String, String> parameterMap);
<update id="getFaultNo" parameterMap="getFaultMap" statementType="CALLABLE">  CALL GetSerialNo(?,?) </update> <!--  parameterMap.put("tsCode", 0);  parameterMap.put("result", -1);  --> <parameterMap type="java.util.Map" id="getFaultMap">  <parameter property="tsCode" mode="IN" jdbcType="VARCHAR"/>  <parameter property="result" mode="OUT" jdbcType="VARCHAR"/> </parameterMap>
Map<String, String> parameterMap = new HashMap<String, String>();  parameterMap.put("tsCode", "a");  parameterMap.put("result", "-1");  faultMapper.getFaultNo(parameterMap);  // insert 故障日志 (主表)  if (!parameterMap.get("result").equals("-1") &&     !parameterMap.get("result").equals("Error")) {   //成功  } else {   throw new RuntimeException();  }

更多相关文章

  1. android EditText设置不可写
  2. android 使用html5作布局文件: webview跟javascript交互
  3. android studio调试c/c++代码
  4. IM-A820L限制GSM,WCDMA上网的原理(其他泛泰机型可参考)7.13
  5. 锁屏界面
  6. android(NDK+JNI)---Eclipse+CDT+gdb调试android ndk程序
  7. Android(安卓)version and Linux Kernel version
  8. Android(安卓)闹钟管理类的使用
  9. Android学习篇之Menu的使用

随机推荐

  1. Android的API与差异化之路
  2. Android 中关于CheckBox、RadioButton、T
  3. Android 各大网络请求库的比较及实战
  4. 单挑苹果:Android系三剑客尚需时日?
  5. Google:Android将尝试兼容iPhone程序
  6. android的一些属性
  7. 【iOS-Android开发对比】之 数据存储
  8. Android中的横竖屏、资源、国际化的使用
  9. [置顶] Android开机铃声教程,所有Rom,不论C
  10. android新手入门FAQ