大家好,欢迎来到IT知识分享网。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以戳这里获取
C:\Users\lenovo>sqlite3 C:\Users\lenovo\Desktop\test.db // 创建数据库 sqlite> .databases // 显示数据库信息 sqlite> .quit // 退出sqlite3的shell程序环境 sqlite> .open test.db // 创建数据库
新手注意,这里有一个坑,是在cmd(在命令行)中输入,而不是打开sqlite3后在shell中输入。输入 .databases 就会显示刚创建的数据库信息(能看到创建的数据库文件及地址路径信息);输入.quit 就会退出sqlite3的shell程序环境。进入SQLite后,输入 .open 数据库名.db 方式,也可以创建数据库,如果数据库文件已经建立,则打开。这种方式不支持自定义路径。
- 创建表:CREATE TABLE database_name.table_name(column1 datatype PRIMARY KEY(one or more columns),column2 datatype,…);
sqlite> CREATE TABLE express_orders (id INTEGER PRIMARY KEY NOT NULL,uid INTEGER NOT NULL,weight DOUBLE NOT NULL,created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP); // 创建表 sqlite> .schema // 查看所有表结构 sqlite> .tables // 查看所有表
- 插入数据(insert):
INSERT INTO TABLE_NAME (column1, column2, column3,…columnN) VALUES (value1, value2, value3,…valueN);
INSERT INTO TABLE_NAME VALUES (value1,value2,value3,…valueN);
sqlite> INSERT INTO express_orders (uid,weight) VALUES (39,0.9); sqlite> INSERT INTO express_orders (uid,weight) VALUES (98,67.9942); sqlite> INSERT INTO express_orders (uid,weight) VALUES (94,99.99); sqlite> INSERT INTO express_orders (uid,weight) VALUES (81,100);
- 查询数据(select):
SELECT * FROM table_name;(查询所有字段)
SELECT column1, column2, columnN FROM table_name;(查询指定字段)
SELECT * FROM table_name where column1 = 指定信息;(在限制条件下查询指定信息)
sqlite> SELECT \* FROM express_orders; sqlite> SELECT uid,weight FROM express_orders; sqlite> SELECT \* FROM express_orders where id > 1; sqlite> .header on // 开启头部显示 sqlite> .mode column // 设置输出模式,左对齐的列 sqlite> SELECT \* FROM express_orders; sqlite> .timer on // 开启 CPU 定时器 sqlite> SELECT \* FROM express_orders;
- 创建索引(Index):CREATE INDEX index_name ON table_name (column_name);
sqlite> CREATE INDEX index_uid ON express_orders (uid); // 创建索引 sqlite> .schema // 查看所有表结构
3、SQLite 可视化管理工具
SQLiteStudio是一个开源、跨平台的 SQLite 可视化管理工具。免费,多语言界面,支持 Linux,Mac 和 Windows。官方网址SQLiteStudio。
五、Go 语言使用 SQLite 数据库
1、安装 go-sqlite3
在安装go-sqlite3之前,需要先安装SQLite数据库,在Golang中通过 go get 命令安装 go-sqlite3:
go get github.com/mattn/go-sqlite3
2、安装 mingw64
在实践中我们发现,只安装 go-sqlite3 是不可以的,无法和数据库建立连接,会报以下错误:
# github.com/mattn/go-sqlite3 cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH%
报错意思是缺少 gcc 环境,我们需要装一个 gcc 环境。因为 go里面使用sqlite,实际上是要下载sqlite的源代码编译的,当然,使用的时候不用手动编译,在linux中,gcc 如果已经安装了,是不用担心的,但是在windows中,为了支持编译,必须使用 mingw64。下载后缀为 posix-seh 的,mingw64下载地址。
解压下载好的文件放置任一目录,随后将 bin 目录添加进 path 环境变量中,打开 cmd ,输入 gcc -v ,如正确显示版本号则安装成功,然后重启 goland 即可。
如果你发现在 cmd 中已经能够找到 gcc 命令,但是goland 中执行程序还是找不到的话,那么多半就是 goland 的环境变量还未刷新,重启电脑、或者清空goland全部缓存并重启,即可解决。
3、连接数据库
package main import ( "database/sql" "fmt" // 导入包,导入前缀为下划线,则init函数被执行,然后注册驱动。 \_ "github.com/mattn/go-sqlite3" "log" ) var db \*sql.DB var err error func main() { // Open() 函数指定驱动名称和数据源名称 db, err = sql.Open("sqlite3", "data.db") if err != nil { fmt.Printf("Database creation failed: %v\n", err) return } // 调用db.Close() 函数,确保关闭数据库并阻止启动新的查询 defer db.Close() var version string // QueryRow() 执行查询,返回版本号 err = db.QueryRow("SELECT SQLITE\_VERSION()").Scan(&version) if err != nil { fmt.Printf("Database creation failed: %v\n", err) return } // 连接成功,打印出"database connected:版本号" fmt.Printf("Database creation successful: %v\n", version) }
4、创建数据表
package main import ( "database/sql" "fmt" // 导入包,导入前缀为下划线,则init函数被执行,然后注册驱动。 \_ "github.com/mattn/go-sqlite3" ) func main() { // Open() 函数指定驱动名称和数据源名称 db, err = sql.Open("sqlite3", "data.db") if err != nil { fmt.Printf("Database creation failed: %v\n", err) return } // 调用db.Close() 函数,确保关闭数据库并阻止启动新的查询 defer db.Close() connectDB() createTable() } var db \*sql.DB var err error // 连接数据库 func connectDB() { var version string // QueryRow() 执行查询,返回版本号 err = db.QueryRow("SELECT SQLITE\_VERSION()").Scan(&version) if err != nil { fmt.Printf("Database creation failed: %v\n", err) return } // 连接成功,打印出"database connected:版本号" fmt.Printf("Database creation successful: %v\n", version) } // 创建数据库表 func createTable() { // 建表语句 sts := ` CREATE TABLE express\_orders ( id INTEGER PRIMARY KEY NOT NULL, uid INTEGER NOT NULL, weight DOUBLE NOT NULL, created\_at DATETIME NOT NULL DEFAULT CURRENT\_TIMESTAMP );` // 使用db.Exec() 函数来执行 SQL 语句 \_, err = db.Exec(sts) if err != nil { fmt.Printf("Failed to create database table: %v\n", err) return } fmt.Printf("Successfully created database table! \n") }
5、插入数据
package main import ( "database/sql" "fmt" // 导入包,导入前缀为下划线,则init函数被执行,然后注册驱动。 \_ "github.com/mattn/go-sqlite3" ) func main() { // Open() 函数指定驱动名称和数据源名称 db, err = sql.Open("sqlite3", "data.db") if err != nil { fmt.Printf("Database creation failed: %v\n", err) return } // 调用db.Close() 函数,确保关闭数据库并阻止启动新的查询 defer db.Close() connectDB() insert(1, 0.81192) } var db \*sql.DB var err error // 连接数据库 func connectDB() { var version string // QueryRow() 执行查询,返回版本号 err = db.QueryRow("SELECT SQLITE\_VERSION()").Scan(&version) if err != nil { fmt.Printf("Database creation failed: %v\n", err) return } // 连接成功,打印出"database connected:版本号" fmt.Printf("Database creation successful: %v\n", version) } // 插入数据 func insert(uid int, weight float64) { // 插入语句 res, err := db.Exec("INSERT INTO express\_orders(uid, weight) VALUES(?,?)", uid, weight) if err != nil { fmt.Printf("Insert data failed: %v\n", err) return } // 获取自增ID lastInsertId, \_ := res.LastInsertId() fmt.Printf("Successfully inserted data, lastInsertId = %v\n", lastInsertId) }
6、查询数据
package main import ( "database/sql" "fmt" // 导入包,导入前缀为下划线,则init函数被执行,然后注册驱动。 \_ "github.com/mattn/go-sqlite3" ) func main() { // Open() 函数指定驱动名称和数据源名称 db, err = sql.Open("sqlite3", "data.db") if err != nil { fmt.Printf("Database creation failed: %v\n", err) return } // 调用db.Close() 函数,确保关闭数据库并阻止启动新的查询 defer db.Close() connectDB() ret := query(1) fmt.Println(ret) } var db \*sql.DB var err error // 连接数据库 func connectDB() { var version string // QueryRow() 执行查询,返回版本号 err = db.QueryRow("SELECT SQLITE\_VERSION()").Scan(&version) if err != nil { fmt.Printf("Database creation failed: %v\n", err) return } // 连接成功,打印出"database connected:版本号" fmt.Printf("Database creation successful: %v\n", version) } // 查询数据 func query(uid int) (weightList []float64) { // 结果重量集合 weightList = make([]float64, 0) // 查询语句 rows, err := db.Query("SELECT weight FROM express\_orders WHERE uid = ?", uid) if err != nil { fmt.Printf("Failed to query data: %v\n", err) return } for rows.Next() { var weight float64 err = rows.Scan(&weight) if err != nil { fmt.Printf("Failed to read data: %v\n", err) continue } weightList = append(weightList, weight) } return weightList }
六、实践(运费清单计算和测试程序)
问题 1 代码如下:
package main import ( "fmt" "math" ) func main() { var weight float64 fmt.Print("请输入实际重量(单位:KG):") fmt.Scanf("%f", &weight) if weight > 0 && weight <= 100 { fee := compute(weight) fmt.Printf("快递费用为 %d 元。\n", fee) } else { fmt.Println("实际重量输入错误!!!") } } // 计算快递费用 func compute(number float64) int { // 快递费用 fee := 0 // 计费重量,实际重量向上取整 weight := int(math.Ceil(number)) // 计算费用 switch weight == 1 { case false: newFee := float64(18) for i := 2; i <= weight; i++ { newFee = 5 + newFee\*1.01 } newFee = math.Round(newFee) fee = int(newFee) default: fee = 18 } return fee }
问题 2 :
生成数据的代码:
package main import ( "database/sql" "fmt" "math/rand" "sort" "sync" // 导入包,导入前缀为下划线,则init函数被执行,然后注册驱动。 \_ "github.com/mattn/go-sqlite3" ) var db \*sql.DB var err error func main() { db, err = sql.Open("sqlite3", "data.db") if err != nil { fmt.Printf("Database creation failed: %v\n", err) return } // 调用db.Close() 函数,确保关闭数据库并阻止启动新的查询 defer db.Close() // 连接数据库 connectDB() // 创建数据库表 //createTable() // 生成 1000 个用户 id createUid() var wg sync.WaitGroup wg.Add(10) // 创建 10 个协程,同时往数据库里插数据 for i := 0; i < 10; i++ { go func() { // 生成 条订单记录并插入数据库中 createRecords() }() } wg.Wait() } // 用户 id var uidList = make([]int, 1000) // 生成 1000 个用户 id func createUid() { for i := 0; i < 1000; i++ {    既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化! 由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新 [如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/) unc() { // 生成 条订单记录并插入数据库中 createRecords() }() } wg.Wait() } // 用户 id var uidList = make([]int, 1000) // 生成 1000 个用户 id func createUid() { for i := 0; i < 1000; i++ { [外链图片转存中...(img-w8752ZqY-13)] [外链图片转存中...(img-MRPFJC0u-13)] [外链图片转存中...(img-nXbp4ZDy-14)] 既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化! 由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新 [如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/)
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/118440.html

















