主頁 > 知識庫 > go語言的sql包原理與用法分析

go語言的sql包原理與用法分析

熱門標簽:電梯外呼訪客系統(tǒng) 最短的地圖標注 ?兓? 浙江人工智能外呼管理系統(tǒng) 百度地圖標注搜索關(guān)鍵詞 谷歌便利店地圖標注 騰訊外呼系統(tǒng)價格 電銷機器人可以補救房產(chǎn)中介嗎 成都呼叫中心外呼系統(tǒng)平臺

本文實例講述了go語言的sql包原理與用法。分享給大家供大家參考,具體如下:

go的sql包是在pkg/database中,里面的兩個包sql和sql/driver可以一起看。建議看這個兩個包之前可以先看看sql文件夾下的doc.txt。這個文檔說了幾點比較重要的:

1 這兩個包是真正Go風格的包。

2 這使用這兩個包就不需要關(guān)于并發(fā)處理了,也不需要維護自己的數(shù)據(jù)庫連接池了,一旦建立了一個連接,這個連接是可以在各個goroutine之間共用的。

3 sql/driver提供的是數(shù)據(jù)庫的接口,具體的實現(xiàn)還需要自己實現(xiàn)。

先看database/driver包

第一個用到的方法是Register

這個方法將實現(xiàn)了driver.Driver的驅(qū)動注冊到變量drivers中,當寫完一個驅(qū)動之后,就需要將驅(qū)動注冊到sql中才能使用sql包中的這些接口。這個實現(xiàn)了driver.Driver的必須實現(xiàn)了Open方法.

driver.Open返回的是driver.Conn,它的三個方法

Prepare : 參數(shù)綁定
Close : 關(guān)閉連接
Begin : 支持事務

先看Prepare,這個和php mysql pdo一樣的用法

Conn.Prepare("select * from test where a=?")

返回的Stmt結(jié)構(gòu):

Close : 關(guān)閉這個statement
NumInput : 返回有多少個可以綁定的參數(shù)
Exec : Insert或者update等無返回的使用
Query :select等查詢操作使用
Exec是綁定變量,然后返回Result結(jié)構(gòu)
Query是綁定變量,然后返回Rows結(jié)果集

看Result里面的方法:

LastInsertId()  : Insert操作之后獲取到的主鍵id
RowsAffect() : 影響到的行數(shù)
Rows:
Columns() : 返回的數(shù)據(jù)有哪些列,其實就是返回的表列名
Close() : 關(guān)閉Rows,調(diào)用之后不能再進行任何操作
Next() : 將下一行的數(shù)據(jù)取到des[] Value中。這里的Value接口可以是int64,float64,bool,[]byte,string,time.Time

下面回到Begin,返回了Tx

開始事務之后除了查詢之外,就兩種行為:Commit和Rollback,這兩種行為都是Tx接口的方法

drvier中的結(jié)構(gòu)全是接口性質(zhì)的,它需要你來實現(xiàn)并注冊到Register中。

驅(qū)動的具體使用是在database/sql中

首先將幾個sql的結(jié)構(gòu)看一遍

首先sql中的結(jié)構(gòu)都是對driver中的結(jié)構(gòu)進行了一層封裝,比如像Rows,有個內(nèi)部屬性是rowsi driver.Rows。

對sql的實際操作都是使用driver.Rows里面的接口進行操作的,實際也就是使用你自己實現(xiàn)的driver進行操作。

driver和sql就像插頭和一個充滿插頭的汽車一樣,你實現(xiàn)了driver,即實現(xiàn)了這些插頭的配置,你就可使用sql這個汽車了。

Result : 和driver中的Result一致,即你如果實現(xiàn)了driver.Result,那你自然就實現(xiàn)了sql.Result。它是個接口,其實沒有什么特殊的用處,如果sql包中的所有Result都換成driver.Result也是行的,估計是作者希望返回值不要引用到其他包去,就使用這種方法。

Rows :  基于了driver.Rows, 還在上面擴展了幾個其他的方法。擁有方法:

Close
Cloumns
Err
Next
Scan
Stmt :基于driver.Stmt。擁有方法
Close
Exec
Query
QueryRow
Tx:基于driver.Tx。擁有方法:
Commit
Exec
Prepare
Query
QueryRow
Rollback
Stmt

從sql.Open開始

返回了sql.DB結(jié)構(gòu),這個結(jié)構(gòu)是實現(xiàn)了driver.Conn結(jié)構(gòu),除了Conn已有的Prepare,Begin,Close之外,還直接多了幾個查詢方法:

Driver() : 返回當前驅(qū)動
Exec() : 直接進行操作
Query() : 進行查詢,返回Rows
QueryRow() : 預期返回單行,返回Row

不管Rows還是Row都有個很好用的方法Scan來將數(shù)據(jù)放到制定的變量中去。

比如下面就是典型的Rows用法

復制代碼 代碼如下:
rows, err := db.Query("SELECT ...")
...
for rows.Next() {
var id int
var name string
err = rows.Scan(id, name)
...
}

Prepare返回Stmt結(jié)構(gòu)

Exec返回Result結(jié)構(gòu)

至于這幾個結(jié)構(gòu)也有各自的方法。

希望本文所述對大家Go語言程序設(shè)計有所幫助。

您可能感興趣的文章:
  • go語言通過odbc訪問Sql Server數(shù)據(jù)庫的方法
  • Go語言使用MySql的方法
  • Go語言操作mysql數(shù)據(jù)庫簡單例子
  • 在Go語言程序中使用gojson來解析JSON格式文件
  • go語言讀取json并下載高清妹子圖片
  • Go語言對JSON進行編碼和解碼的方法
  • Go語言中轉(zhuǎn)換JSON數(shù)據(jù)簡單例子
  • go語言通過odbc操作Access數(shù)據(jù)庫的方法
  • golang實現(xiàn)sql結(jié)果集以json格式輸出的方法

標簽:七臺河 雅安 盤錦 紹興 宜昌 上海 眉山 邢臺

巨人網(wǎng)絡通訊聲明:本文標題《go語言的sql包原理與用法分析》,本文關(guān)鍵詞  語言,的,sql,包原理,包,原理,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《go語言的sql包原理與用法分析》相關(guān)的同類信息!
  • 本頁收集關(guān)于go語言的sql包原理與用法分析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章