GoLang:sql.Exec()报错

【报错内容】

Sorry, can not exec into mysql: Error 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ...

【原因】

sql.Exec 在大多数情况下只能执行单条SQL语句。如果您的SQL脚本包含多条语句,您需要将它们分割并逐一执行。这通常涉及将整个SQL脚本内容按照语句分隔符(通常是分号 ;)分割成单独的语句,然后逐个执行。

如果需要执行两条MySQL语句,一定要分开来执行sql.Exec(),这里使用split函数来进行语句拆分。

如下:

Go 复制代码
package main

import (
    "database/sql"
    "fmt"
    "log"
    "strings"

    _ "github.com/go-sql-driver/mysql"
)

func main() {
    // 数据库连接设置
    dsn := "username:password@tcp(host:port)/dbname"
    db, err := sql.Open("mysql", dsn)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    // 测试数据库连接
    if err = db.Ping(); err != nil {
        log.Fatal(err)
    }

    // SQL命令
    sqlCommands := `
    DROP TABLE IF EXISTS combinedData;
    CREATE TABLE combinedData(
        ProducerName VARCHAR(255)
    );
    `

    // 按分号分割命令
    commands := strings.Split(sqlCommands, ";")
    
    for _, cmd := range commands {
        // 去除字符串首尾的空白字符
        cmd = strings.TrimSpace(cmd)
        if cmd != "" {
            // 执行SQL命令
            _, err = db.Exec(cmd)
            if err != nil {
                log.Fatal("执行SQL出错: ", err)
            }
        }
    }

    fmt.Println("所有SQL命令执行完成")
}

这段代码将按照分号将SQL命令分割成单独的语句,并逐一执行它们。请注意,这种方法适用于简单的SQL脚本,但可能无法处理更复杂的情况,比如含有分号的SQL字符串或存储过程。对于更复杂的情况,您可能需要更精细的解析方法或直接在数据库管理工具中执行复杂脚本。

相关推荐
2601_9622186125 分钟前
万象生鲜系统订单全生命周期状态同步技术实现业务可视
大数据·数据库·人工智能·python·算法
Wang's Blog43 分钟前
Java框架快速入门:Spring Security+OAuth2之用户注册与唯一性校验实现
java·数据库·spring
跨境生态圈1 小时前
2026谷歌SEO快速排名深度解析:合规起量、避坑指南与实战落地策略
数据库·人工智能·爬虫·搜索引擎·chatgpt
小满zs1 小时前
Go语言第十二章(通道)
后端·go
JavaPub-rodert2 小时前
Docker 安装 MySQL 完整教程:从零部署数据库,到生产环境持久化配置
数据库·mysql·docker
隔窗听雨眠2 小时前
MySQL整库迁移至KaiwuDB完全指南:从数据类型映射到生产切换的系统性实践
数据库·mysql
xhbh6662 小时前
中小企业 Redis 运维,如何安全归档 RDB、AOF 备份文件?
运维·数据库·缓存·数据备份·文件备份·同步备份·号码备份
a187927218312 小时前
【算法】链表(二):链表上的双指针——变速、异链与定距,和一份路程账本
数据结构·算法·leetcode·链表·go·指针·环形链表
2301_32241428042 小时前
活力孕康复APP 47737- 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·mysql·微信小程序·idea·微信开发者工具
勤奋的树懒2 小时前
从手写 SQL 到 Windows 工具:致远 OA 文件清理实践
数据库·sql·windows server·致远oa