JavaFX中的TableView数据编码

时间:2016-01-03 10:57:32

标签: java maven javafx javafx-8

我在Eclipse和Firebird数据库中有一个Maven JavaFX项目,其中 UTF-8 表编码(俄语表中的数据)。当我尝试使用命令jfx:run从Eclipse运行它时 - 它已成功并且在TableView中我看到所有数据都是正确的。

enter image description here

但是,当我尝试使用命令jfx:native和设置结果包创建本机安装程序时,TableView中的所有数据都是不正确的编码(通过Internet搜索获取提示,需要从 UTF-8转换数据 WINDOWS-1251)

enter image description here

从数据库填充数据的代码:

private class GetClientListTask extends Task<ObservableList<Client>> {
        @Override
        protected ObservableList<Client> call() throws Exception {
            try (Connection connection = DriverManager.getConnection(App.DB_CONNECTION_STRING, App.DB_USERNAME, App.DB_PASSWORD)) {
                com.zvpblog.KomstarService.model.jooq.tables.Client t = com.zvpblog.KomstarService.model.jooq.tables.Client.CLIENT;
                DSL.using(connection).
                selectFrom(t).
                orderBy(t.CLIENTID.desc()).
                fetch().
                map(rs -> new Client(rs.getClientid(), DateTimeUtils.convertToLocalDate(rs.getRegdate()), rs.getLname(), rs.getFname(), rs.getMname(), rs.getGender(), DateTimeUtils.convertToLocalDate(rs.getBirthdate()), rs.getAddress(), rs.getPhone())).
                forEach(c -> clients.add(c));
                clientTableViewData = FXCollections.observableArrayList(clients);
                return clientTableViewData;             
            } catch (SQLException e) {
                LOGGER.error(e);
                return null;
            }       
        }
    }

为什么运行模式编码是正确的,但在本机包中是不正确的?

1 个答案:

答案 0 :(得分:1)

将连接属性charSetencoding设置为UTF8解决了从数据库填充数据并将数据插入数据库的问题。

...
Properties connectionProperties = new Properties();
...
connectionProperties.put("charSet", "UTF8");
connectionProperties.put("encoding", "UTF8");
...
Connection connection = DriverManager.getConnection(App.DB_CONNECTION_STRING, App.connectionProperties)
...