전에 메일로 질문 드렸던 애플릿 데이터베이스 한글 깨지는거 해결 방법 3 파일 올려둘께요
// 질문
제가 편의점 야간 아르바이트를 하고 고정적은 아니지만 금, 토요일에 쉬고 있습니다.
저번에 금요일에 약간 자고 친구만나러 갔다와서 답변을 못드렸습니다...
package JDBC_programming;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
class JDBC2
{
public static void main(String args[])
{
Connection conn = null;
Statement stmt = null;
try
{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/malldb", "root", "");
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select code, name, price, maker from goodsinfo;");
System.out.println(" 상품코드 상품명 \t\t가격 제조사");
while(rs.next())
{
String code = rs.getString("code");
String name = rs.getString("name");
int price = rs.getInt("price");
String maker = rs.getString("maker");
System.out.printf("%8s %s %12d %s %n", code, toUnicode(name), price, toUnicode(maker));
// System.out.printf("%8s %s %12d %s %n", code, name, price, maker); // 제가 실행할때 이 라인을 사용했었습니다.
}
}
catch(ClassNotFoundException cnfe)
{
System.out.println("해당 클래스를 찾을 수 없습니다." + cnfe.getMessage());
}
catch(SQLException sqle)
{
System.out.println(sqle.getMessage());
}
finally
{
try
{
stmt.close();
}
catch(Exception e)
{
}
try
{
conn.close();
}
catch(Exception e)
{
}
}
}
// 그리고 toUnicode() 메서드도 주석처리하고 실행하였습니다.
private static String toUnicode(String str)
{
try
{
byte[] b = str.getBytes("ISO-8859-1");
// byte[] b = str.getBytes("euc-kr");
return new String(b);
}
catch(java.io.UnsupportedEncodingException uee)
{
System.out.println(uee.getMessage());
return null;
}
}
/*
private static String toUnicode(String str)
{
return str;
}
*/
}
// 원본소스코드로 실행하니 한글이 제대로 출력됩니다.
가격과 제조사 내용이 정렬이 제대로 안됐는데 정렬되게 출력 못하겠습니다...
예전에 다른책에서 본 mysql 설치 방법으로 설치해서 실행되게 하려고 코드를 약간 수정했었습니다.
// 답변
안녕하세요, 최선종님
아래의 코드대로 실행했을 때 한글이 제대로 나온다면 데이터가 ISO-8859-1 코드로 저장되어 있는 것입니다.
그리고 데이터의 줄이 제대로 안 맞는 것은 폰트 때문인 것 같으므로 신경쓰실 필요 없습니다.
다음에 해야 할 일은 이 코드에 맞춰서 애플릿 프로그램이 제대로 작동하는지 테스트해보는 것입니다.
애플릿 프로그램의 SearchActionListener 클래스 안에 다음과 같은 코드가 있을 것입니다.
이중 붉은 글씨로 표시된 코드가 정확히 동일한지 비교해보십시오. 특히 toLatin1 메서드를 똑같이 호출하고
있는지 확인해보십시오.
ResultSet rs = stmt.executeQuery("select * from goodsinfo where "
+ "name like \" + toLatin1(name) + "%;");
while (rs.next()) {
String arr[] = new String[4];
arr[0] = toUnicode(rs.getString("code"));
arr[1] = toUnicode(rs.getString("name"));
arr[2] = toUnicode(rs.getString("price"));
arr[3] = toUnicode(rs.getString("maker"));
model.addRow(arr);
그 다음에 SearchActionListener 클래스 안의 toLatin1 메서드도 다음과 같이 되어 있는지 확인해보십시오.
private String toUnicode(String str)
throws java.io.UnsupportedEncodingException {
return new String(str.getBytes("ISO-8859-1"));
}
private String toLatin1(String str)
throws java.io.UnsupportedEncodingException {
return new String(str.getBytes(), "ISO-8859-1");
}
실행에 사용하신 SearchActionListener 클래스의 소스 코드를 보내주시면 더 도움이 될 것 같습니다.
그러면 답변 기다리겠습니다.