如何使用Go操作SQLite
作者:数据知道
文章介绍了如何使用Go语言操作SQLite数据库,推荐使用github.com/mattn/go-sqlite3驱动,涵盖了安装驱动、连接数据库、表的创建与删除、数据的增删改查操作,并提供了一个完整的示例代码,这为学习Go语言操作SQLite提供了一个基础案例,感兴趣的朋友一起看看吧
一、驱动选择
Go语言通过标准库database/sql结合第三方驱动可以方便地操作SQLite数据库。Go语言支持SQLite的驱动较多,但推荐使用支持database/sql接口的驱动,例如github.com/mattn/go-sqlite3。该驱动功能完善,兼容性强,是Go语言操作SQLite的主流选择。
官方文档:https://mattn.github.io/go-sqlite3/
二、数据库连接
2.1 安装驱动
首先,通过以下命令安装go-sqlite3驱动:
go get github.com/mattn/go-sqlite3
2.2 连接数据库
以下代码展示了如何连接SQLite数据库:
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/mattn/go-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)
}
fmt.Println("成功连接到SQLite数据库")
}三、表操作
3.1 创建表
以下代码展示了如何创建一个用户表:
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.Fatal(err)
}
fmt.Println("表创建成功或已存在")
}3.2 删除表
如果需要删除表,可以使用以下代码:
func dropTable(db *sql.DB) {
query := "DROP TABLE IF EXISTS users;"
_, err := db.Exec(query)
if err != nil {
log.Fatal(err)
}
fmt.Println("表删除成功")
}四、增删改查操作
4.1 插入数据
以下代码展示了如何向用户表中插入数据:
func insertUser(db *sql.DB, name string, age int) {
query := "INSERT INTO users (name, age) VALUES (?, ?);"
result, err := db.Exec(query, name, age)
if err != nil {
log.Fatal(err)
}
id, _ := result.LastInsertId()
fmt.Printf("插入成功,用户ID: %d\n", id)
}4.2 查询数据
以下代码展示了如何查询用户表中的数据:
func queryUsers(db *sql.DB) {
query := "SELECT id, name, age FROM users;"
rows, err := db.Query(query)
if err != nil {
log.Fatal(err)
}
defer rows.Close()
fmt.Println("用户列表:")
for rows.Next() {
var id int
var name string
var age int
err := rows.Scan(&id, &name, &age)
if err != nil {
log.Fatal(err)
}
fmt.Printf("ID: %d, 姓名: %s, 年龄: %d\n", id, name, age)
}
}4.3 更新数据
以下代码展示了如何更新用户表中的数据:
func updateUser(db *sql.DB, id int, newName string, newAge int) {
query := "UPDATE users SET name = ?, age = ? WHERE id = ?;"
result, err := db.Exec(query, newName, newAge, id)
if err != nil {
log.Fatal(err)
}
rowsAffected, _ := result.RowsAffected()
fmt.Printf("更新成功,影响行数: %d\n", rowsAffected)
}4.4删除数据
以下代码展示了如何删除用户表中的数据:
func deleteUser(db *sql.DB, id int) {
query := "DELETE FROM users WHERE id = ?;"
result, err := db.Exec(query, id)
if err != nil {
log.Fatal(err)
}
rowsAffected, _ := result.RowsAffected()
fmt.Printf("删除成功,影响行数: %d\n", rowsAffected)
}五、完整案例
以下是一个完整的示例,包含上述所有操作:
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/mattn/go-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)
}
fmt.Println("成功连接到SQLite数据库")
createTable(db)
insertUser(db, "张三", 25)
insertUser(db, "李四", 30)
queryUsers(db)
updateUser(db, 1, "张三改", 26)
queryUsers(db)
deleteUser(db, 2)
queryUsers(db)
}
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.Fatal(err)
}
fmt.Println("表创建成功或已存在")
}
func insertUser(db *sql.DB, name string, age int) {
query := "INSERT INTO users (name, age) VALUES (?, ?);"
result, err := db.Exec(query, name, age)
if err != nil {
log.Fatal(err)
}
id, _ := result.LastInsertId()
fmt.Printf("插入成功,用户ID: %d\n", id)
}
func queryUsers(db *sql.DB) {
query := "SELECT id, name, age FROM users;"
rows, err := db.Query(query)
if err != nil {
log.Fatal(err)
}
defer rows.Close()
fmt.Println("用户列表:")
for rows.Next() {
var id int
var name string
var age int
err := rows.Scan(&id, &name, &age)
if err != nil {
log.Fatal(err)
}
fmt.Printf("ID: %d, 姓名: %s, 年龄: %d\n", id, name, age)
}
}
func updateUser(db *sql.DB, id int, newName string, newAge int) {
query := "UPDATE users SET name = ?, age = ? WHERE id = ?;"
result, err := db.Exec(query, newName, newAge, id)
if err != nil {
log.Fatal(err)
}
rowsAffected, _ := result.RowsAffected()
fmt.Printf("更新成功,影响行数: %d\n", rowsAffected)
}
func deleteUser(db *sql.DB, id int) {
query := "DELETE FROM users WHERE id = ?;"
result, err := db.Exec(query, id)
if err != nil {
log.Fatal(err)
}
rowsAffected, _ := result.RowsAffected()
fmt.Printf("删除成功,影响行数: %d\n", rowsAffected)
}总结:Go语言通过database/sql和go-sqlite3驱动可以高效地操作SQLite数据库。上述代码涵盖了数据库连接、表操作以及增删改查的完整流程,适合作为学习Go语言操作SQLite的基础案例。
到此这篇关于如何使用Go操作SQLite的文章就介绍到这了,更多相关go 操作sqlite内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
