Yritän tässä vähän opiskella Javaa ja jumiuduin pieneen ongelmaan.
private boolean avaaYhteys() {
PreparedStatement kysely = null;
boolean ok = true;
try {
String kanta = "jdbc:mysql://localhost/testikanta?useUnicode=yes&characterEncoding=UTF-8";
Class.forName("com.mysql.jdbc.Driver");
try {
yhteys = DriverManager.getConnection(kanta, "*****", "****");
} catch (SQLException e) {
System.err.println("Yhteyden avaus epäonnistui");
ok = false;
}
} catch (Exception e) {
System.err.println("Ajurin lataus epäonnistui");
ok = false;
} finally {
return ok;
}
}
public void lisaaAlbumi() {
String artistinNimi;
String albuminNimi;
int julkaisuvuosi;
PreparedStatement kysely = null;
lukija.nextLine();
System.out.println("Artistin nimi: ");
artistinNimi = lukija.nextLine();
System.out.println("Albumin nimi: ");
albuminNimi = lukija.nextLine();
System.out.println("Julkaisuvuosi: ");
julkaisuvuosi = lukija.nextInt();
try {
String s = "INSERT INTO albumi (artistin_nimi, albumin_nimi, julkaisuvuosi) VALUES (?,?,?);";
kysely = yhteys.prepareStatement(s);
kysely.setString(1, artistinNimi);
kysely.setString(2, albuminNimi);
kysely.setInt(3, julkaisuvuosi);
kysely.executeUpdate();
} catch (SQLException e) {
System.err.println("Albumin lisääminen ei onnistunut");
System.err.println(e.getMessage());
}
}Tiedot kyllä menevät tietokantaan muuten hyvin, mutta ilman ääkkösiä. Jos vaihdan koodinpätkän esimerkiksi näin...
try {
String s = "INSERT INTO albumi (artistin_nimi, albumin_nimi, julkaisuvuosi) VALUES ('Eläkeläiset','Humppasirkus','2003');";
// kysely = yhteys.prepareStatement(s);
// kysely.setString(1, artistinNimi);
// kysely.setString(2, albuminNimi);
// kysely.setInt(3, julkaisuvuosi);
kysely.executeUpdate();
}Niin ääkköset tallentuvat oikein. Eli ongelma ei ilmeisesti ole tietokannassa vaan Scanner:ssa tai Stringissä. Jostain syystä eivät siis mene utf-8 formaattiin?
Vika on luultavastikin konsolin koodisivussa, ts. sen käyttämä oletusmerkistö ei ole UTF-8. DOSissa tämän saat vaihdettua UTF-8:ksi komentamalla chcp 65001.
tsuriga kirjoitti:
Vika on luultavastikin konsolin koodisivussa, ts. sen käyttämä oletusmerkistö ei ole UTF-8. DOSissa tämän saat vaihdettua UTF-8:ksi komentamalla
chcp 65001.
Ongelma ratkesi. Käytän NetBeansia Macilla ja jostain syystä, vaikka Encoding oli laitettu UTF-8:ksi kohdasta "Project Properties -> Sources", ei sillä ollut mitään merkitystä.
Klikkasin ohjelmavalikosta NetBeansin kuvaketta "Näytä pakkauksen sisältö" ja hakemistosta "/Contents/Resources/NetBeans/etc" löytyy tiedosto netbeans.conf. Lisäsin kohdan "netbeans-default-options" perään "-J-Dfile.encoding=UTF-8".
En tiedä onko tämä jokin bugi, mutta nytpähän toimii.
Aihe on jo aika vanha, joten et voi enää vastata siihen.