为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:win10
【CPU】: Intel(R) Core(TM) i5-10400 CPU @ 2.90GHz 2.90
【问题描述】*:
java代码:
@Test
void test() throws IOException {
Connection conn = null;
CallableStatement cstmt = null;
try {
// 加载驱动
Class.forName("dm.jdbc.driver.DmDriver");
// 创建连接
conn = DriverManager.getConnection("jdbc:dm://192.168.10.208:5236/OSMS", "OSMS", "1111111111");
// 创建 CallableStatement 对象。
CallableStatement callStmt = conn.prepareCall("{call OSMS.GETNEWID(?)}");
// 注册 OUT 参数。
callStmt.registerOutParameter(1, Types.BIGINT);
// 执行存储过程。
callStmt.execute();
// 检索 OUT 参数的值。
long myvar = callStmt.getLong(1);
// 打印值。
System.out.println(myvar);
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭相关连接
try {
if (cstmt != null) {
cstmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
存储过程:
CREATE OR REPLACE PROCEDURE "OSMS"."GETNEWID"("NEWID" OUT BIGINT)
AUTHID DEFINER
AS
BEGIN
START TRANSACTION;
SELECT OFSS.cm_key_generator.G_CURRENT_ID+1 INTO newId FROM OFSS.cm_key_generator WHERE OFSS.cm_key_generator.ID = 1 for update;
UPDATE OFSS.cm_key_generator SET OFSS.cm_key_generator.G_CURRENT_ID = newId WHERE OFSS.cm_key_generator.ID = 1;
COMMIT;
END;
START TRANSACTION; --这句去掉试试