请教一个JAVA取Oracle sequence的怪问题,下面是生成一个号码的JAVA代码。
比较奇怪的是99%的情况运行以下代码不会出现问题,但是偶尔会出现取不到oracle序列号(sequence)的问题。
假设某个用户登录后出现这个问题,就会一直出现取不到sequence的问题,其它用户不受影响。
万分紧急,请各位高人指点一二。是否以下语句写的有问题?万分感谢!
    
        String elecNumber = "";
        String sql = "Select SEQ_ELECTRONNUM.nextval from dual";
        int now = DateTimeUtil.getCurrentYear();
        String year = Integer.toString(now).substring(2,4);
        //Sequence值格式化为8位字符串,如00000001
        DecimalFormat df = new DecimalFormat("00000000");        
        DataSet dset = (DataSet) DrmDbpmTool.getFnmsDBPM().executeQuery(sql);
        if(dset.next()){       
         elecNumber = year + df.format(dset.getInt(1));
        }

解决方案 »

  1.   

    不会把,怎么还有取不到的时候
    我没有用java取过,用.net取过,也是这样取,没有见过这种情况
      

  2.   

    取sequence就是这么取的,取不到是什么概念,oracle报错,还是java代码运行的问题?
      

  3.   

    运行时没有错误信息,就是偶尔会出现sequence丢失的情况.执收以上代码取出来是空值.
      

  4.   

    运行时没有错误信息,就是偶尔会出现sequence丢失的情况
    暂时看不出什么问题,高手指点下哦!^^!
      

  5.   

    由于有上百个单位在同时使用这个系统,但只有某一单位取不到sequence,系统其它功能都能正常使用.
    请问使用oracle sequence对于客户端网络是不是有什么特殊要求啊?
      

  6.   

    只是某个用户取不到吗?  查看日志了没有?
    我们一般都是建立个sequence表来处理主键增加的
      

  7.   

    你synchronized看看。
    另外别忘了close dataSet。
    private static Object sequenceLock = new Object();...
    synchronized(sequenceLock) {
        DataSet dset = (DataSet)DrmDbpmTool.getFnmsDBPM().executeQuery(sql);
        if(dset.next()) {
            elecNumber = year + df.format(dset.getInt(1));
        }
        dset.close();
    }
    ....
      

  8.   

    日志里面没有错误信息,就只有一个单位反映从这周开始就一直获取不到这个sequence生成的编号,其它单位都正常,而且出问题的单位上周也正常,这是最让人不解的。
      

  9.   

    取不到这个sequence的用户,重新登陆一次,还是取不到么?
      

  10.   

    我估计Sequence到最大限制了。其他单位这周肯定还没在用这个功能。