mysql - 如何使用Golang将值插入decimal(65,0)并从数据库中检索它们?

标签 mysql go

我对 Go 还比较陌生。 我使用 github.com/go-sql-driver/mysql 作为我的驱动程序 我有一个表,其中包含许多数据类型为 decimal(65,0) 的列。 我正在尝试使用 big.Int 来处理我的应用程序中的这些值,这对我来说似乎是合理的。 但是,我找不到使用 Stmt.Exec 将值插入数据库的方法。 它说

"sql: converting argument $2 type: unsupported type big.Int, a struct"

此外,我也找不到将其从 mysql 序列化回我的 Go 结构的方法。

最佳答案

对 SQL 语句使用字符串值。与 *big.Int 值之间进行转换。例如,

package main

import (
    "fmt"
    "log"
    "math/big"

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

func printN(rows *sql.Rows) {
    for rows.Next() {
        var n *big.Int
        var s sql.NullString
        err := rows.Scan(&s)
        if err != nil {
            log.Print(err)
        }
        n, _ = new(big.Int).SetString(s.String, 10)
        fmt.Printf("n: %v\n", n.String())
    }
    err := rows.Err()
    if err != nil {
        log.Print(err)
    }
}

func main() {
    db, err := sql.Open("mysql", "peter:@/so")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    query := `SELECT n from so.dec65;`
    rows, err := db.Query(query)
    if err != nil {
        log.Fatal(err)
    }
    printN(rows)

    query = `SELECT n from so.dec65 WHERE n < ?;`
    arg1, ok := new(big.Int).SetString("12345678901234567891234567", 10)
    if ok {
        rows, err = db.Query(query, arg1.String())
        if err != nil {
            log.Fatal(err)
        }
        printN(rows)
    }
}

数据库:

mysql> DESCRIBE dec65;
+-------+---------------+------+-----+---------+-------+
| Field | Type          | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| n     | decimal(65,0) | YES  |     | NULL    |       |
+-------+---------------+------+-----+---------+-------+
mysql> SELECT n FROM dec65;
+-----------------------------+
| n                           |
+-----------------------------+
|  12345678901234567891234567 |
| -12345678901234567891234567 |
|                        NULL |

+----------------------------------------+

输出:

n: 12345678901234567891234567
n: -12345678901234567891234567
n: <nil>
n: -12345678901234567891234567

关于mysql - 如何使用Golang将值插入decimal(65,0)并从数据库中检索它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51536056/

相关文章:

mysql - 为了使 Grails 应用程序能够很好地扩展,您需要使用 EJB 吗?

mysql - Rails/MySQL 查询,其中第三级连接 ID 不存在

go - golang 中的正则表达式匹配

docker - 使用 Docker 在 Jenkins 上使用 "vendor"目录构建 Go 应用程序

go - 如何一次构建多个包二进制文件

mysql - 如何从LARAVEL中同一数据库下的另一个表中获取值?

mysql - 如何在派生表的 where 条件中使用先前联接中的字段?

mysql - 查找唯一的元组和列排列

pointers - 当我将变量传递给 golang 中的私有(private)方法时,它会创建一个新实例吗?

xml - 在 Golang 中编码 XML : field is empty (APPEND doesn't work? )