go之操作sqlite数据库

package main

import (
	"database/sql"
	"fmt"
	"time"

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

func main() {
	db, err := sql.Open("sqlite3", "./test.db")
	checkErr(err)

	//插入数据
	stmt, err := db.Prepare("INSERT INTO userinfo(username,departname,created) values (?,?,?)")
	checkErr(err)
	res, err := stmt.Exec("张三丰", "研发部", "2024-09-13")
	checkErr(err)
	id, err := res.LastInsertId()
	checkErr(err)
	fmt.Println(id)

	//更新数据
	stmt, err = db.Prepare("update userinfo set username=? where uid=?")
	checkErr(err)
	res, err = stmt.Exec("赵无极", id)
	checkErr(err)
	affect, err := res.RowsAffected()
	checkErr(err)
	fmt.Println(affect)

	//查询数据
	rows, err := db.Query("select * from userinfo")
	checkErr(err)

	for rows.Next() {
		var uid int
		var username string
		var departname string
		var created time.Time
		err = rows.Scan(&uid, &username, &departname, &created)
		checkErr(err)
		fmt.Println(uid)
		fmt.Println(username)
		fmt.Println(departname)
		fmt.Println(created)
	}
	//删除数据
	stmt, err = db.Prepare("delete from userinfo where uid=?")
	checkErr(err)

	res, err = stmt.Exec(id)
	checkErr(err)

	affect, err = res.RowsAffected()
	checkErr(err)

	fmt.Println(affect)

	db.Close()
}

func checkErr(err error) {
	if err != nil {
		panic(err)
	}
}

数据库sql:

CREATE table 'userinfo' (
'uid' integer PRIMARY key AUTOINCREMENT,
'username' varchar(64) NULL,
'departname' varchar(64) NULL,
'created' date NULL
);


CREATE table 'userdetail' (
'uid' int(10) NULL,
'intro' text NULL,
'profile' text NULL,
PRIMARY key  'uid'
);

遇到的小问题:

a.could not import github.com/mattn/go-sqlite3 (no required module provides package)

解决方法:1.运行 go mod tidy 来清理模块文件

                   2.重新下载模块,使用命令 go get -u github.com/mattn/go-sqlite3

b.panic:Binary was compiled with ‘CGO_ENABLED=0‘, go-sglite3 requires cgo to work. This is a stub

解决方法:缺少gcc环境,安装环境

官网地址:tdm-gcc

在 Go 语言中,我们可以使用 `database/sql` 包来访问 SQLite 数据库。下面是一个简单的示例: ```go package main import ( "database/sql" "fmt" _ "github.com/mattn/go-sqlite3" ) func main() { // 打开 SQLite 数据库 db, err := sql.Open("sqlite3", "./test.db") if err != nil { panic(err) } defer db.Close() // 创建表 _, err = db.Exec("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)") if err != nil { panic(err) } // 插入数据 stmt, err := db.Prepare("INSERT INTO users(name) values(?)") if err != nil { panic(err) } defer stmt.Close() _, err = stmt.Exec("Alice") if err != nil { panic(err) } // 查询数据 rows, err := db.Query("SELECT * FROM users") if err != nil { panic(err) } defer rows.Close() for rows.Next() { var id int var name string err := rows.Scan(&id, &name) if err != nil { panic(err) } fmt.Printf("id=%d, name=%s\n", id, name) } } ``` 在上面的示例中,我们使用了 `github.com/mattn/go-sqlite3` 包来访问 SQLite 数据库。在打开数据库时,我们传递了数据库文件路径 `./test.db`。然后,我们创建了一个名为 `users` 的表,并向其中插入了一条数据。最后,我们查询了表中的所有数据,并将其打印出来。 需要注意的是,SQLite 是一个嵌入式数据库,因此它的使用方式与其他数据库有所不同。在使用 SQLite 时,我们不需要启动一个独立的数据库服务器,而是直接访问一个文件。这种方式的好处是非常方便,但也存在一些缺点,比如并发性能不如其他数据库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值