database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
ㆍCUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
CUBRID Q&A 547 게시물 읽기
No. 547
Q.자바로 배치 돌러던 중 에러 발생....
작성자
고은배
작성일
2007-09-19 15:53
조회수
3,434

자바로 배치 프로그램을 짜서 돌리던중

중간 중간 아래와 같은 에러가 납니다.

 

처음부터 돌리면 동일한 곳에서 나는 것이 아니라 어떤 경우는 100회정도 돌다가...

어떤경우는 300회 정도 돌다가 에러가 발생을 하네요.

 

v-sql에서 직접 실행하면 정상적으로 데이터는 나와집니다.

 

오류 메시지...

 

java.sql.SQLException: The size of data received from server is different from the expected

        at unisql.jdbc.driver.UniSQLResultSet.beforeGetValue(UniSQLResultSet.java:1565)

        at unisql.jdbc.driver.UniSQLResultSet.getString(UniSQLResultSet.java:216)

        at unisql.jdbc.driver.UniSQLResultSet.getString(UniSQLResultSet.java:433)

        at moca.batch.AttendArtistIdxSet.main(AttendArtistIdxSet.java:57)

 

 

 

 

소스...........................

 

            System.out.println(\"데이터 조회....\");

            oldStmt = oldConn.createStatement();

            oldRset = oldStmt.executeQuery(\"SELECT eh_host, eh_code from cls_exhibit where eh_type = \'개인\'\");

 

            while(oldRset.next()) {

                eh_host.add(oldRset.getString(\"eh_host\"));

                eh_code.add(oldRset.getString(\"eh_code\"));

            }

            oldStmt.close();

            oldConn.close();

 

            idx = new int[eh_host.size()];

 

            System.out.println(\"참여번호 조회 ....\");

            newStmt = (UniSQLPreparedStatement)newConn.prepareStatement(\"select idx from artist where trim(id) = ? \");

            for(int i=0; i<eh_host.size(); i++) {

                //System.out.println(\"데이터 처리중... = \" + (String)eh_host.get(i));

                newStmt.setString(1, ((String)eh_host.get(i)).trim());

                rset1 = newStmt.executeQuery();

 

                if(rset1.next()) {

                    System.out.println(\"데이터 처리중... = **\" + rset1.getString(\"idx\") + \"**\");  --> 여기에서 계속 오류 발생

                    idx[i] = Integer.parseInt(rset1.getString(\"idx\"));

                }

                else {

                    System.out.println(\"non artist id = \" + (String)eh_host.get(i));

                }

                rset1.close();

            }

            newStmt.close();

            newConn.close();

 

이 글에 대한 댓글이 총 1건 있습니다.

질문하신 내용 관련하여 기존에 답변된 내용이 있습니다. 기존 답변을 그대로 옮기도록 하겠습니다.

 

말씀하신 에러는 다음과 같이 볼 수 있습니다.

 

원인:

JDBC 드라이버와 CAS 프로세스 사이의 통신에서 CAS의 정상적인 응답을 받지 못했을 경우 JDBC드라이버에서 발생시키는 에러 메시지 입니다.

1. JDBC드라이버와 UniCAS가 구동중인 서버 사이의 통신이 비정상적일 경우 발생할 수 있습니다.

2. CAS 프로세스가 자신의 정보를 얻기 위해 cuserid라는 System함수를 호출하는데 그 안에서 호출되는 ioctl에서 정상적인 exit 0로 종료되는 현상이 발생할 수 있습니다. 특히 Solaris9 이상에서 발생할 수 있습니다.

 

해결 방법:

1. 이와 같은 문제는 쉽게 해결점을 찾아내기 쉽지 않습니다. 네트웍 중간에 있는 방화벽, IDS에서 문제를 유발할 수 있습니다. 이 부분에서 socket을 강제 종료시키는지 확인할 필요가 있습니다.

2. UniCAS의 cas 프로세스가 cuserid 시스템 함수를 호출하고 있는데 이때 사용하는 Write Device를 /dev/null로 전환시켜주면 문제가 발생하지 않습니다.

기존 uc 명령어를 uc.d로 바꾸고 uc는 다음과 같은 쉘로 만들어 놓는 것이 방법이 될 수 있습니다. (~/unicas/bin 경로에서)

uc shell

#!/bin/sh

uc.d $* < /dev/null > /dev/null 2>&1

 

이상과 같은 관점에서 한번 살펴봐 주시기 바랍니다.

 

 

 

>자바로 배치 프로그램을 짜서 돌리던중

>중간 중간 아래와 같은 에러가 납니다.

>

>처음부터 돌리면 동일한 곳에서 나는 것이 아니라 어떤 경우는 100회정도 돌다가...

>어떤경우는 300회 정도 돌다가 에러가 발생을 하네요.

>

>v-sql에서 직접 실행하면 정상적으로 데이터는 나와집니다.

>

>오류 메시지...

>

>java.sql.SQLException: The size of data received from server is different from the expected

>        at unisql.jdbc.driver.UniSQLResultSet.beforeGetValue(UniSQLResultSet.java:1565)

>        at unisql.jdbc.driver.UniSQLResultSet.getString(UniSQLResultSet.java:216)

>        at unisql.jdbc.driver.UniSQLResultSet.getString(UniSQLResultSet.java:433)

>        at moca.batch.AttendArtistIdxSet.main(AttendArtistIdxSet.java:57)

>

>

>

>

>소스...........................

>

>            System.out.println(\"데이터 조회....\");

>            oldStmt = oldConn.createStatement();

>            oldRset = oldStmt.executeQuery(\"SELECT eh_host, eh_code from cls_exhibit where eh_type = \'개인\'\");

>

>            while(oldRset.next()) {

>                eh_host.add(oldRset.getString(\"eh_host\"));

>                eh_code.add(oldRset.getString(\"eh_code\"));

>            }

>            oldStmt.close();

>            oldConn.close();

>

>            idx = new int[eh_host.size()];

>

>            System.out.println(\"참여번호 조회 ....\");

>            newStmt = (UniSQLPreparedStatement)newConn.prepareStatement(\"select idx from artist where trim(id) = ? \");

>            for(int i=0; i<eh_host.size(); i++) {

>                //System.out.println(\"데이터 처리중... = \" + (String)eh_host.get(i));

>                newStmt.setString(1, ((String)eh_host.get(i)).trim());

>                rset1 = newStmt.executeQuery();

>

>                if(rset1.next()) {

>                    System.out.println(\"데이터 처리중... = **\" + rset1.getString(\"idx\") + \"**\");  --> 여기에서 계속 오류 발생

>                    idx[i] = Integer.parseInt(rset1.getString(\"idx\"));

>                }

>                else {

>                    System.out.println(\"non artist id = \" + (String)eh_host.get(i));

>                }

>                rset1.close();

>            }

>            newStmt.close();

>            newConn.close();

 

손승일님이 2007-09-19 17:28에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
551Q.[test중입니다 후 답변없어 재질문] cci_schema_info 에서 IS_KEY가 무조건 0만 나옵니다. [1]
이경록
2007-09-20
2960
550Q.큐브리드 처음 접합니다 [1]
초보자
2007-09-20
2830
549Q.데이타베이스 로컬 접속시 오류 [1]
양승돈
2007-09-20
2902
547Q.자바로 배치 돌러던 중 에러 발생.... [1]
고은배
2007-09-19
3434
546Q.CS 환경에서... [1]
다트25
2007-09-19
3044
545Q.CAST 관련 질문 2 [1]
gilbird
2007-09-18
2920
544Q.CAST 관련 질문 [1]
gilbird
2007-09-18
2918
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다