Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: utf-8 ja MYSQL:iin tallentaminen

BrutalRabbit [09.01.2012 11:34:57]

#

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?

tsuriga [09.01.2012 13:16:28]

#

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.

BrutalRabbit [09.01.2012 13:54:16]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta