如何在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)
}
}