发布时间:2024-11-23 18:02:15
``` $ go get -u github.com/mattn/go-sqlite3 ```
```go package main import ( "database/sql" "fmt" _ "github.com/mattn/go-sqlite3" ) func main() { db, err := sql.Open("sqlite3", "test.db") if err != nil { fmt.Println(err) return } defer db.Close() fmt.Println("Successfully connected to SQLite database") } ```
在上面的代码中,我们使用sql.Open函数连接到SQLite数据库。参数"sqlite3"表示我们要连接的数据库驱动程序。如果成功连接到数据库,我们将获得一个指向数据库的对象。```go func createTable(db *sql.DB) error { statement, err := db.Prepare(` CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER NOT NULL ); `) if err != nil { return err } _, err = statement.Exec() if err != nil { return err } return nil } func main() { // ... 连接到数据库 err := createTable(db) if err != nil { fmt.Println(err) return } fmt.Println("Table created successfully") } ```
在上面的代码中,我们使用db.Prepare函数准备一个Create Table语句,并使用statement.Exec执行该语句以创建表。请注意,我们使用IF NOT EXISTS子句来避免在表已存在的情况下重新创建表。```go func insertData(db *sql.DB) error { statement, err := db.Prepare(` INSERT INTO users (name, age) VALUES (?, ?); `) if err != nil { return err } _, err = statement.Exec("John Doe", 30) if err != nil { return err } return nil } func main() { // ... 连接到数据库并创建表 err := insertData(db) if err != nil { fmt.Println(err) return } fmt.Println("Data inserted successfully") } ```
在上面的代码中,我们使用db.Prepare函数准备一个Insert语句,并在执行该语句之前使用statement.Exec来为预处理语句提供参数。通过?占位符,我们可以安全地插入用户提供的数据,以防止SQL注入攻击。```go func queryData(db *sql.DB) error { rows, err := db.Query(` SELECT * FROM users; `) if err != nil { return err } defer rows.Close() var id int var name string var age int for rows.Next() { err := rows.Scan(&id, &name, &age) if err != nil { return err } fmt.Println(id, name, age) } return nil } func main() { // ... 连接到数据库并创建表 // ... 插入数据 err := queryData(db) if err != nil { fmt.Println(err) return } } ```
在上面的代码中,我们使用db.Query函数执行SELECT语句,并使用rows.Next和rows.Scan迭代结果集中的行。在每次迭代中,我们从当前行中提取id、name和age,并打印这些值。```go func main() { db, err := sql.Open("sqlite3", "test.db") if err != nil { fmt.Println(err) return } defer db.Close() fmt.Println("Successfully connected to SQLite database") err = createTable(db) if err != nil { fmt.Println(err) return } fmt.Println("Table created successfully") err = insertData(db) if err != nil { fmt.Println(err) return } fmt.Println("Data inserted successfully") err = queryData(db) if err != nil { fmt.Println(err) return } } ```
在上面的代码中,我们使用defer关键字在main函数结束后关闭数据库连接。这确保了无论是成功还是失败,我们都会关闭连接,以避免资源泄漏。 现在,我们已经了解了如何使用Golang编写SQLite DLL进行数据库操作。通过创建表、插入数据和查询数据,您可以开始构建功能丰富的应用程序并与SQLite数据库进行交互。 总结 本文介绍了如何使用Golang编写SQLite DLL以进行数据库操作。我们了解了连接到数据库、创建表、插入数据、查询数据以及错误处理和关闭连接的方法。希望您通过使用这些技术来构建强大的应用程序,并充分利用SQLite数据库的优势。