Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
/ easydb Public

简单的Go数据库接口程序。对database/sql标准库和各数据库驱动进行封装,使用通用接口操作数据库,无需关心底层差异。

License

Notifications You must be signed in to change notification settings

iotames/easydb

Repository files navigation

简介

简单的Go数据库接口程序。对 database/sql 标准库和各数据库驱动进行封装,使用通用接口操作数据库,无需关心底层差异。

  1. 轻量极简,没有过多依赖包袱。数据驱动仅在使用时,显式声明,按需导入。
  2. 兼容性极佳,支持大多数数据库,如MySQL、PostgreSQL、SQLite、SQL Server、Oracle等。
  3. 仅在官方库基础上做轻量级封装,摆脱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
  1. 数据库连接:
	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()
}
  1. 执行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)
		}
	}
}
  1. 获取数据
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)
	}
}

About

简单的Go数据库接口程序。对database/sql标准库和各数据库驱动进行封装,使用通用接口操作数据库,无需关心底层差异。

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /