java读取数据库一行,如何一次使用GORM一行读取SQLite数据库

我有以下代码

package main

import (

"database/sql"

"fmt"

"log"

_ "github.com/mattn/go-sqlite3"

)

func getDatabaseHandle(dbpath string) (*sql.DB, error) {

database, err := sql.Open("sqlite3", dbpath)

if err != nil {

log.Printf("Failed to create the handle")

return nil, err

}

if err = database.Ping(); err != nil {

fmt.Printf("Failed to keep connection alive")

return nil, err

}

return database, nil

}

func getAllRows(database *sql.DB, table string) {

query := fmt.Sprintf("SELECT User, AppName FROM %s LIMIT 10", table)

rows, err := database.Query(query)

if err != nil {

panic(err)

}

defer rows.Close()

for rows.Next() {

var id int

var app string

rows.Scan(&id, &app)

fmt.Println(id, app)

}

}

func main() {

db, err := getDatabaseHandle("./gozo.db")

if err != nil {

panic(err)

}

defer db.Close()

getAllRows(db, "timesheet")

}

这是针对具有以下列的SQLite数据库

id, User, Matter, AppName, AppDesc, Duration, Type, Timestamp

上面的代码字很完美 . 但是有两个问题

我需要为我打算在for循环中使用的每个列声明变量 for rows.Next() 这很烦人,并且不能轻易地模块化 .

我需要使用ORM工具来实现数据库的可移植性 .

因此我绑了GORM,这是我的代码

type Timesheet struct {

id int

User int

Matter int

AppName string

AppDesc string

Duration int64

Type string

Timestamp string

}

// TableName -- Sets the table name

func (ts Timesheet) TableName() string {

return "timesheet"

}

func main() {

db, err := gorm.Open("sqlite3", "./gozo.db")

if err != nil {

panic(err)

}

defer db.Close()

var ts []Timesheet

db.Find(&ts).Limit(5)

fmt.Println(ts)

}

但这并没有给我正确的数据,而是它给了我所有的值0.此外,这不是使用每一行扫描迭代,以便我可以在执行一些其他相关操作时包装这个并发 . 这似乎是在拉动所有数据,这也是错误的 . 请告诉我如何在循环中扫描每一行并使用GORM获取正确的数据 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值