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

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

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

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

1.创建序列保存表

----创建序列生成表

DROP TABLE dbo.AMS_YJ_MANAGE_SEQ

GO

----序列生成记录表

CREATE TABLE dbo.AMS_YJ_MANAGE_SEQ (

YJ_TYPEvarchar(64) NOT NULL,

YJ_NAMEvarchar(64) NULL,

YJ_MAX int NOT NULL,

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

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值