58 lines
1.2 KiB
Go
Executable File
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
|
|
}
|