저는 오랫동안 ORACLE9i와 Oracle8을 사용해 왔습니다. 여기에는 참고용으로 JSP를 사용할 때 주의해야 할 사항을 적어 두었습니다.
1. 대용량 Clob 및 BLOB 처리 방법
CLOB는 대용량 텍스트 데이터를 저장하는 데 사용되며, 애플리케이션 개발에서는 비교적 일반적으로 사용되는 sql.Clob 클래스입니다. Clob의 데이터를 가져오는 두 가지 메소드를 제공합니다.
getCharacterStream() 메소드는 유니코드로 인코딩된 입력 스트림(java.io.Reader 객체)을 반환합니다.
getAsciiStream() 메소드는 ASCII로 인코딩된 입력 스트림(java. io.InputStream 객체)
따라서 한자를 저장할 수 있는 경우 이전 방법을 사용해야 합니다.
이제 실제 예를 들어 CLOB 사용 방법을 단계별로 알아보겠습니다.
먼저 CLOB 필드가 있는 테이블을 만듭니다.
create table test (id INTEGER, content clob);
다음으로 JSP를 통해 이 테이블에 레코드를 삽입한 다음 이를 가져오고 표시합니다.
주의할
점은 다음과 같습니다.
1) Clob 유형 데이터는 직접 삽입할 수 없습니다. 그리고 먼저 empty_clob() 메소드를 통해 제공되어야 합니다. 이는 로케이터를 할당합니다(같은 방식으로, blob에 대한 로케이터를 할당하려면 빈_blob() 함수를 사용합니다). 그런 다음 이를 선택합니다(물론 현재는 데이터가 없습니다. 그러나 결과 세트는 비어 있지 않음), Clob 객체를 가져오고 객체의 내용을 수정하면 업데이트 메소드를 통해 행 레코드가 업데이트됩니다.
2) 선택을 통해 lob 유형이 포함된 레코드를 수정할 때, 행을 잠가야 합니다(for update 키워드를 통해 구현). 그렇지 않으면 Oracle이 오류를 보고합니다.
3) 삽입된 레코드를 업데이트하도록 선택하면 "읽기 순서 위반" 오류가 발생합니다. 해결 방법은 자동을 설정하는 것입니다. submit 함수를 false로 하면 즉, 자동 submit을 허용하지 않고 커밋한 뒤 선택하면 된다
.
2. 인코딩 문제
JAVA
개발자가 외국인이기 때문에 중국어에 대한 지원이 좋지 않습니다. 이것은 우리 중 많은 사람들에게 많은 골칫거리를 안겨주었습니다. 이것이 바로 우리가 한자에 대해 이야기하고 있는 것입니다. 인코딩 일부 중국어 문자 인코딩 사양에 대해서는 자세히 설명하지 않겠습니다. 주로 Oracle 데이터베이스에 연결하는 방법에 대해 설명하겠습니다. 그러나 이러한 작은 문제는 매우 골치 아픈 문제입니다.
1. 데이터베이스에 삽입된 중국어 질문은 인코딩으로 변환되어야 합니다.
2.
데이터베이스에서 읽은 중국어는 인코딩으로 변환되어야 합니다.
//ECov.java
import
java.io.UnsupportedEncodingException;
class ECov
{
public static String asc2gb(String asc){
String ret;
if(asc
==null)return asc;
try{
ret=new String(asc.getBytes("ISO8859_1"),"GB2312")
;
e ){
ret=asc;
}
return ret;
}
public static String gb2asc(String gb){
String ret;
if(gb==null)return gb;
try{
ret=new String("GB2312") " ISO8859_1");
}
catch(UnsupportedEncodingException e){
ret=gb;
}
return ret
}
public static int byte2int(byte b){
return ((-1)>>>>24)
&
b
;
이 코드의 의미 즉, 두 메소드가 하나로 결합된 것입니다.
데이터베이스에 삽입할 때는 ECov.gb2asc(arg)를 사용해야 하고, 읽을 때는 ECov.asc2gb(arg)를 사용해야 합니다. 가장 중요한 점은 Oracle이 ISO8859_1 형식의 인코딩만 인식하는 것 같다는 것입니다(그냥 제 생각입니다).
3. 몇 가지 세부 사항
1. sqlPlus에서 일반적으로 사용되는 commit() 함수인 setAutoCommit(true 또는 false)입니다. true를 사용하는 경우 commit()을 사용하지 마십시오. 그렇지 않으면 계속 commit() 메서드를 사용하게 됩니다. .
2. 실제로는 날짜 유형 처리가 setDate() 및 getDate()처럼 간단하지 않습니다. 중간에 큰 허점이 있습니다. 직접 디버깅해 보면 정말 재미있을 것입니다.
3. 데이터베이스에서는 연결 풀 기술을 사용하는 것이 가장 좋습니다. 표준 J2EE 환경과 간단한 JNDI 기술을 사용하는 것이 좋은 방법입니다.