Коллеги, у меня есть база, поля в которой в кодировке cp866. Не получается сохранить данные в кодировке так, чтобы они записались в базу корректно. Как мне это сделать?
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:configDb.db");
c.setAutoCommit(true);
System.out.println("Opened database successfully");
Statement stmt = null;
for(int i = 1; i < table.size(); i++){
String query = "";
if(table.get(i).get(2).equals("12")){
/*pstmt.setString(1,
new String(table.get(i).get(1).getBytes(Charset.forName("cp866"))));*/
/*query = "UPDATE CONFIG SET " + table.get(i).get(0) + "='"
+ new String(table.get(i).get(1).getBytes(Charset.forName("cp866"))) + "' WHERE ID=1";*/
Charset cset = Charset.forName("CP866");
ByteBuffer buf = cset.encode(table.get(i).get(1));
byte[] charsCp866 = buf.array();
String value = new String(charsCp866);
query = "UPDATE CONFIG SET " + table.get(i).get(0) + "='"
+ value + "' WHERE ID=1";
} else if(table.get(i).get(2).equals("4")) {
//pstmt.setInt(1, Integer.valueOf(table.get(i).get(1)));
/*query = "UPDATE CONFIG SET " + table.get(i).get(0) + "="
+ new String(table.get(i).get(1).getBytes(Charset.forName("cp866"))) + " WHERE ID=1";*/
Charset cset = Charset.forName("CP866");
ByteBuffer buf = cset.encode(table.get(i).get(1));
byte[] charsCp866 = buf.array();
String value = new String(charsCp866);
query = "UPDATE CONFIG SET " + table.get(i).get(0) + "="
+ value + " WHERE ID=1";
} else {
query = "";
}
PreparedStatement pstmt = c.prepareStatement(query);
if(query.equals("")) {
System.out.println("Error in creating query!");
continue;
}
pstmt.executeUpdate();
pstmt.close();
}
c.close();
} catch ( Exception e ) {
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
System.out.println("Operation done successfully");
}