开发者

如何使用Go操作SQLite

开发者 https://www.devze.com 2025-10-11 08:58 出处:网络 作者: 数据知道
目录一、驱动选择二、数据库连接2.1 安装驱动2.2 连接数据库三、表操作3.1 创建表3.2 删除表四、增删改查操作4.1 插入数据4.2 查询数据4.3 更新数据4.4删除数据五、完整案例一、驱动选择
目录
  • 一、驱动选择
  • 二、数据库连接
    • 2.1 安装驱动
    • 2.2 连接数据库
  • 三、表操作
    • 3.1 创建表
    • 3.2 删除表
  • 四、增删改查操作
    • 4.1 插入数据
    • 4.2 查询数据
    • 4.3 更新数据
    • 4.4删除数据
  • 五、完整案例

    一、驱动选择

    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(dbphp *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, ageandroid 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 {
    		www.devze.com	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删除数据

    以下代码展示了android如何删除用户表中的数据:

    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/sqlgo-sqlite3驱动可以高效地操作SQLite数据库。上述代码涵盖了数据库连接、表操作以及增删改查的完整流程,适合作为学习Go语言操作SQLite的基础案例。

    到此这篇关于如何使用Go操作SQLite的文章就介绍到这了,更多相关go 操作sqlite内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号