简单的Go数据库接口程序。对 database/sql 标准库和各数据库驱动进行封装,使用通用接口操作数据库,无需关心底层差异。
- 轻量极简,没有过多依赖包袱。数据驱动仅在使用时,显式声明,按需导入。
- 兼容性极佳,支持大多数数据库,如MySQL、PostgreSQL、SQLite、SQL Server、Oracle等。
- 仅在官方库基础上做轻量级封装,摆脱ORM等框架束缚,回归底层,重新找回对数据库的掌控。
- MySQL:github.com/go-sql-driver/mysql
- PostgreSQL:github.com/lib/pq
- SQLite:github.com/mattn/go-sqlite3
- SQL Server:github.com/denisenkom/go-mssqldb
- Oracle: github.com/godror/godror
- 数据库连接:
import ( "github.com/iotames/easydb" "database/sql" _ "github.com/go-sql-driver/mysql" _ "github.com/lib/pq" ) func main() { d1 := easydb.NewEasyDb("mysql", "127.0.0.1", "root", "password", "testdb", 3306) d2 := easydb.NewEasyDb("postgres", "127.0.0.1", "username", "password", "testdb", 5432) // 测试连接d1 if err := d1.Ping(); err != nil { log.Fatal(err) } // 关闭整个d1连接池 defer d1.CloseDb() // 测试连接d2 if err := d2.Ping(); err != nil { log.Fatal(err) } // 关闭整个d2连接池 defer d2.CloseDb() // 用原始的DSN数据源字符串,创建数据库操作对象 var sqldb *sql.DB var err error // sqldb, err := sql.Open("sqlite3", "./mydb.sqlite") // sqldb, err = sql.Open("postgres", "user=postgres password=secret dbname=dbname host=127.0.0.1 port=5432 sslmode=disable search_path=myschema") sqldb, err = sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname") if err != nil { panic(err) } // 创建数据库操作对象 d := easydb.NewEasyDbBySqlDB(sqldb) // 测试连接d if err := d.Ping(); err != nil { log.Fatal(err) } // 关闭整个d连接池 defer d.CloseDb() }
- 执行SQL语句,写入数据
import ( "github.com/iotames/easydb" _ "github.com/go-sql-driver/mysql" ) func main() { d := easydb.NewEasyDb("mysql", "127.0.0.1", "root", "password", "testdb", 3306) // 创建数据表 sqlCreateTable := `CREATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, name VARCHAR(50), age INT, wallet_balance DECIMAL(10,2) DEFAULT 0.00 )` _, err = d.Exec(sqlCreateTable) if err != nil { fmt.Println("Error creating table:", err) } // 插入数据 for i := 1; i <= 5; i++ { _, err = d.Exec("INSERT INTO users (name, age, wallet_balance) VALUES (1,ドル 2,ドル 3ドル)", fmt.Sprintf("Hankin%d", i), i, float64(i*10)) if err != nil { fmt.Println("Error inserting data:", err) } } }
- 获取数据
type User struct { ID int `db:"id"` Name string `db:"name"` Age int `db:"age"` WalletBalance float64 `db:"wallet_balance"` } func main() { d := easydb.NewEasyDb("postgres", "127.0.0.1", "username", "password", "testdb", 5432) // 获取一条数据,传入字典或字典的指针 data := make(map[string]interface{}) d.GetOneData("SELECT id, name, age, wallet_balance FROM 1ドル", data, "users") // 传字典的指针亦可 // d.GetOneData("SELECT id, name, age, wallet_balance FROM 1ドル", &data, "users") // 获取一条数据,传入结构体指针 user := User{} d.GetOneData("SELECT id, name, age, wallet_balance FROM users ORDER BY id DESC", &user) fmt.Printf("-----GetOneData--data(%+v)--user(%+v)--\n", data, user) // 获取多条数据,传入字典的切片的指针 var datalist []map[string]interface{} d.GetMany("SELECT id, name, age, wallet_balance FROM users", &datalist) fmt.Printf("-----GetMany--result(%+v)----\n", datalist) // 获取多条数据,传入结构体的切片的指针 var users []User err := d.GetMany("SELECT id, name, age, wallet_balance FROM users", &users) if err != nil { fmt.Println("Error getting data:", err) return } for i, user := range users { fmt.Printf("---GetMany--row(%d)---result(%+v)----\n", i, user) } }