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;
     }

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值