JavaFx Label - 如何在从sqlite显示数据时强制换行?

时间:2018-06-03 09:39:54

标签: sql sqlite javafx label newline

据我所知,在JavaFX中,我们可以通过以下代码强制Label中的新行:

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

我的问题是:

我想从SQLite数据库中显示一些诗歌。所以我尝试在数据库中使用这样的文本:

 Roses are red \n violets are blue

不幸的是,当我运行程序时,它只显示包含\ n的文本,并且不会强制换行。

可以告诉我如何让它发挥作用吗?

1 个答案:

答案 0 :(得分:1)

您不应该在数据库行中使用\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("----------------");
        }
    }
}

如果您确实想在db中将换行符存储为\n,则需要在从db中检索数据后将\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')");
}