注册

java调用存储过程提示dm.jdbc.driver.DMException: 试图在事务运行中,改变其属性

文春 2023/08/28 834 4 已解决

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【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;

回答 0
暂无回答
扫一扫
联系客服