golang通过database/sql驱动操作Microsoft Access数据库插件库go-adodb的使用
Golang通过database/sql驱动操作Microsoft Access数据库插件库go-adodb的使用
介绍
go-adodb是一个符合Golang内置database/sql接口的Microsoft ADODB驱动程序,可用于操作Microsoft Access数据库。
安装
使用go get命令安装该包:
go get github.com/mattn/go-adodb
使用示例
下面是一个完整的示例代码,展示如何使用go-adodb连接和操作Microsoft Access数据库:
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/mattn/go-adodb" // 导入go-adodb驱动
_ "runtime/cgo" // 防止应用崩溃
)
func main() {
// 数据库文件路径 - 替换为你的Access数据库文件路径
dbPath := `C:\path\to\your\database.mdb`
// 创建连接字符串
connStr := fmt.Sprintf("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;", dbPath)
// 打开数据库连接
db, err := sql.Open("adodb", connStr)
if err != nil {
log.Fatal(err)
}
defer db.Close()
// 测试连接
err = db.Ping()
if err != nil {
log.Fatal(err)
}
fmt.Println("成功连接到Access数据库")
// 创建表
_, err = db.Exec(`CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT,
age INTEGER
)`)
if err != nil {
log.Fatal(err)
}
// 插入数据
_, err = db.Exec("INSERT INTO users (id, name, age) VALUES (?, ?, ?)", 1, "张三", 30)
if err != nil {
log.Fatal(err)
}
// 查询数据
rows, err := db.Query("SELECT id, name, age FROM users")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
// 遍历查询结果
for rows.Next() {
var id, age int
var name string
err = rows.Scan(&id, &name, &age)
if err != nil {
log.Fatal(err)
}
fmt.Printf("ID: %d, Name: %s, Age: %d\n", id, name, age)
}
// 检查查询错误
err = rows.Err()
if err != nil {
log.Fatal(err)
}
}
注意事项
- 如果遇到应用程序崩溃的问题,可以尝试导入
runtime/cgo
包:
import (
_ "runtime/cgo"
)
-
连接字符串格式:
- 对于.mdb文件(旧版Access):
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=path/to/database.mdb;
- 对于.accdb文件(Access 2007+):
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=path/to/database.accdb;
- 对于.mdb文件(旧版Access):
-
确保系统已安装相应的Access数据库引擎驱动。
文档
更多API文档可以参考go-adodb的godoc页面。
许可证
go-adodb使用MIT许可证。
作者
Yasuhiro Matsumoto (a.k.a mattn)
更多关于golang通过database/sql驱动操作Microsoft Access数据库插件库go-adodb的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang通过database/sql驱动操作Microsoft Access数据库插件库go-adodb的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用go-adodb操作Microsoft Access数据库
go-adodb是一个Golang的数据库驱动,允许通过database/sql接口操作Microsoft Access数据库。下面我将详细介绍如何使用这个驱动。
安装go-adodb
首先需要安装go-adodb驱动:
go get github.com/mattn/go-adodb
基本使用方法
1. 导入必要的包
import (
"database/sql"
_ "github.com/mattn/go-adodb"
"log"
)
2. 建立数据库连接
连接Access数据库的基本DSN格式为:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=数据库文件路径;Persist Security Info=False;
示例代码:
func main() {
// 替换为你的Access数据库路径
dbPath := "C:/path/to/your/database.accdb"
// 构建连接字符串
connStr := "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dbPath + ";Persist Security Info=False;"
// 打开数据库连接
db, err := sql.Open("adodb", connStr)
if err != nil {
log.Fatal(err)
}
defer db.Close()
// 测试连接
err = db.Ping()
if err != nil {
log.Fatal(err)
}
log.Println("成功连接到Access数据库")
}
3. 执行查询操作
// 查询示例
func queryData(db *sql.DB) {
rows, err := db.Query("SELECT id, name, age FROM users")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var id int
var name string
var age int
err = rows.Scan(&id, &name, &age)
if err != nil {
log.Fatal(err)
}
log.Printf("ID: %d, Name: %s, Age: %d", id, name, age)
}
if err = rows.Err(); err != nil {
log.Fatal(err)
}
}
4. 执行插入操作
// 插入示例
func insertData(db *sql.DB) {
stmt, err := db.Prepare("INSERT INTO users(name, age) VALUES(?, ?)")
if err != nil {
log.Fatal(err)
}
defer stmt.Close()
res, err := stmt.Exec("张三", 25)
if err != nil {
log.Fatal(err)
}
lastId, err := res.LastInsertId()
if err != nil {
log.Fatal(err)
}
log.Printf("插入成功,ID: %d", lastId)
}
5. 执行更新操作
// 更新示例
func updateData(db *sql.DB) {
stmt, err := db.Prepare("UPDATE users SET age = ? WHERE id = ?")
if err != nil {
log.Fatal(err)
}
defer stmt.Close()
res, err := stmt.Exec(30, 1)
if err != nil {
log.Fatal(err)
}
affected, err := res.RowsAffected()
if err != nil {
log.Fatal(err)
}
log.Printf("更新了 %d 行", affected)
}
6. 执行删除操作
// 删除示例
func deleteData(db *sql.DB) {
stmt, err := db.Prepare("DELETE FROM users WHERE id = ?")
if err != nil {
log.Fatal(err)
}
defer stmt.Close()
res, err := stmt.Exec(1)
if err != nil {
log.Fatal(err)
}
affected, err := res.RowsAffected()
if err != nil {
log.Fatal(err)
}
log.Printf("删除了 %d 行", affected)
}
注意事项
-
OLEDB提供程序版本:
- 对于.accdb文件使用
Microsoft.ACE.OLEDB.12.0
- 对于.mdb文件使用
Microsoft.Jet.OLEDB.4.0
- 对于.accdb文件使用
-
32位与64位问题:
- 确保你的Golang编译环境和Access驱动版本匹配(都是32位或64位)
- 如果遇到"Provider cannot be found"错误,可能需要安装相应的Access数据库引擎
-
安装Access数据库引擎:
- 可以从Microsoft官网下载"Microsoft Access Database Engine"
-
连接字符串选项:
- 可以添加
Mode=ReadWrite
或Mode=Read
来控制访问模式 - 对于共享访问可以添加
Jet OLEDB:Database Locking Mode=1
- 可以添加
-
数据类型映射:
- Access的Boolean类型会被映射为int64(0或-1)
- 日期时间类型会被映射为time.Time
完整示例
package main
import (
"database/sql"
_ "github.com/mattn/go-adodb"
"log"
)
func main() {
dbPath := "C:/data/test.accdb"
connStr := "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dbPath + ";Persist Security Info=False;"
db, err := sql.Open("adodb", connStr)
if err != nil {
log.Fatal(err)
}
defer db.Close()
err = db.Ping()
if err != nil {
log.Fatal(err)
}
log.Println("成功连接到数据库")
// 创建表
_, err = db.Exec(`CREATE TABLE IF NOT EXISTS users (
id AUTOINCREMENT PRIMARY KEY,
name TEXT(50),
age INTEGER
)`)
if err != nil {
log.Fatal(err)
}
// 插入数据
_, err = db.Exec("INSERT INTO users(name, age) VALUES(?, ?)", "李四", 28)
if err != nil {
log.Fatal(err)
}
// 查询数据
rows, err := db.Query("SELECT id, name, age FROM users")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var id int
var name string
var age int
err = rows.Scan(&id, &name, &age)
if err != nil {
log.Fatal(err)
}
log.Printf("ID: %d, Name: %s, Age: %d", id, name, age)
}
}
希望这个指南能帮助你使用go-adodb操作Microsoft Access数据库。如果遇到问题,可以查看go-adodb的GitHub页面获取更多信息。