亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將數據庫連接功能與查詢功能分開

將數據庫連接功能與查詢功能分開

Go
當年話下 2022-07-11 10:39:05
我一直在嘗試使用http://www.github.com/go-sql-driver/mysql執行查詢并一直在關注本教程:https ://tutorialedge.net/golang/golang-mysql-tutorial/現在本教程在 1 個自定義函數中完成了所有工作,但我嘗試將打開數據庫連接和查詢本身拆分為單獨的函數。我這樣做的方式是這樣的:package mainimport (    "fmt"    "database/sql"    _ "github.com/go-sql-driver/mysql")type SqlResult struct {  id int}var db *sql.DBfunc main() {  dbConnection:= openDatabaseConnection();  getID(dbConnection);}func openDatabaseConnection() *sql.DB {  db,err:= sql.Open("mysql","username:password@tcp(127.0.0.1:3306)/test");  if err != nil {    panic(err.Error())  }  defer db.Close()  return db}func getID(db *sql.Db) {  results,err:= db.Query("SELECT id FROM test")  for results.Next() {    var result SqlResult    err=results.Scan(&result.id)    if err != nil {      panic(err.Error())    }    fmt.Print(result.id)  }}這不會打印出任何東西,但也不會給出錯誤?,F在,當我將代碼放入 1 個函數時,如下所示:package mainimport (    "fmt"    "database/sql"    _ "github.com/go-sql-driver/mysql")type SqlResult struct {  id int}var db *sql.DBfunc main() {  openDatabaseConnection();}func openDatabaseConnection() *sql.DB {  db,err:= sql.Open("mysql","username:password@tcp(127.0.0.1:3306)/test");  if err != nil {    panic(err.Error())  }  results,err:= db.Query("SELECT id FROM test")  for results.Next() {    var result SqlResult    err=results.Scan(&result.id)    if err != nil {      panic(err.Error())    }    fmt.Print(result.id)  }  defer db.Close()  return db}這會返回我所有的 id,但我想拆分功能。似乎每次我需要新查詢時都打開數據庫連接是正確的解決方案。有誰知道我在第一個例子中做錯了什么,如果是這樣,我想要的正確方式是什么?
查看完整描述

1 回答

?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

“我想要的正確方式是什么?”


package main


import (

    "database/sql"

    "fmt"

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

)


var db *sql.DB


func main() {

    db = openDatabaseConnection()

    defer db.Close()

    

    printIds(db)

}


func openDatabaseConnection() *sql.DB {

    db, err := sql.Open("mysql", "username:password@tcp(127.0.0.1:3306)/test")

    if err != nil {

        panic(err)

    } else if err := db.Ping(); err != nil {

        panic(err)

    }

    return db

}


func printIds(db *sql.DB) {

    rows, err := db.Query("SELECT id FROM test")

    if err != nil {

        panic(err)

    }

    defer rows.Close()

    

    for rows.Next() {

        var id int

        if err := rows.Scan(&id); err != nil {

            panic(err)

        }

        fmt.Println(id)

    }

    if err := rows.Err(); err != nil {

        panic(err)

    }

}


查看完整回答
反對 回復 2022-07-11
  • 1 回答
  • 0 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號