page contents

Go语言使用sqlite3详细解说

1、在运行命令窗口创建数据库和SQL表 D:\go\src\MyTest>sqlite3创建数据表,使用.open命令,如果有这个数据库打开,若没有则创建;sqlite> .open userDB.db查看当前使用的数据库:sqli...

attachments-2021-07-xpBkeSmr60e66580b32e3.png

1、在运行命令窗口创建数据库和SQL表

D:\go\src\MyTest>sqlite3
创建数据表,使用.open命令,如果有这个数据库打开,若没有则创建;
sqlite> .open userDB.db
查看当前使用的数据库:
sqlite> .database
main: D:\go\src\MyTest\userDB.db
创建表:“userinfo”,“userdetail”
sqlite>CREATE TABLE userinfo (
---------uid INTEGER PRIMARY KEY AUTOINCREMENT,
-------- username VARCHAR(64) NULL,
---------departname VARCHAR(64) NULL,
---------created DATE NULL
);
sqlite>CREATE TABLE userdeatail (
--------uid INT(10) NULL,
------- intro TEXT NULL,
------- profile TEXT NULL,
-------- PRIMARY KEY (uid)
);
查看数据表有哪些:
sqlite> .table
userdeatail userinfo
查看表结构:
sqlite> .schema userinfo
CREATE TABLE IF NOT EXISTS “userinfo” (
“uid” INTEGER PRIMARY KEY AUTOINCREMENT,
“username” VARCHAR(64) NULL,
“departname” VARCHAR(64) NULL,
“created” TIMESTAMP default (datetime(‘now’, ‘localtime’))
);

2.Go程序如何操作数据库表数据:增删改查

package main
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
)
func main() {
fmt.Println("打开数据")
db, err := sql.Open("sqlite3", "./userDB.db")//若数据库没有在这个项目文件下,则需要写绝对路径
checkErr(err)
fmt.Println("生成数据表")
//数据表除了在命令行提前进行创建,还可以在go程序中创建,如下:
sql_table := `
CREATE TABLE IF NOT EXISTS "userinfo" (
   "uid" INTEGER PRIMARY KEY AUTOINCREMENT,
   "username" VARCHAR(64) NULL,
   "departname" VARCHAR(64) NULL,
   "created" TIMESTAMP default (datetime('now', 'localtime'))  //创建时间,使用当前时间
);
CREATE TABLE IF NOT EXISTS "userdeatail" (
   "uid" INT(10) NULL,
   "intro" TEXT NULL,
   "profile" TEXT NULL,
   PRIMARY KEY (uid)
);`
db.Exec(sql_table)//执行数据表
//插入数据
fmt.Print("插入数据, ID=")
stmt, err := db.Prepare("INSERT INTO userinfo(username, departname)  values(?, ?)")
checkErr(err)
res, err := stmt.Exec("astaxie", "研发部门")
checkErr(err)
id, err := res.LastInsertId()//返回新增的id号
checkErr(err)
fmt.Println(id)
//更新数据
fmt.Println("更新数据 ")
stmt, err = db.Prepare("update userinfo set username=? where uid=?")
checkErr(err)
res, err = stmt.Exec("astaxieupdate", id)//将新增的id的username修改为astaxieupdate
checkErr(err)
affect, err := res.RowsAffected()
checkErr(err)
fmt.Println(affect,"条数据被更新")
//查询数据
fmt.Println("查询数据")
rows, err := db.Query("SELECT * FROM userinfo")
checkErr(err)
for rows.Next() {
var uid int
var username string
var department string
var created string
err = rows.Scan(&uid, &username, &department, &created)
checkErr(err)
fmt.Println(uid, username, department, created)
}
//删除数据;
fmt.Print("删除数据,ID=")
stmt, err = db.Prepare("delete from userinfo where uid=?")
checkErr(err)
res, err = stmt.Exec(id)//将想删除的id输入进去就可以删除输入的id
checkErr(err)
affect, err = res.RowsAffected()//几条数据受影响:返回int64类型数据
checkErr(err)
fmt.Println(id)
fmt.Println(affect,"条数据被删除")

//批量删除数据
IDList:=[]int{3,4}
for _,id :=range IDList{
fmt.Println("删除数据,ID=")
stmt, err = db.Prepare("delete from userinfo where uid=?")
checkErr(err)
res, err = stmt.Exec(id)//将想删除的id输入进去就可以删除输入的id
checkErr(err)
affect, err = res.RowsAffected()//几条数据受影响:返回int64类型数据
checkErr(err)
fmt.Println(id)
fmt.Println(affect,"条数据被删除")
}


//查询数据:上面进行了删除新增的数据,所以并不知道当前数据有几条,再查询一次。
fmt.Println("查询数据")
rows, err = db.Query("SELECT * FROM userinfo")
checkErr(err)
for rows.Next() {
var uid int
var username string
var department string
var created string
err = rows.Scan(&uid, &username, &department, &created)
checkErr(err)
fmt.Println(uid, username, department, created)
}
db.Close()
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}

3、执行结果:

打开数据
生成数据表
插入数据, ID=12
更新数据
1 条数据被更新
查询数据
1 astaxie 研发部门 2020-03-20T22:12:40Z
3 astaxieupdate 研发部门 2020-03-21T09:46:35Z
12 astaxieupdate 研发部门 2020-03-22T22:06:03Z
删除数据,ID=12
1 条数据被删除
查询数据
1 astaxie 研发部门 2020-03-20T22:12:40Z
3 astaxieupdate 研发部门 2020-03-21T09:46:35Z

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

程序员编程交流QQ群:805358732

如果你想用Python开辟副业赚钱,但不熟悉爬虫与反爬虫技术,没有接单途径,也缺乏兼职经验
关注下方微信公众号:Python编程学习圈,获取价值999元全套Python入门到进阶的学习资料以及教程,还有Python技术交流群一起交流学习哦。

attachments-2022-06-R4pIAB1862ad368c18644.jpeg

  • 发表于 2021-07-08 10:45
  • 阅读 ( 1928 )
  • 分类:Golang

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1324 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章