sql - "Error op_response:0"准备好的语句

标签 sql go firebird

我在 GO1.11 + FB2.5 中使用来自“github.com/nakagami/firebirdsql”的 firebird 数据库驱动程序

但我无法准备好 SELECT 工作,它在执行第二个 QUERYROW() 时抛出“Error op_response:0”错误。有什么想法吗?

是否有替代驱动程序?还是我使用了不正确的驱动程序?

func test1(tx *sql.Tx) {
    sqlStr := "SELECT number FROM order WHERE id=?"
    stmt, err := tx.Prepare(sqlStr)
    if err != nil {
        panic(err.Error())
    }
    var value string
    err = stmt.QueryRow(123).Scan(&value)
    if err != nil {
        panic(err.Error())
    }
    fmt.Println(value)

    err = stmt.QueryRow(200).Scan(&value)
    if err != nil {
        panic(err.Error())
    }
    fmt.Println(value)    
}

结果:

INV20183121
panic: Error op_response:0

goroutine 1 [running]:
main.test1(0xc00009c000, 0xc0000a8200)

最佳答案

我可以大胆猜测。查看 github.com/nakagami/firebirdsql 来源,this似乎是唯一可以产生此错误的代码路径。寻找 here , 它会忽略 recvPackets 返回的任何网络错误,这意味着:网络套接字上的任何东西都中断了,你会得到这个错误(因为这就是 recvPackets 在网络错误的情况下返回的内容)。

我建议使用 debugPrint 重建您的代码取消注释代码,看看网络连接上实际上发生了什么。

关于sql - "Error op_response:0"准备好的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52663170/

相关文章:

parsing - 如何将多行字符串编码为 yaml 值

count - 如何加速 Interbase/Firebird 中的 Count(*)

java - 配置 IReport 和 Firebird

asp.net - Firebird 是适用于 ASP.NET 的良好嵌入式数据库吗?还有哪个?

sql - 从表中选择标量值

sql - 将问题数据存储到数据库中的最佳方法是什么?

go - 使用反射将字节读入结构

go - 将 net.IP 包装在自定义类型中并在 golang 中添加方法

mysql - 有没有更好的方法来使用 mysql_insert_id()

java - 对包含的实体执行类似查询