亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

go語言中sql包的原理是什么

發布時間:2021-07-06 16:24:41 來源:億速云 閱讀:119 作者:Leah 欄目:編程語言

本篇文章為大家展示了go語言中sql包的原理是什么,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

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

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

3 sql/driver提供的是數據庫的接口,具體的實現還需要自己實現。

先看database/driver包

第一個用到的方法是Register

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

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

Prepare : 參數綁定
Close : 關閉連接
Begin : 支持事務

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

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

返回的Stmt結構:

Close : 關閉這個statement
NumInput : 返回有多少個可以綁定的參數
Exec : Insert或者update等無返回的使用
Query :select等查詢操作使用
Exec是綁定變量,然后返回Result結構
Query是綁定變量,然后返回Rows結果集

看Result里面的方法:

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

下面回到Begin,返回了Tx

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

drvier中的結構全是接口性質的,它需要你來實現并注冊到Register中。

驅動的具體使用是在database/sql中

首先將幾個sql的結構看一遍

首先sql中的結構都是對driver中的結構進行了一層封裝,比如像Rows,有個內部屬性是rowsi driver.Rows。

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

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

Result : 和driver中的Result一致,即你如果實現了driver.Result,那你自然就實現了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結構,這個結構是實現了driver.Conn結構,除了Conn已有的Prepare,Begin,Close之外,還直接多了幾個查詢方法:

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

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

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

復制代碼 代碼如下:

rows, err := db.Query("SELECT ...")
...
for rows.Next() {
var id int
var name string
err = rows.Scan(&id, &name)
...
}

Prepare返回Stmt結構

Exec返回Result結構

至于這幾個結構也有各自的方法。

上述內容就是go語言中sql包的原理是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

灵川县| 大田县| 永胜县| 迁西县| 滕州市| 康平县| 邯郸县| 禹州市| 湘西| 沙坪坝区| 庆阳市| 新余市| 峨眉山市| 十堰市| 淳化县| 宁波市| 桐柏县| 青神县| 海兴县| 佳木斯市| 荣昌县| 蒙山县| 绥宁县| 高唐县| 如皋市| 古丈县| 泉州市| 松桃| 志丹县| 乐山市| 武冈市| 阿拉善左旗| 吴江市| 沿河| 兰考县| 嘉义县| 宜都市| 永康市| 洪雅县| 浮山县| 韶关市|