【报错内容】
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函数来进行语句拆分。文章来源:https://www.toymoban.com/news/detail-819672.html
如下:
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字符串或存储过程。对于更复杂的情况,您可能需要更精细的解析方法或直接在数据库管理工具中执行复杂脚本。文章来源地址https://www.toymoban.com/news/detail-819672.html
到了这里,关于GoLang:sql.Exec()报错的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!