Files
zsp-project/backend/pkg/database/init.go
2026-06-03 20:59:39 +08:00

58 lines
1.2 KiB
Go
Executable File

package database
import (
"database/sql"
"fmt"
"log"
"github.com/rovina/zsp-backend/pkg/config"
)
func CheckDatabaseConnection(cfg *config.DatabaseConfig) error {
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
cfg.User, cfg.Password, cfg.Host, cfg.Port, cfg.DBName)
log.Println("start conn db:", dsn)
db, err := sql.Open("mysql", dsn)
if err != nil {
return err
}
defer db.Close()
return db.Ping()
}
func EnsureDatabase(cfg *config.DatabaseConfig) error {
// 不指定数据库连接
dsn := fmt.Sprintf(
"%s:%s@tcp(%s:%d)/?charset=utf8mb4&parseTime=True&loc=Local",
cfg.User, cfg.Password, cfg.Host, cfg.Port,
)
db, err := sql.Open("mysql", dsn)
if err != nil {
return err
}
defer db.Close()
// 创建数据库
if cfg.ResetDatabase {
sql := fmt.Sprintf("DROP DATABASE IF EXISTS `%s`;", cfg.DBName)
_, err = db.Exec(sql)
if err != nil {
return err
}
}
sql := fmt.Sprintf(
"CREATE DATABASE IF NOT EXISTS `%s` DEFAULT CHARSET utf8mb4;",
cfg.DBName,
)
_, err = db.Exec(sql)
if err != nil {
return err
}
log.Println("Database ensured:", cfg.DBName)
return nil
}