在golang中参数化SQL子查询

请考虑这个问题。


我需要在 golang 中参数化一个 SQL(子)查询。请考虑下面的伪代码或https://go.dev/play/p/F-jZGEiDnsd


详细hayStack信息以字符串切片形式提供给我,lookIn并且可能会有所不同。我需要在所有这些干草堆中寻找%eedl%(针)。


评论中的代码是我目前处理它的方式 - 我只参数化needle我正在寻找的。


我如何参数化hayStacks?


package main


import "fmt"


func main() {

    fmt.Println("Hello, 世界")

    lookIn := []string{"hayStack.1", "hayStack.2", "hayStack.3", "hayStack.4", "hayStack.5"}

    needle := "eedl"

    needle = "%" + needle + "%"


    for i := range lookIn {

        fmt.Println("lookIn", lookIn[i])

    }

    fmt.Println("needle", needle)


    /* this is how I currently do 

        txt := `select needle,tagTitle,Epoch from ( select needle,tagTitle,Epoch where hayStackName = "hayStack.1" or hayStackName = "hayStack.2" or hayStackName = "hayStack.3" or hayStackName = "hayStack.3" or hayStackName = "hayStack.4" or hayStackName = "hayStack.5" )  where tagTitle like ? order by tagTitle COLLATE NOCASE ASC ;`

        rows, err := sqliteDbPtr.Query(txt, needle)


        if err != nil {

            if err != sql.ErrNoRows {

                checkErr(err)

                panic(err)

            }

            return

        }

        defer rows.Close()

    */


}

任何输入将不胜感激。


慕尼黑5688855
浏览 241回答 1
1回答

呼唤远方

仅使用标准库,您可以将 haystack 参数和 needle 参数收集到一个切片中,然后将其传递给Query方法。对于 SQL 本身,您可以使用IN运算符并将其右侧操作数生成为?基于干草堆数量的列表。args := make([]interface{}, len(lookIn)+1) // slice of all argsinRHS := "" // string of ?,... for the IN operator's right hand sidefor i := range lookIn {    args[i] = lookIn[i]    inRHS += "?,"}args[len(args)-1] = needle   // add the last arginRHS = inRHS[:len(inRHS)-1] // remove last ","query := `SELECT needle,tagTitle,EpochFROM some_tableWHERE hayStackName IN (` + inRHS + `)AND tagTitle LIKE ?ORDER BY tagTitle COLLATE NOCASE ASC`rows, err := sqliteDbPtr.Query(query, args...)if err != nil {    // handle error}defer rows.Close()for rows.Next() {    //}if err := rows.Err(); err != nil {    //}请注意,我已删除子查询并添加了FROM some_table您的问题缺少的子句。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go