كيفية إدراج القيم في العلامة العشرية (65،0) واسترجاعها من قاعدة البيانات باستخدام Golang؟

0

أنا جديد نسبيًا في 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 إلى my go build.

1 إجابة

1
افضل جواب

استخدم قيم السلسلة لعبارات 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
:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام