首页 > 数据库 >golang连接MySQL并导入执行SQL文件

golang连接MySQL并导入执行SQL文件

时间:2022-11-09 22:35:52浏览次数:46  
标签:return log err sql db golang go SQL MySQL

实现golang连接MySQL数据库导入执行一个sql文件

package tools

import (
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "github.com/jinzhu/gorm"
    "io/ioutil"
    "log"
    "os"
    "strings"
    "time"
)

type ImportSqlTool struct {
    SqlPath                                    string
    Username, Password, Server, Port, Database string
}

func (this *ImportSqlTool) ImportSql() error {
    _, err := os.Stat(this.SqlPath)
    if os.IsNotExist(err) {
        log.Println("数据库SQL文件不存在:", err)
        return err
    }

    dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", this.Username, this.Password, this.Server, this.Port, this.Database)
    db, err := gorm.Open("mysql", dsn)
    if err != nil {
        log.Println("数据库连接失败:", err)
        //panic("数据库连接失败!")
        return err
    }
    db.SingularTable(true)
    db.LogMode(true)
    db.DB().SetMaxIdleConns(10)
    db.DB().SetMaxOpenConns(100)
    db.DB().SetConnMaxLifetime(59 * time.Second)

    sqls, _ := ioutil.ReadFile(this.SqlPath)
    sqlArr := strings.Split(string(sqls), ";")
    for _, sql := range sqlArr {
        sql = strings.TrimSpace(sql)
        if sql == "" {
            continue
        }
        err := db.Exec(sql).Error
        if err != nil {
            log.Println("数据库导入失败:" + err.Error())
            return err
        } else {
            log.Println(sql, "\t success!")
        }
    }
    return nil
}

使用方法

    tool:=&ImportSqlTool{
        SqlPath:  "../import.sql",
        Username: "go-fly",
        Password: "go-fly",
        Server:   "127.0.0.1",
        Port:     "3306",
        Database: "go-fly",
    }
    tool.ImportSql()

 

标签:return,log,err,sql,db,golang,go,SQL,MySQL
From: https://www.cnblogs.com/taoshihan/p/16875409.html

相关文章

  • java.sql.SQLException: java.lang.ClassCastException:java.math.BigInteger cannot
    错误原因:由于在IDEA中导入的驱动包的版本和数据库的版本不匹配解决方案:​​数据库官网中下载与数据库配套的Jar包,重新导入就可以了​官网:​​https://dev.mysql.com/downloa......
  • K8s系列---【KubeSphere部署Mysql】
    KubeSphere部署Mysql(有状态副本集)扫盲:什么是有状态副本集?例如,部署一个mysql,如果服务挂了,K8s会自动拉起一个mysql服务,但是拉起的mysql服务仍然得有服务挂掉之......
  • mysql导入数据函数问题
    1418-ThisfunctionhasnoneofDETERMINISTIC,NOSQL,orREADSSQLDATAin项目场景:mysql创建function报错误1418-ThisfunctionhasnoneofDETERMINISTIC,N......
  • 将就用一下Mysql的存储过程
    和Oracle相比,Mysql存储过程使用非常之不方便,没有什么可用的调试手段。但我已经在一个应用里已经使用了它,停止使用代价太高,只能将就用下去。我的Mysql版本5.6。1、调试的将......
  • MySQL: 备份 & 导入备份
    备份​​mysqldump​​​是​​MySQL​​​自带的逻辑备份工具。它的备份原理是通过协议连接到​​MySQL​​​数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的......
  • Postgresql使用触发器实现同步插入两张表
    在有一个陈旧的系统的情况下,如果升级API可以优先使用微服务的形式,将数据库进行独立拆分,将原来的数据库原原本本地固定在旧系统中,然后在独立的微服务中运行与部署新系统。......
  • Spring Boot:The new driver class is com.mysql.cj.jdbc.Driver
    以前使用的是​​5.1.31​​​的​​mysql​​​驱动,后面使用​​SpringBoot​​​默认的​​mysql​​驱动,启动就报错了:Loadingclass`com.mysql.jdbc.Driver'.Thisis......
  • mysqldump备份报错 'max_allowed_packet'
    1.mysqldump备份报错[root@176-238bin]#./mysqldump-uroot-p'123456'--default-character-set=utf8--opt-R-Econfluence>/data/backup/20221109/confluence202......
  • Golang数据库生成GORM
    使用如下代码,只支持PGpackagemainimport( "bufio" "fmt" "github.com/jinzhu/gorm" _"github.com/jinzhu/gorm/dialects/postgres" "strings")varFindColum......
  • 数据库 SQL 查询当前时间
    1、Mysql:selectdate_format(now(),'%Y-%m-%d'); 12、Oracle:获取当前时间1.date类型selectsysdatefromdual; 12.char类型selectto_char(sysdate,'yy......