Go-Sqlite3学习
go-sqlite3
是 Go 语言中用于操作 SQLite 数据库的第三方驱动库。SQLite 是一种轻量级、嵌入式的关系型数据库,适用于小型应用和嵌入式开发场景,而 go-sqlite3
库让我们能够在 Go 项目中轻松使用 SQLite 数据库。
下面是 go-sqlite3
的基本学习与使用指南:
1. 安装 go-sqlite3
要在项目中使用 go-sqlite3
,首先需要安装该库。可以使用以下命令安装:
go get github.com/mattn/go-sqlite3
安装完成后,我们就可以在代码中导入它。
2. 打开和关闭数据库
在 Go 中,使用 sql
包的 sql.Open()
方法来连接数据库。go-sqlite3
实际上是一个 database/sql
驱动,所以可以直接用标准库中的 database/sql
包进行操作。
package mainimport ("database/sql""log"_ "github.com/mattn/go-sqlite3" // 导入 SQLite3 驱动
)func main() {// 打开数据库连接db, err := sql.Open("sqlite3", "./test.db")if err != nil {log.Fatal(err)}defer db.Close()// 检查连接是否成功err = db.Ping()if err != nil {log.Fatal(err)}log.Println("数据库连接成功")
}
3. 创建表
我们可以使用 Exec
方法执行 SQL 语句,比如创建一张表:
func createTable(db *sql.DB) {query := `CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,age INTEGER);`_, err := db.Exec(query)if err != nil {log.Fatalf("创建表失败: %v", err)}log.Println("表创建成功")
}
4. 插入数据
使用 Exec
方法可以插入数据:
func insertUser(db *sql.DB, name string, age int) {query := "INSERT INTO users (name, age) VALUES (?, ?)"_, err := db.Exec(query, name, age)if err != nil {log.Fatalf("插入数据失败: %v", err)}log.Println("数据插入成功")
}
5. 查询数据
可以使用 Query
或 QueryRow
方法来查询数据:
func queryUsers(db *sql.DB) {rows, err := db.Query("SELECT id, name, age FROM users")if err != nil {log.Fatalf("查询数据失败: %v", err)}defer rows.Close()for rows.Next() {var id intvar name stringvar age interr := rows.Scan(&id, &name, &age)if err != nil {log.Fatalf("数据扫描失败: %v", err)}log.Printf("用户 ID: %d, 名称: %s, 年龄: %d\n", id, name, age)}
}
6. 更新数据
可以使用 Exec
方法执行更新操作:
func updateUser(db *sql.DB, id int, age int) {query := "UPDATE users SET age = ? WHERE id = ?"_, err := db.Exec(query, age, id)if err != nil {log.Fatalf("更新数据失败: %v", err)}log.Println("数据更新成功")
}
7. 删除数据
使用 Exec
方法可以删除数据:
func deleteUser(db *sql.DB, id int) {query := "DELETE FROM users WHERE id = ?"_, err := db.Exec(query, id)if err != nil {log.Fatalf("删除数据失败: %v", err)}log.Println("数据删除成功")
}
8. 完整示例
func main() {db, err := sql.Open("sqlite3", "./test.db")if err != nil {log.Fatal(err)}defer db.Close()createTable(db)insertUser(db, "Alice", 30)insertUser(db, "Bob", 25)queryUsers(db)updateUser(db, 1, 32)deleteUser(db, 2)
}
注意事项
- 数据安全:尽量使用参数化查询(
?
)来防止 SQL 注入攻击。 - 连接管理:
sql.DB
连接是线程安全的,建议在全局范围内维护数据库连接。 - 错误处理:注意处理每个数据库操作的错误,确保数据一致性。
这样,我们就可以在 Go 中使用 go-sqlite3
驱动来操作 SQLite 数据库了。希望这对你学习 go-sqlite3
有帮助!