zoukankan      html  css  js  c++  java
  • 开发中遇到问题

    今天在生产中遇到了并发导致数据null的问题:

    代码:

     public static String getAddressName(String type, String code) {
          /*String strReturn = "";
             ExeSQL exeSql = new ExeSQL();
             String sql = "select placeName from ldaddress where placeType='" + type
                     + "' and placeCode='" + code + "'";
             strReturn = exeSql.getOneValue(sql);
             return strReturn;*/
    //     缓存减少查询次数
          if(addressName == null || !addressName.containsKey( type + "_" + code )){
           addressName = new HashMap<String, String>();
           String sql = "select placeType,placeCode,placeName from ldaddress";
           ExeSQL exesql = new ExeSQL();
           SSRS ssrs = exesql.execSQL(sql);
           String key = null;
           String value = null;
           for (int i = 1; i <= ssrs.getMaxRow(); i++) {
        key = ssrs.GetText(i, 1) + "_" + ssrs.GetText(i, 2);
        value = ssrs.GetText(i, 3);
        addressName.put(key, value);
       }
          }
          return addressName.get( type + "_" + code );
    //  end
        }

    问题解决:

    public static String getAddressName(String type, String code) {
      /*
       * String strReturn = ""; ExeSQL exeSql = new ExeSQL(); String sql =
       * "select placeName from ldaddress where placeType='" + type +
       * "' and placeCode='" + code + "'"; strReturn =
       * exeSql.getOneValue(sql); return strReturn;
       */
      // start  缓存减少查询次数
      synchronized (addressName) {
       if (!addressName.containsKey(type + "_" + code)) {
        String sql = "select placeType,placeCode,placeName from ldaddress";
        ExeSQL exesql = new ExeSQL();
        SSRS ssrs = exesql.execSQL(sql);
        String key = null;
        String value = null;
        for (int i = 1; i <= ssrs.getMaxRow(); i++) {
         key = ssrs.GetText(i, 1) + "_" + ssrs.GetText(i, 2);
         value = ssrs.GetText(i, 3);
         addressName.put(key, value);
        }
       }
      }
      return addressName.get(type + "_" + code);
      // end
     }

  • 相关阅读:
    [转]VC++中操作XML(MFC、SDK)
    VC解析XML--使用CMarkup类解析XML
    C++基础--完善Socket C/S ,实现客户端,服务器端断开重连
    socket编程的select模型
    libevent源码分析
    socket异步编程--libevent的使用
    Win32编程点滴3
    Win32编程点滴5
    thrift之TTransport层的堵塞的套接字I/O传输类TSocket
    Thrift之代码生成器Compiler原理及源码详细解析1
  • 原文地址:https://www.cnblogs.com/gtaxmjld/p/5238467.html
Copyright © 2011-2022 走看看