答案是:可以的。
sqlite 本身就是嵌入式的SQL数据库引擎,不需要单独的服务器进程。sqlite 直接读取和写入普通磁盘文件,sqlite 的整个数据库(所有表、索引、触发器等)都包含在单个磁盘文件中。所以 sqlite 很适合开发本地应用程序,可以将数据库嵌入到可执行文件中,运行可执行文件即可在用户计算机中生成 sqlite 数据库文件供应用程序使用。
下面提供 Go 语言代码作为实验示例:
先使用 go get
安装 go-sqlite3
(sqlite 的 Go 驱动),再在 Go 模块中使用 go build
生成可执行文件,当运行可执行文件时,便会在可执行文件所在文件夹生成 sqlite 数据库文件 .db
。
ps:此处为方便管理 .db
文件,所以将其生成路径定位在可执行文件所在文件夹。但在实际生产中,应该放置于用户不常接触到的文件夹中,如 MacOS 的 ~/Library/Application Support/ 或 Windows 的 AppData 目录。
package main
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
)
func main() {
db, err := sql.Open("sqlite3", "./example.db")
if err != nil {
fmt.Println("Error opening database: ", err)
return
}
defer db.Close()
// 创建表
sqlStmt := `CREATE TABLE IF NOT EXISTS userinfo (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL,
departname TEXT,
created DATE
);`
_, err = db.Exec(sqlStmt)
if err != nil {
fmt.Printf("%q: %s\n", err, sqlStmt)
return
}
// 插入数据
_, err = db.Exec("INSERT INTO userinfo(username, departname, created) VALUES(?,?,?)", "john", "IT", "2023-04-01")
if err != nil {
fmt.Println("Error inserting data: ", err)
return
}
// 查询数据
rows, err := db.Query("SELECT id, username FROM userinfo")
if err != nil {
fmt.Println("Error querying data: ", err)
return
}
defer rows.Close()
for rows.Next() {
var id int
var username string
err = rows.Scan(&id, &username)
if err != nil {
fmt.Println("Error reading row: ", err)
continue
}
fmt.Println("ID:", id, "Username:", username)
}
}