ibatis sql 서버 저장 프로세스 실행
sqlserver :
create procedure insert_normal_user
@userId int output,
@loginName nvarchar(80),
@password nvarchar(80),
@company nvarchar(80),
@roleId int,
@isEnable tinyint,
@hasCoInfo tinyint,
@financeToolType tinyint
as
begin
--
SET NOCOUNT ON;
insert into CN_NORMAL_USER
(LOGIN_NAME,PASSWORD,COMPANY,ROLE_ID,IS_ENABLE,
CREATE_TIME,UPDATE_TIME,HAS_CO_INFO,FINANCE_TOOL_TYPE)
values
(@loginName,@password,@company,@roleId,@isEnable,
getDate(),getDate(),@hasCoInfo,@financeToolType);
select @userId=SCOPE_IDENTITY() ;
end
JDBC에서 스토리지 프로세스를 실행하는 방법 1:
Connection conn=getConnection();
Connection conn=getConnection();
CallableStatement call=conn.prepareCall("{call insert_normal_user(?,?,?,?,?,?,?,?)}");
call.registerOutParameter(1,java.sql.Types.INTEGER);
call.setObject(2, " ----");
call.setObject(3, "123");
call.setObject(4, "12");
call.setObject(5, 1);
call.setObject(6, 4);
call.setObject(7, 0);
call.setObject(8, 1);
call.executeUpdate();
System.out.println(call.getInt(1));
conn.close();
문제 없습니다.registerOutParameter(8,java.sql.Types.INTEGER);
콜로 변경.registerOutParameter(1,-99999);잘못 보고하다
Exception in thread "main" java.lang.NullPointerException
at com.microsoft.sqlserver.jdbc.AppDTVImpl$SetValueOp.executeDefault(Unknown Source)
at com.microsoft.sqlserver.jdbc.DTV.executeOp(Unknown Source)
at com.microsoft.sqlserver.jdbc.AppDTVImpl.setValue(Unknown Source)
at com.microsoft.sqlserver.jdbc.DTV.setValue(Unknown Source)
at com.microsoft.sqlserver.jdbc.Parameter.getTypeDefinition(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.buildParamTypeDefinitions(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.buildPreparedStrings(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doPrepExec(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PreparedStatementExecutionRequest.executeStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.CancelableRequest.execute(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeRequest(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(Unknown Source)
at com.caineng.util.ibatis.JDBC.main(JDBC.java:115)
JDBC에서 저장 프로세스를 실행하는 방법 2:
Connection conn=getConnection();
CallableStatement call=conn.prepareCall("{call insert_normal_user(?,?,?,?,?,?,?,?)}");
call.registerOutParameter(1,-99999);
call.setObject(1, 1);//
call.setObject(2, " ----");
call.setObject(3, "123");
call.setObject(4, "12");
call.setObject(5, 1);
call.setObject(6, 4);
call.setObject(7, 0);
call.setObject(8, 1);
call.executeUpdate();
System.out.println(call.getInt(1));
콜을 설정하면registerOutParameter(1,-99999);콜을 추가합니다.setObject(1, 1);정확하게 집행할 수 있다.
Ibatis 는 스토리지 프로세스 1 을 수행합니다.
구성 파일:
<parameterMap class="NormalUser" id="normalUserParameterMap">
<parameter property="userId" javaType="Integer" jdbcType="INTEGER" mode="OUT" />
<parameter property="loginName" mode="IN"/>
<parameter property="password" mode="IN"/>
<parameter property="company" mode="IN"/>
<parameter property="roleId" mode="IN" />
<parameter property="isEnable" mode="IN" />
<parameter property="hasCoInfo" mode="IN" />
<parameter property="financeToolType" mode="IN"/>
</parameterMap>
<procedure id="insertNormalUserByProcedure" parameterMap="normalUserParameterMap">
{call insert_normal_user(?,?,?,?,?,?,?,?)}
</procedure>
org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [null]; error code [0];
--- The error occurred in sqlmaps/mssql/account/NormalUser.ibatis.xml.
--- The error occurred while applying a parameter map.
--- Check the CN_NORMAL_USER.normalUserParameterMap.
--- Check the statement (update procedure failed).
--- Cause: java.lang.NullPointerException; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in sqlmaps/mssql/account/NormalUser.ibatis.xml.
--- The error occurred while applying a parameter map.
--- Check the CN_NORMAL_USER.normalUserParameterMap.
--- Check the statement (update procedure failed).
--- Cause: java.lang.NullPointerException
--- Cause: java.lang.NullPointerException; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
빈 바늘과 위 jdbc 자바 코드에call을 설정합니다.registerOutParameter(1,-99999);나중에 틀린 대로.
Ibatis 는 스토리지 프로시저 2 를 수행합니다.
<parameterMap class="NormalUser" id="normalUserParameterMap">
<parameter property="userId" javaType="Integer" jdbcType="int" mode="INOUT" />
<parameter property="loginName" mode="IN"/>
<parameter property="password" mode="IN"/>
<parameter property="company" mode="IN"/>
<parameter property="roleId" mode="IN" />
<parameter property="isEnable" mode="IN" />
<parameter property="hasCoInfo" mode="IN" />
<parameter property="financeToolType" mode="IN"/>
</parameterMap>
<procedure id="insertNormalUserByProcedure" parameterMap="normalUserParameterMap">
{call insert_normal_user(?,?,?,?,?,?,?,?)}
</procedure>
현재
jdbcType = "int"mode = "INOUT"를 통과할 수 있지만, 전제는 들어오는 대상인NormalUser의userId 속성을 비울 수 없다는 것입니다.
위 jdbc 자바 코드에call을 설정하는 것을 연상합니다.registerOutParameter(1,-99999);다음에 코드콜이 추가되었습니다.setObject(1, 1);
인용하다
ibatis parameterMap의 하위 요소 parameter의 속성 jdbcType은 이 속성(property)에 값을 부여하는 데이터베이스 필드의 데이터 형식을 명시적으로 지정하는 데 사용됩니다.
특정 작업의 경우 필드의 데이터 유형을 지정하지 않으면 일부 JDBC 드라이브에서 필드의 데이터 유형을 인식할 수 없습니다.좋은 예는요.
PreparedStatement.setNull (int parameterIndex, int sqlType) 방법으로 데이터 형식을 지정해야 합니다.데이터 형식을 지정하지 않으면,
일부 드라이브는 Types로 지정될 수 있습니다.Other 또는 Types.Null.하지만 모든 드라이브가 일치한다는 보장은 없다.이런 상황에 대해
SQL Map API에서는 parameterMap 하위 요소인 parameter의 jdbcType 속성을 사용하여 데이터 유형을 지정할 수 있습니다.
일반적으로 필드가 NULL일 수 있는 경우에만 jdbcType 속성이 필요합니다.또 다른 jdbcType 속성을 지정해야 하는 경우는 필드 형식이 날짜, 시간 형식인 경우입니다.
자바에는 Date 형식 (자바.util.Date) 이 하나뿐이고, 대부분의 SQL 데이터베이스는 적어도 세 가지가 있기 때문이다.그래서
필드 유형이 DATE인지 DATETIME인지 지정해야 합니다.속성 jdbcType은 JDBC Types 클래스에 정의된 매개 변수의 문자열 값일 수 있습니다.
그래도 일부 유형은 지원되지 않습니다(BLOB).이 절의 뒷부분은 구조가 지원하는 데이터 유형을 설명할 것이다.
주의!대부분의 JDBC 드라이브는 필드가 NULL일 때만 jdbcType 속성을 지정해야 합니다.따라서 이러한 드라이브의 경우
type 속성은 필드가 NULL일 수 있는 경우에만 지정해야 합니다.주의!Oracle Driver를 사용할 때 NULL의 필드에 jdbcType 속성을 지정하지 않으면
이러한 필드에 NULL 값을 지정하려고 하면 Invalid column type 오류가 발생합니다.
Ibatis parameterMap의 하위 요소 parameter의 속성 jdbcType에 대한 설명을 첨부합니다.
저는 식은 죽 먹기로 문필이 좋지 않으니 양해해 주십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 애플리케이션을 모든 SQL 데이터베이스와 연결그래서 오늘 이 기사를 통해 JDBC를 통해 Java 애플리케이션을 SQL 데이터베이스에 연결하기 위해 작성할 수 있는 각 줄을 설명하는 심층 가이드를 제공하여 그들과 모든 커뮤니티를 도우려고 합니다. JDBC는 J...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.