데이타베이스에서의 한글 처리 방법.


[ 다음 글들 ] [ 이어서 글올리기(답하기) ] [ 자바 묻고 답하기 ]

글쓴이 :김덕태 1998년 1월 12일 15:47:30

In Reply to: 김덕태강사님께 jdbc에서 한글처리 posted by 고경환 on 1998년 1월 12일 13:33:40:

그렇게 변환하면 원래의 스트링으로 돌아오니깐 아무런 의미가 없습니다.


지금 사용하고 계신 JDBC 드라이버가 imaginary의 mSQL JDBC 드라이버하고
증상이 똑같군요 (가장 일반적인 증상)
즉, JDBC 드라이버가 데이타베이스의 디폴트 인코딩 (우리나라의 경우 "KSC5601")과
변환하여야 하는데, "8859_1" 인코딩으로 변환해서 생기는 문제인 것 같군요.
다음 예제를 참조해서 실행해보고 결과를 올려주시기 바람.


또한, JDBC 드라이버마다 코드 변환이 다를 수 있으니깐,
다른 드라이버를 사용할 때는 조사해 본후,
toDB 메쏘드와 fromDB 메쏘드를 적절히 바꿈으로써 원시 화일의 다른 부분은
수정할 필요가 없게 됩니다.
즉, 코드 변환을 제대로 하는 JDBC 드라이버로 바꾸게 될 경우에는
toDB, fromDB 메쏘드의 몸체를 { return str; }로 바꾸어주기만 하면 됩니다.
현재로서는 이 방법이 가장 간단하면서 덜 귀찮은 방법일 것 같군요.


데이타베이스로 SQL 문장을 보낼때도, 가져올때도 모두 코드 변환을
하는 데, 가져올때와는 달리 보낼때의 교정 방법이 달라서,
코드 변환을 교정하는 메쏘드를 따로 써야 하는 것입니다.




====== JDBCBugWorkaround.java ================
import java.sql.*;


class JDBCBugWorkaround
{ public static void main(String[] args)
throws ClassNotFoundException, SQLException,
java.io.UnsupportedEncodingException
{ Class.forName("com.imaginary.sql.msql.MsqlDriver");
Connection con = DriverManager.getConnection(
"jdbc:msql://" + args[0]);


Statement stmt = con.createStatement();
ResultSet rs =
stmt.executeQuery( toDB("SELECT * FROM student WHERE name = '김철수'") );


while(rs.next())
{
int id = rs.getInt("id");
String name = fromDB(rs.getString("name"));
String phone = rs.getString("phone");
System.out.println("id: " + id +
", name: " + name +
", phone: " + phone);
}
stmt.close();
con.close();
}


static String toDB(String str)
throws java.io.UnsupportedEncodingException
{ return new String( str.getBytes("KSC5601"), "8859_1" );
}


static String fromDB(String str)
throws java.io.UnsupportedEncodingException
{ return new String( str.getBytes("8859_1"), "KSC5601" );
}
}





다음 글들:



이어서 글올리기(답하기)

이름:
E-Mail:
제목:
내용:
관련 URL(선택):
URL 제목(선택):
관련 이미지 URL:


[ 다음 글들 ] [ 이어서 글올리기(답하기) ] [ 자바 묻고 답하기 ]