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.