게시판을 이용해 주셔서 감사합니다.
다음양식에 맞게 입력해주세요.
**필수입력사항**
* 고객(업체)명 : 한국 서부발전
* 제품 버전 : gauce 4.0
* 문의 유형(질문/요청/참조) : clob 데이터 처리 및 저장
* 내용 :
clob 데이터 저장관련 해서 질문을 드릴려고 합니다.
소스 :
저장 버튼 클릭 시 호출 스크립트
function on_save() {
ta_content1.Enable = truel;
ta_content2.Enable = true2;
ta_content3.Enable = true3;
ta_content4.Enable = true4;
ta_content5.Enable = true5;
ds_01.NameValue(ds_01.RowPosition, "CONTENT1") = "ta_content1"
tr_01.ExtProp("UseActionBlank") = "T";
tr_01.Post();
}
tr 오브젝트 선언
<object id=tr_01 classid="">
<param name="ServerIP value="">
<param name="Action" value="transaction.jsp">
<param name="KeyName" value="toinb_dataid4">
<param name="KeyValue" value="JSP(I::IN_DS1=ds_01)">
</object>
textarea 오브젝트 선언
<object classid="" id="ta_content1" width="100%" height="100>
<param name=CacheLoad value=true>
<param name=Enable value=true>
<param name=ApplyRTF value=true>
</object>
bind 오브젝트 선언
<object id="bd_01" classid="">
<param name=DataID value=ds_01>
<param nameBindInfo value='
<C>Col="CONTENT1" Ctrl="ta_content1" Param=Src</C>
'
</object>
이렇게 코딩을 하고 저장을 할려고 하니 CLOB 데이터가 1byte로 생성이 되면서 글 내용을 사라지는 현황이
발생을 합니다.
어디서 잘못 된건인지 알고 싶은데... CLOB 관련된 모든 소스를 확인해 봐도 정확한 원인을 알 수가 없네요..
혹시 다른 부분에 설정을 해야 하는 부분이 있는 것인지.. 궁금 합니다.
답변 기다리겠습니다.
답변 감사드립니다.
alert(ds_01) 해본 결과 다음과 같이 나오더군요
CONTENT1:URL:NORMALTYPE:NORMALKEY
"ta_content1"
textarea 앞에 내용을 입력하고 저장 버튼을 누르면 내용이 없어지면서
transaction.jsp에서
CONTENT1_size로 사이즈를 체크해 보면 1byte로 나오네요..
WEB-INF\tmp에 생성되는 파일을 체크해 봐도 1byte로 파일만 생성이 되어 있구요..
저장을 하기 전에 다른 작업이나 설정을 해야 되는 부분이 있는지 궁금합니다.
저장시 서버 로직
req = service.getGauceRequest();
req = service.getGauceResponse();
GauceDataSet cds = req.getGauceDataSet("IN_DS1");
if(cds != null) {
int iContent1 = cds.indexOfColumn("CONTENT1");
int iContent1_size = cds.indexOfColumn("CONTENT1_size");
int iContent1_type = cds.indexOfColumn("CONTENT1_type");
GauceDataRow[] rows = cds/getDataRows();
for(int i=0; i<rows.length;i++) {
sql = "insert query";
is = (InputStream) rows[i].getInputStream(iContent1);
StringBuffer sb = new StringBufffer();
byte[] buf = new byte[1024];
while(true) {
int bread = is.read(buf);
if(bread == -1) break;
sb.append(new String(buf));
}
String content1_data = sb.toString();
StringReader sr = new StringReader(content1_data);
stmt = con.prepareStatement(sb.toString());
stmt.setCharacterStream(1, sr, content1_data.length());
stmt.executeUpdate();
is.close();
}
stmt.close();
}
이런식으로 서버 소스는 코딩 하였습니다... 다른 샘플 소스들과 비교해 보아도 다른 부분을 찾지 못해 이렇게 글을 올립니다.
내용 확인해 주시고
아래 번호로 연락 주시면 감사하겠습니다.
02-3429-6824 : 황기석
소스상의 이상은 확인할 수 없습니다.
화면에서 전달시 HTTP Analyzer와 같은 패킷 확인할 수 있는 툴에서 데이터가 정상적으로 전달되는지 확인한 후
서비스에서 전달된 URL, Size, Type 등을 로그에 남겨 데이터를 확인해야 할 것 같습니다.
FAQ의 샘플이 먼저 정상적으로 동작하는지 확인해보시기 바라며, 해당 소스를 기준으로 적용해보시기 바랍니다.
blob sample : http://member.shift.co.kr/index.php?search_target=title&search_keyword=blob&document_srl=230156
clob sample : http://member.shift.co.kr/index.php?search_target=title&search_keyword=clob&document_srl=230314
문제가 해결되지 않으시면 유지보수 담당자에게 원격지원을 받으시기 바랍니다.
감사합니다.
"Didn't meet stated Content-Length, wrote" 화면에서 보여 주려는 것과 실제로 전송되는 콘텐츠 길이를 확인 시켜 주기 위해 웹로직에 추가된 기능입니다.
참고 : http://dae0park.blog.me/140175583885
servlet code에서 아래 code를 추가해 보시기를 권장합니다.
response.setContentLength(0);
............................
............................
response.flushBuffer();
return;
|
1. 저장 전 데이터가 정상적으로 들어있는지 확인해 보시기 바랍니다.
alert(ds_01.text);
tr_01.Post();
2. OndataError를 사용하여 포멧에 이상이 있는지 확인해 보시기 바랍니다.
http://member.shift.co.kr/ComponentManual/AMX/Basic/DataSet/Event/OnDataError/OnDataError.htm
3. 또한 콜론(:)을 하나만 사용하시기 바랍니다.
I::IN_DS1=ds_01 > I:IN_DS1=ds_01
감사합니다.