在Go中,为了访问数据库,你需要使用sql.DB.你可使用这个类型来创建语句和事务,执行查询以及获取结果.

首先,你需要知道sql.DB不是一个数据库连接.它也不是任何特定数据库软件中的database或schema概念的映射.它是一个抽象的接口,是一种数据库存在的形式.数据库可以是形形色色的,比如本地文件,通过网络连接的,在内存或进程中的.

sql.DB在幕后执行着一些重要任务:

  • 它通过驱动打开和关闭对实际数据库的连接.
  • 它管理着一个连接池,连接可以是上面提到的多种形式.

sql.DB被抽象成你无需关心如何去管理对数据库的并发访问.当你使用一个连接去执行任务时其会被标记成在使用状态,当它不再被使用时,则会放回到可用的连接池中. 这样会造成一种结果,如果释放连接失败,则会导致sql.DB打开很多连接,从而导致资源失控(太多的连接,太多打开的文件的句柄,缺少可用的网络端口等).我们将在以后进一步讨论这个话题.

创建sql.DB后,你就可使用它来查询数据库,以及创建语句和事务.