You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang通过exec.Command调用sqlite3无输出无报错如何解决?

问题原因

Go的exec.Command不会调用系统shell解析命令,你传入的每一个参数会原封不动传递给目标程序,不需要额外加引号,也不能把多个命令行参数拼接成一个字符串传入。
你原来的写法把数据库路径和查询语句拼成了单个字符串,还额外加了单引号、前导空格,相当于给sqlite3传递的参数只有一个: /home/chadg/Downloads/testDb.db 'select * from testTable;',sqlite3会把整个字符串当作数据库文件名去查找,自然找不到对应库,也没有收到要执行的SQL语句参数,所以没有输出也没有报错。
你看到的cmd.String()打印结果和手动执行的命令一致,只是该方法为了方便调试模拟了shell命令的格式,不代表实际传给子进程的参数结构。

解决方法

把所有命令行参数拆成独立的字符串传入,不需要加任何引号,去掉数据库路径前多余的空格即可:

func sqliteTest(){
    cmd:=exec.Command("/usr/bin/sqlite3", "/home/chadg/Downloads/testDb.db", "select * from testTable;")
    fmt.Println("Command String:",cmd.String())
    out,err:=cmd.CombinedOutput()
    if err!=nil{
        fmt.Println("Error Accessing Database:",err.Error(),string(out))
        return
    }
    fmt.Println("Result Length:",len(out))
    fmt.Println("Result:",string(out))
}

内容的提问来源于stack exchange,提问作者Chad G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:27:02