2014-10-31 1 views
0

Java 프로그램의 데이터로 SQLite 데이터베이스를 채우려고합니다.Java 프로그램을 통해 SQLite db에 노르웨이어 문자 삽입

데이터는 Apache POI를 사용하여 Excel 파일에서 읽습니다. 나는 정상적인 방법을 사용하여 db에 데이터를 삽입하는 데 문제가 없습니다. 그러나 쉘을 사용하여 데이터베이스를 수동으로 검사 할 때 모든 노르웨이어 문자 æ, ø, å가 올바르게 표시되지 않습니다. 쉘을 통해 데이터베이스를 수동으로 채울 때마다 필 요한대로 표시됩니다. 또한 이러한 문자가 포함 된 콘솔에 Java 문자열을 인쇄하면 올바르게 표시됩니다.

문제는이 같은 작업을 수행 할 때 발생해야합니다 : 나는 아무 소용

byte[] b = sql.getBytes("utf-8"); 
sql = new String(b, "utf-8"); 

을 시도

String sql = "insert into db(name) values (æøå)"; 
stmt.executeUpdate(sql); 

.

상황을 해결하는 방법에 대한 아이디어가 있으십니까? 감사합니다.

+1

데이터를 삽입하거나 테이블을 만들기 전에 pragma를 사용하여 데이터베이스 인코딩을 설정 했습니까? – zaerymoghaddam

답변

1

매우 간단한 해결책이 있습니다. Java와 SQLite 드라이버가 모든 것을 해줍니다. 인코딩 및 매개 변수 이스케이프는 신경 쓸 필요가 없습니다.

이 가능 방법 :

String name = "æøå" 
PreparedStatement prepStmt = conn.prepareStatement("insert into db(name) values (?)"); 
prepStmt.setString(1, name); 
prepStmt.executeUpdate(); 

또한이 코드 조각은 SQL 주입 공격에 대한 보안이다 해, PreparedStatement를 사용합니다.

동의어 : 게시 한 두 번째 코드 조각은 전혀 쓸모가 없습니다. 아무 것도하지 않습니다. String를 byte []로 변환하고 다시 String으로 변환해도 String의 단일 비트는 변경되지 않습니다.

관련 문제