Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在go中查询sqlite数据库?_Sqlite_Go - Fatal编程技术网

如何在go中查询sqlite数据库?

如何在go中查询sqlite数据库?,sqlite,go,Sqlite,Go,我正在尝试获取“搜索”结构的数组 以下是错误: src/main.go:72:2:无法使用result(类型sql.result)作为返回参数中[]类型的搜索此链接说明了如何将SQLite与go一起使用: 但是您看到的错误是因为您的函数定义为 func get_recent_search(db*sql.db,limit int)[]搜索{} 它必须返回[]搜索(搜索结构的一部分)。(注意,我可能会将单个搜索结果命名为search) 添加@Peter Gloor建议的修复(查询以返回行,而不是执

我正在尝试获取“搜索”结构的数组

以下是错误:


src/main.go:72:2:无法使用result(类型sql.result)作为返回参数中[]类型的搜索

此链接说明了如何将SQLite与go一起使用:

但是您看到的错误是因为您的函数定义为

func get_recent_search(db*sql.db,limit int)[]搜索{}
它必须返回
[]搜索
(搜索结构的一部分)。(注意,我可能会将单个搜索结果命名为
search

添加@Peter Gloor建议的修复(查询以返回行,而不是执行以更改数据)并删除限制占位符,您的代码可能会

func获取最近的搜索(db*sql.db,limit int)[]搜索{
搜索:=进行([]次搜索,0)
查询:=“按计数说明从搜索顺序中选择*”
st,err:=db.Prepare(查询)
如果err!=nil{panic(err)}
行,错误:=st.Query(限制)
如果err!=nil{panic(err)}
对于行。下一个(){
项:=搜索{}
err2:=行.扫描(&item.id,&item.count,&item.search)
如果err2!=nil{panic(err2)}
搜索=追加(搜索,项目)
}
返回搜索
}

我不确定我是否理解这里的问题。尝试从SQLite获取数组我看到您在顶部提到的
我也尝试获取“搜索”结构的数组
,但是当前代码是否有任何错误,或者您是否无法找出方法?@chovy错误消息非常清楚,鉴于Go是一种类型化语言,您无法从一个函数返回类型为
sql的变量
result
。该函数的返回类型声明为
[]搜索
。在我看来,您对Go语言、其类型系统和数据库/sql包缺少一些基本的了解。我的提示是,尝试使用db.Query而不是db.Prepare,然后是st.Exec,并对注释掉的部分进行返工以解决问题。通常,Exec用于INSERT或DELETE等语句,返回值与执行的语句的效果有关,如result.RowsAffected()或result.LastInsertedID()。对返回行的语句使用查询。
type Searches struct {
    id int
    count int
    search string
}
func get_recent_searches(db *sql.DB, limit int) []Searches {
  var searches []Searches
  var query = "select from searches brder by count desc limit ?"
  st, err := db.Prepare(query)
  result, err := st.Exec(limit)

  if err != nil { panic(err) }

  /*
  for rows.Next() {
    item := Searches{}
    err2 := rows.Scan(&item.id, &item.count, &item.search)
    if err2 != nil { panic(err2) }
    searches = append(searches, item)
  }
  */
  
  return result
}
package main

import (
    "fmt"
    "log"

    "database/sql"
    _ "github.com/mattn/go-sqlite3" // Import go-sqlite3 library
)

// Searches ...
type Searches struct {
    id     int
    count  int
    search string
}

func getRecentSearches(db *sql.DB, limit int) []Searches {
    var searches []Searches
    row, err := db.Query("SELECT * FROM search ORDER BY count LIMIT ?", limit)
    if err != nil {
        log.Fatal(err)
    }
    defer row.Close()
    for row.Next() { // Iterate and fetch the records from result cursor
        item := Searches{}
        err := row.Scan(&item.id, &item.count, &item.search)
        if err != nil {
            log.Fatal(err)
        }
        searches = append(searches, item)
    }
    return searches
}

func main() {
    searchDB, _ := sql.Open("sqlite3", "./search.db") // Open the created SQLite File
    defer searchDB.Close()                            // Defer Closing the database

    // Get and print the first 5 records to the console
    searches := getRecentSearches(searchDB, 4)
    fmt.Printf("ID\tCount\tSearch\n")
    for _, item := range searches {
        fmt.Printf("%d\t%d\t%s\n", item.id, item.count, item.search)
    }
}