sybase过程生成主键序列及java调用过程:
?
??? 用sybase做一个跟Oracle序列功能相同的东东,方便移植使用
?
? 1.创建序列保存表
?
----创建序列生成表DROP TABLE dbo.AMS_YJ_MANAGE_SEQGO----序列生成记录表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 ALLPAGESGOINSERT 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_MAXGOCREATE 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 ENDGO
?
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; }
?
?
?
?
?