暴露的科特林。西里尔文编码问题

时间:2018-11-18 11:00:37

标签: kotlin orm collate kotlin-exposed

我试图解决编码问题。因此,我从“邮递员”,从Web浏览器请求发送到服务器,在那里我通过请求中的键在数据库中搜索数据。请求可以是这样的:

http://localhost:8080/books.getBooksByGenre/Документальное/0/10

(在浏览器中)。 服务器接收字符串,例如

http://localhost:8080/books.getBooksByGenre/%D0%94%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5/0/10

然后,从url获取参数: genreName:'Документальное' 开始:0 数:10。 然后,这些数据发送到dao:

override fun findGenreByName(genreName: String): DatabaseGenre {
    return transaction(db) { getGenreByName(genreName) }
}

private fun getGenreByName(genreName: String): DatabaseGenre {
    return try {
        val foundGenre = GenreEntity.find { Genres.genre eq genreName }.single()
        DatabaseGenre(foundGenre.id.value, foundGenre.genre, foundGenre.link)
    } catch (e: Exception) {
        throw NothingFoundInDatabaseException("no one genre found by '$genreName'")
    } catch (e: NoSuchElementException) {
        val m = "Duplicates of genre with name '$genreName'"
        throw DuplicatedDataInDatabaseException(m)
    }
}

在日志中,我看到用于查找类型的sql查询是正确的,但是我收到一个例外:

java.util.NoSuchElementException: Collection is empty.

我说的sql查询是正确的:

SELECT genres.id, genres.genre, genres.link FROM genres WHERE genres.genre = 'Документальное'

类型表的结构:

genres id: int(10) genre: varchar(100) link: varchar(100

我尝试选择所有流派,并且此查询几乎正确执行。因此,我决定用英语单词检查此查询,并正确执行此查询:

SELECT genres.id, genres.genre, genres.link FROM genres WHERE genres.genre = 'simpleGenre'

我对此查询没有例外。

那么,我做错了什么以及如何解决归类问题?

UPD: 就像我在github(issue)上所说的那样,我已经将此查询尝试为mysql cli,并且收到了正确的答案。

此外,我尝试解码url参数(使用java URLDecoder类)。它也没有帮助。

1 个答案:

答案 0 :(得分:0)

谢谢,@ madhead。 我尝试了@madhead的改进,并且有效。因此,从此时开始,我的数据库连接URL如下所示:

val connect = Database.connect(
        url = "jdbc:mysql://localhost:3306/my_database_name?characterEncoding=utf8&useUnicode=true",
        driver = "com.mysql.jdbc.Driver",
        user = user_name,
        password = password
)