首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >公开的句柄如何绑定参数?

公开的句柄如何绑定参数?
EN

Stack Overflow用户
提问于 2021-08-11 16:28:09
回答 1查看 83关注 0票数 0

大家好,好朋友们

我最近了解了the importance of bind parameters in sql queries for optimization

我在DSL设置中使用kotlin-exposed,当我遵循basic query example时,如下所示:

代码语言:javascript
复制
TExportJobs
    .select { TExportJobs.id eq request.id.toInt() }.firstOrNull()

打印的查询不使用绑定参数:

代码语言:javascript
复制
SELECT export_jobs.id, ... FROM export_jobs WHERE export_jobs.id = 4

是在幕后使用绑定参数暴露的吗?我的设置可能没有正确格式化吗?

下面是我的示例表对象:

代码语言:javascript
复制
object TExportJobs: IntIdTable("export_jobs") {
    val userEmail = varchar("user_email", 128).index()
}
EN

回答 1

Stack Overflow用户

发布于 2021-08-11 16:28:09

找到了!

sqlLogger接口(org.jetbrains.exposed.sql.SqlLogger)使用来自(org.jetbrains.exposed.sql.statements.StatementContext) sqlLogger的expandArgs方法来替换'?‘参数。

所以这是在幕后进行的。

代码语言:javascript
复制
buildString {
        val quoteStack = Stack<Char>()
        var lastPos = 0
        for (i in 0..sql.length - 1) {
            val char = sql[i]
            if (char == '?') {
                if (quoteStack.isEmpty()) {
                    append(sql.substring(lastPos, i))
                    lastPos = i + 1
                    val (col, value) = iterator.next()
                    append(col.valueToString(value))
                }
                continue
            }

            if (char == '\'' || char == '\"') {
                if (quoteStack.isEmpty()) {
                    quoteStack.push(char)
                } else {
                    val currentQuote = quoteStack.peek()
                    if (currentQuote == char)
                        quoteStack.pop()
                    else
                        quoteStack.push(char)
                }
            }
        }

        if (lastPos < sql.length)
            append(sql.substring(lastPos))
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68745769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档