程序如下:
package main
//利用_可以完成包的只初始化,不引用,仅仅是是希望它执行init()函数
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
"time"
)
func main() {
//打开数据库 test.db,如果不存在,则创建
//【注意:这里创建的数据库的名字是 test.db,不是 test】
db, err := sql.Open("sqlite3", "./test.db")
checkErr(err)
//创建表 userinfo
sqlTable := `
CREATE TABLE IF NOT EXISTS userinfo(
uid INTEGER PRIMARY KEY AUTOINCREMENT,
username VARCHAR(64) NULL,
department VARCHAR(64) NULL,
created DATE NULL
);
`
db.Exec(sqlTable)
//插入
stmt, err := db.Prepare("INSERT INTO userinfo(username, department, created) values(?,?,?)")
checkErr(err)
createdNow :=time.Now()
res, err := stmt.Exec("wyj", "软件开发", createdNow)
checkErr(err)
id, err := res.LastInsertId()
checkErr(err)
fmt.Println("刚刚新增数据的ID是:", id)
//更新
stmt, err = db.Prepare("update userinfo set username=? where uid=?")
checkErr(err)
res, err = stmt.Exec("wyj_new", id)
checkErr(err)
affect, err := res.RowsAffected()
checkErr(err)
fmt.Println("更新操作影响的行数为:", affect)
//查找所有
rows, err := db.Query("SELECT * FROM userinfo")
checkErr(err)
var uid int
var username string
var department string
var created time.Time
//Next() 迭代查询数据
for rows.Next() {
//Scan() 读取每一行的值
err = rows.Scan(&uid, &username, &department, &created)
checkErr(err)
fmt.Println("userinfo 数据表中所有数据信息如下:\n", uid, username, department, created)
}
//defer stmt.Close()
//defer rows.Close()
//删除
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)
stmt.Close()
rows.Close()
//删除数据库表,此处可无
_, err = db.Exec("DROP TABLE userinfo")
fmt.Println(err)
checkErr(err)
defer db.Close()
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
运行结果如下:
发现一个问题:有时候运行此程序打印输出不全面,会有部分信息没打印出来!
不知道是 go 的哪个机制搞的鬼
如果有知道怎么回事或者怎么解决的欢迎留言哟~
♥ 喜 欢 请 点 赞 哟 ♥ |
(●ˇ∀ˇ●) |