JavaFx Label - как заставить новую строку при отображении данных из sqlite? - PullRequest
0 голосов
/ 03 июня 2018

Я понимаю, что в JavaFX мы можем форсировать новую строку в Label с помощью кода, подобного следующему:

label.setText("Line one \n Line two");

Моя проблема такова:

Я хочу показать некоторые стихи избаза данных SQLite.Поэтому я попытался разместить в базе данных такой текст:

 Roses are red \n violets are blue

К сожалению, когда я запускаю программу, она просто отображает текст, включающий \ n, и не заставляет новую строку.

Не могли бы вы мне сказать, как я это делаю?

1 Ответ

0 голосов
/ 03 июня 2018

Вы не должны были использовать \n в строках вашей БД.Например, следующий код работает без необходимости специальной обработки разрывов строк:

String url = "jdbc:sqlite:poetryDB.db";
try (Connection connection = DriverManager.getConnection(url)) {
    try (Statement s = connection.createStatement()) {
        s.execute("CREATE TABLE IF NOT EXISTS poem(text TEXT NOT NULL)");
    }
    // insert poem containing newline
    try (PreparedStatement ps = connection.prepareStatement("INSERT INTO poem (text) VALUES (?)")) {
        ps.setString(1, "Roses are red \n violets are blue");
        ps.executeUpdate();
    }
    // print content of the db table
    try (Statement s = connection.createStatement()) {
        ResultSet rs = s.executeQuery("SELECT text FROM POEM");
        while (rs.next()) {
            System.out.println(rs.getString(1).replace("\\n", "\n"));
            System.out.println("----------------");
        }
    }
}

Если вы действительно хотите хранить символы новой строки как \n в БД, вам нужно заменить \n символами новой строки после полученияданные из базы данных:

String value = resultSet.getString(index).replace("\\n", "\n");

Если вы хотите исправить базу данных, все, что вам нужно сделать, это запустить обновление, которое заменяет вхождения \n:

try (Statement s = connection.createStatement()) {
    s.executeUpdate("UPDATE poem SET text = REPLACE(text, '\\n', '\n')");
}
...