`
wang_zhi_peng2007
  • 浏览: 251376 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

sybase过程生成主键序列及java调用过程

 
阅读更多

sybase过程生成主键序列及java调用过程:

 

    用sybase做一个跟Oracle序列功能相同的东东,方便移植使用

 

  1.创建序列保存表

 

----创建序列生成表

DROP TABLE dbo.AMS_YJ_MANAGE_SEQ
GO
----序列生成记录表
CREATE TABLE dbo.AMS_YJ_MANAGE_SEQ  ( 
	YJ_TYPE	varchar(64) NOT NULL,
	YJ_NAME	varchar(64) NULL,
	YJ_MAX 	int NOT NULL,
	USER_ID	int NULL,
	CONSTRAINT AMS_YJ_MANAGE_SEQ_PK PRIMARY KEY NONCLUSTERED(YJ_TYPE)
	WITH max_rows_per_page = 0, reservepagegap = 0
	)
LOCK ALLPAGES
GO
INSERT INTO dbo.AMS_YJ_MANAGE_SEQ(YJ_TYPE, YJ_NAME, YJ_MAX, USER_ID)
  VALUES('AMS_YJ_COMVAN_SEQ', '应急通信车', 10017, NULL)
GO

 

2. 创建序列生成存储过程 (@TYPE_MAX    返回参数)

DROP PROCEDURE dbo.YJ_MANAGE_GET_MAX
GO
CREATE PROCEDURE dbo.YJ_MANAGE_GET_MAX( @YJ_TYPE VARCHAR(256),  @TYPE_MAX INT OUTPUT) AS
 ---序列生成器
BEGIN    
      DECLARE @MAX_BAK INT
           SELECT @MAX_BAK = YJ_MAX+1 from AMS_YJ_MANAGE_SEQ WHERE YJ_TYPE=@YJ_TYPE
          IF @MAX_BAK<>0
           BEGIN
             UPDATE AMS_YJ_MANAGE_SEQ SET  YJ_MAX=YJ_MAX+1  WHERE YJ_TYPE=@YJ_TYPE
           END
          SELECT @TYPE_MAX= @MAX_BAK   
       RETURN  @TYPE_MAX                                                                                                                                                                                                                                                                                                         
END
GO

 

3. java调用

 

 /**
      * 取当前应急类型的最大编号
      * @return
      */
 	public int getYjManagerMax(String yj_type) {
     	int isSyn= 0;
         CallableStatement cStmt = null;
         String sqlStr = "{call dbo.YJ_MANAGE_GET_MAX(?,?)}";
         try {
 			cStmt = conn.prepareCall(sqlStr);
 			cStmt.setString(1,yj_type);
 			cStmt.registerOutParameter(2,java.sql.Types.INTEGER);
             cStmt.execute();
             isSyn= cStmt.getInt(2);  ----返回的序列号
             System.out.println("yyyyyy====="+isSyn);
 		} catch (SQLException e) {
 			e.printStackTrace();
 			isSyn= -1;
 		} finally {
             DBManager.closeDBStatement(cStmt);
         }
         return isSyn;
     }

 

 

 

 

 

分享到:
评论

相关推荐

    hibernate中自动生成主键的办法

    Hibernate作为一款流行的Java持久层框架,提供了多种自动生成主键的方法,以适应不同场景的需求。本文将深入探讨Hibernate中自动生成主键的几种常见策略及其应用场景。 ### 1. UUID.hex UUID(Universally Unique ...

    sybase语法大全

    - **序列(Sequence):** 自动递增或递减的数字序列,常用于主键生成。 #### 四、ASE 12 SQL语法 - **DDL(数据定义语言)** - `CREATE TABLE`: 创建新表。 - `ALTER TABLE`: 修改现有表结构。 - `DROP TABLE`: ...

    java与模式chp18[归类].pdf

    在跨平台的系统中,如需兼容Oracle、SQL Server和Sybase等,就必须采用一种通用的序列键管理机制,例如使用一个表来管理所有主键。为了确保键值不重复,采用了预定式存储方法,即先更新数据库中的键值,再提供给...

    Hibernate主键类型说明和配置手册.doc

    5. **sequence**: 使用数据库的序列生成主键,适用于DB2、PostgreSQL、Oracle、SAP DB、McKoi和Interbase。 6. **hilo**: 使用Hi-Lo算法,需要一个数据库表来存储生成的主键。不适用于JTA环境或自定义数据库连接。 ...

    hibernate各种主健详解

    Sequence策略依赖于数据库提供的序列特性来生成主键。 **特点:** - 适用于支持序列特性的数据库,如Oracle、DB2、PostgreSQL、SAP DB等。 - 由于依赖数据库特性,不同数据库之间的移植性较差。 - 在Oracle等支持...

    软件工程师java方向面试题

    - **标识列(IDENTITY)**:自动为新插入的行生成一个唯一的数字序列,常用于模拟主键。 #### 4. 内存有哪几种存储组织结构?请分别加以说明 内存组织结构主要包括以下几个方面: - **栈区(Stack)**:由编译器...

    马士兵hibernate文档.doc

    `GenerationType.IDENTITY`适用于DB2、MySQL、MS SQL Server、Sybase和HypersonicSQL,而`GenerationType.SEQUENCE`则在支持序列的数据库(如Oracle)中使用。`GenerationType.HILO`和`GenerationType.UUID`分别用于...

    Oracle 笔记.docx

    - **调用函数与过程**:通过PreparedStatement执行存储过程或函数。 - **DAO封装**:Data Access Object模式,封装数据访问逻辑。 以上内容涵盖了Oracle数据库的基础知识、核心概念以及相关技术和操作要点,旨在...

    hibernate(api_介绍)

    - **IdentifierGenerator**:这个接口允许定制主键生成策略,比如UUID、自增序列等,以满足不同的数据库和业务需求。 - **Cache**:接口用于定制缓存机制,以提高性能和减少数据库访问。Hibernate支持第二级缓存和...

    Hibernate映射文件id的generator配置方法

    * sequence(序列):在 DB2, PostgreSQL, Oracle, SAP DB, McKoi 中使用序列(sequence),而在 Interbase 中使用生成器(generator)。返回的标识符是 long, short 或者 int 类型的。 * assigned(自行分配):...

Global site tag (gtag.js) - Google Analytics