当前位置: 首页 > 面试题库 >

在函数内部引用开放式数据库连接-Golang

宦博雅
2023-03-14
问题内容

我的主要功能是打开数据库连接:

func main() {
    db, err := sql.Open("sqlite3", "./house.db")
    checkErr(err)

    ...
}

然后,我想创建一个函数,该函数允许我基于传递的结构向数据库添加一行:

func addRow(row Room) error {
    stmt, err := db.Prepare("INSERT INTO Rooms (Name, Size, WindowCount, WallDecorationType, Floor) VALUES(?, ?, ?, ?, ?)")
    _, err = stmt.Exec(row.Name , row.Size , row.WindowCount , row.WallDecorationType , row.Floor)
    return err
}

但是显然我不能这样做,因为该addRow()函数不知道什么db是什么。

我如何使此功能起作用?我是否应该在主要功能之外打开数据库?


问题答案:

根据您的应用程序的工作方式,您可以

  1. 保持db 全球
  2. db作为 参数* 传递 *
  3. addRoom一个 方法

我通常为API服务所做的是创建一个 global db,如下所示:

var db *sql.DB

func main() {
    var err error
    db, err = sql.Open("sqlite3", "./house.db")
    checkErr(err)
    // create room Room{}
    err = addRoom(room)
    checkErr(err)
}

但是您也可以将db作为 参数 传递:

func addRow(db *sql.DB, row Room) error

或者,您可以创建一个 struct 将连接保留为属性并创建addRow方法的方法:

type dbConn struct {
    db *sql.DB
}

func (conn dbConn) addRow(row Room) error

这本书有一些很好的例子。



 类似资料:
  • 本章介绍如何从OrientDB命令行断开与特定数据库的连接。 它关闭了当前打开的数据库。 以下语句是Disconnect命令的基本语法。 注 - 只有在连接到特定数据库后才能使用此命令,并且只会关闭当前运行的数据库。 示例 在这个例子中,我们将使用在前一章中创建的名为的数据库。 我们将从数据库断开连接。 可以使用以下命令断开数据库连接。 如果它成功断开连接,将获得以下输出 -

  • 连接数据库 在能够对MongDB进行操作之前,需要使用BuguFramework创建一个数据库连接,代码如下: BuguConnection conn = BuguFramework.getInstance().createConnection(); conn.connect("192.168.0.100", 27017, "mydb", "username", "password"); 也可以

  • 一、全局配置定义 return array( 'DB_TYPE' => 'mysql', 'DB_HOST' => '127.0.0.1', 'DB_NAME' => 'thinkcmf', 'DB_USER' => 'root', 'DB_PWD' => 'root', 'DB_PORT' => '3306', 'DB_PREFIX' =>

  • ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库驱动来处理。数据库抽象访问层基于PDO方式,目前内置包含了Mysql、SqlServer、PgSQL、Sqlite等数据库的支持。 如果应用需要使用数据库,必须配置数据库连接信息,数据库的配置文件有多种定义方式。 配置文件

  • 问题内容: 我有一个tomcat实例设置,但是在一段时间不活动之后,我在其中配置的数据库连接不断消失。 当我检查日志时,出现以下错误: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:从服务器成功接收到的最后一个数据包是68051秒前。成功发送到服务器的最后一个数据包是68051秒前,比服务器配置的“ wait_timeout”值长。

  • 我缺少一个选项,如何使用从中获取函数中的索引号: 文档显示返回。有没有什么高雅的方法来达到我所需要的?