`
wangyihust
  • 浏览: 442374 次
文章分类
社区版块
存档分类
最新评论

一个生成唯一序号的服务,虽然技术不先进,但是很好用

阅读更多

package com.highcom.seqgen.dao.jdbc;

import java.sql.*;
import javax.sql.*;

import org.apache.commons.logging.*;
import org.springframework.beans.factory.*;
import org.springframework.context.*;
import org.springframework.jdbc.core.*;
import org.springframework.jdbc.object.*;
import com.highcom.seqgen.dao.*;
import com.highcom.seqgen.domain.*;


public class SequenceDaoJdbcImpl
    implements SequenceDao, InitializingBean {

  private DataSource dataSource;
  private static Log logger = LogFactory.getLog(SequenceDaoJdbcImpl.class);

  //
  SequenceQuery sequenceQuery;
  SequenceUpdate sequenceUpdate;
  SequenceInsert sequenceInsert;
  //
  protected static final String INSERT_SQL =
      "insert into sequence(seq_name,seq_value) values( ? , ? )";
  protected static final String UPDATE_SQL =
      "update sequence set seq_value = ? where seq_name = ?";
  protected static final String SELECT_SQL =
      "select seq_name,seq_value from sequence where seq_name =?";

  public SequenceDaoJdbcImpl() {

  }

  public int getSequence(String seq_name) {
    int result;
    Object obj = sequenceQuery.findObject(new Object[] {seq_name});
    if (obj == null) {
      sequenceInsert.insert(seq_name, 0);
    }

    Sequence seq = (Sequence) sequenceQuery.findObject(new Object[] {seq_name});
    sequenceUpdate.update(seq.getName(), seq.getValue() + 1);
    result = seq.getValue() + 1;
    return result;
  }

  public void afterPropertiesSet() throws Exception {
    if (dataSource == null) {
      logger.error("Must set dataSource bean property on " + getClass());
      throw new ApplicationContextException(
          "Must set dataSource bean property on " + getClass());
    }
    //
    sequenceQuery = new SequenceQuery(this.dataSource);
    sequenceUpdate = new SequenceUpdate(this.dataSource);
    sequenceInsert = new SequenceInsert(this.dataSource);
  }

  public void setDataSource(DataSource dataSource) {
    this.dataSource = dataSource;
  }

  ///////////////////////jdbc内部类
  class SequenceInsert
      extends SqlUpdate {
    public SequenceInsert(DataSource dataSource) {
      super(dataSource, INSERT_SQL);
      declareParameter(new SqlParameter(Types.VARCHAR));
      declareParameter(new SqlParameter(Types.INTEGER));
      compile();
    }

    public void insert(String seqName, int segValue) {
      Object[] objs = new Object[] {
          seqName, new Integer(segValue)};
      super.update(objs);
    }
  }

  class SequenceUpdate
      extends SqlUpdate {
    public SequenceUpdate(DataSource dataSource) {
      super(dataSource, UPDATE_SQL);
      declareParameter(new SqlParameter(Types.INTEGER));
      declareParameter(new SqlParameter(Types.VARCHAR));

      compile();

    }

    public void update(String seqName, int segValue) {
      Object[] objs = new Object[] {
          new Integer(segValue), seqName};
      super.update(objs);
    }
  }

  class SequenceQuery
      extends MappingSqlQuery {
    public SequenceQuery(DataSource dataSource) {
      super(dataSource, SELECT_SQL);
      declareParameter(new SqlParameter(Types.VARCHAR));
      compile();
    }

    protected Object mapRow(ResultSet resultSet, int _int) throws SQLException {
      Sequence seq = new Sequence();
      seq.setName(resultSet.getString("seq_name"));
      seq.setValue(resultSet.getInt("seq_value"));
      return seq;
    }
  }

}




分享到:
评论

相关推荐

    序号自动生成工具

    5. **随机序号**:除了连续序号,有些工具可能还支持生成随机但唯一的序号,适用于需要随机标识的场合。 而"序号删除工具"则提供以下功能: 1. **选择性删除**:用户可以指定特定的序号或范围,工具会从序列中移除...

    Oracle Form自动生成序号

    在Oracle Forms中,有时我们需要处理复杂的业务数据,例如处理带有父子结构的数据集时,通常需要在表单中自动生成唯一的序号,以确保每一行记录的独特性和有序性。本文将详细介绍如何在具有Master-Detail结构的...

    在查询中生成序号列

    在数据库管理中,有时我们需要在查询结果中添加一个序列号列,这可以帮助我们更好地组织数据,便于阅读和分析。在Access数据库中,可以利用SQL语言的内置函数来实现这一功能。Access是Microsoft Office套件的一部分...

    序号自动生成.sql

    使用sql语句,在数据库记录加入时,自动生成序号

    C#生成唯一序列ID

    采用了4中方式实现唯一id生成。 其他语言可以改动。

    SQL SERVER 字符串 增长 生成唯一字符串 函数

    主要用于在数据库设计时需要自己生成定长的字符串作为关键字。这一个用户字符串每次递增而形成新串的数据库函数方法。

    cad 标带圆圈的数字序号插件,点击就自动生成序号

    超级方便,点一下就一个序号生成,可以设置字体高度,默认序号是带圆圈的,加载lsp百度一下就知道啦~

    aps.net ASPxGridView 自动生成序号列

    在本篇文章中,我们将深入探讨如何在APS.NET项目中利用ASPxGridView控件自动生成序号列,并通过具体的代码示例来实现这一功能。对于熟悉ASP.NET开发的开发者来说,ASPxGridView是一个非常实用且强大的数据展示控件,...

    c# 自动序号生成

    针对硬件绑定 软件序列号生成 , 序列号检测, 相当的好用,都加了注释

    规则序号生成

    综上所述,`规则序号生成`是一个涵盖了编程逻辑、数据处理和可能的第三方工具使用的重要主题。在具体项目中,选择合适的方法和工具生成规则序号能够极大地提高效率,保证数据的准确性和可追踪性。而理解不同生成策略...

    序号自动生成器.zip

    本文将深入探讨C#语言中如何开发一个序号自动生成器,并介绍其核心原理和应用价值。 首先,C#是Microsoft公司推出的面向对象的编程语言,它具有丰富的库支持和强大的.NET框架,使得开发此类工具变得高效且灵活。在...

    利用Excel SUBTOTAL函数在筛选条件下生成连续序号.rar

    综上所述,"利用Excel SUBTOTAL函数在筛选条件下生成连续序号"是一个高效的解决方案,能够帮助我们在处理复杂数据时保持数据的逻辑性和可读性。掌握这一技巧,无疑会提升我们在日常数据分析和报告制作中的效率。

    SQL server高并发下生成唯一订单号的存储过程

    这个是用SQL server写的存储过程,搭配里面一张数据表使用,达到高并发情况下获得唯一订单号的目的;原理:按照一定规则生成订单号后,把订单号插入数据表后,再返回给用户,由于数据表设置了主键,也就是当数据表中...

    利用SQL语句自动生成序号的两种方式.pdf

    利用 SQL 语句自动生成序号是数据库管理系统中的一种常用技术,本文将介绍两种利用 SQL 语句自动生成序号的方式,并详细解释每种方式的实现原理和应用场景。 第一种方式:使用 row_number() 函数 在 SQL Server ...

    程矢Axure夜话图文教程中继器表格生成序号.pdf

    本文将详细解析程矢Axure夜话图文教程中关于“中继器表格生成序号”的具体操作方法,并提供一系列实用技巧,帮助读者更好地理解和应用这一功能。 #### 二、基础知识回顾 在深入探讨之前,我们需要了解一些关于...

    自动生成不重复无序化id

    这是自动生成不重复主键的代码包,直接导包进入程序即可使用,帮助生成由字母数字组成的16位id号,可以用于数据库主键存储(使用数据库自增主键始终有问题,不适合大型程序的使用),该代码包运用于很多大型企业级...

    Excel表格怎么自动生成序号.docx

    但是,从 office2021 版本开始, Excel 提供了一种简单的方法来实现自动生成序号,使得用户可以更方便地生成序号。 使用 Excel 自动生成序号非常简单,只需要选定要生成序号的列,选择编号方法,然后单击"确定", ...

    C# wpf style中实现ListBox自动生成序号

    在style中生成序号,ListBox中的元素的文本标签只需应用style即可。本资源是文章https://blog.csdn.net/u013113678/article/details/120982077的附件资源,包含完整的代码及vs2019项目。

    JAVA版本的生成唯一编号

    /** * 获得序列号,同时更新持久化存储中的序列 * @param current 当前的日期 * @param start 初始化的序号 * @return 所获得新的序列号 */ protected abstract int getOrUpdateNumber(Date current, int start);

    Axure夜话之中继器系列视频教程之中继器表格生成连续序号.rar

    《Axure夜话之中继器系列视频教程》是针对Axure初学者和进阶者的一套教程资源,其中“中继器表格生成连续序号”是该系列中的一个重要章节。Axure是一款强大的交互原型设计工具,它允许设计师快速创建动态、交互式的...

Global site tag (gtag.js) - Google Analytics