重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
盡量不要使用ORM,簡(jiǎn)單的數(shù)據(jù)庫交互是會(huì)省很多事。
公司主營(yíng)業(yè)務(wù):做網(wǎng)站、成都網(wǎng)站制作、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出北辰免費(fèi)做網(wǎng)站回饋大家。
但是一旦查詢語句越來越復(fù)雜,關(guān)聯(lián)表越來越多,當(dāng)你發(fā)現(xiàn)正在使用的ORM框架做不到時(shí)再換其他框架代價(jià)會(huì)很大。為什么有那么多框架?就是沒有一個(gè)框架能解決所有哪怕是大多數(shù)問題。
建議只使用數(shù)據(jù)庫驅(qū)動(dòng)庫,database/sql庫,可以完成所有g(shù)o語言與數(shù)據(jù)庫的交互。
可以參考: windows環(huán)境下redis的安裝
啟動(dòng)redis服務(wù)器:redis-server.exe redis.windows.conf
獲取包:
導(dǎo)入包
訪問:
PostgreSQL和MySQL比較,它更加龐大一點(diǎn),因?yàn)樗怯脕硖娲鶲racle而設(shè)計(jì)的。所以在企業(yè)應(yīng)用中采用PostgreSQL是一個(gè)明智的選擇。
現(xiàn)在MySQL被Oracle收購(gòu)之后,有傳聞Oracle正在逐步的封閉MySQL,,鑒于此,將來我們也許會(huì)選擇PostgreSQL而不是MySQL作為項(xiàng)目的后端數(shù)據(jù)庫。
1、驅(qū)動(dòng)
Go實(shí)現(xiàn)的支持PostgreSQL的驅(qū)動(dòng)也很多,因?yàn)閲?guó)外很多人在開發(fā)中使用了這個(gè)數(shù)據(jù)庫。
支持database/sql驅(qū)動(dòng),純Go寫的
支持database/sql驅(qū)動(dòng),純Go寫的
支持database/sql驅(qū)動(dòng),純Go寫的
在下面的示例中我采用了第一個(gè)驅(qū)動(dòng),因?yàn)樗壳笆褂玫娜俗疃啵趃ithub上也比較活躍。
2、實(shí)例代碼
數(shù)據(jù)庫建表語句:
復(fù)制代碼
CREATE TABLE userinfo
(
uid serial NOT NULL,
username character varying(100) NOT NULL,
departname character varying(500) NOT NULL,
Created date,
CONSTRAINT userinfo_pkey PRIMARY KEY (uid)
)
WITH (OIDS=FALSE);
CREATE TABLE userdeatail
(
uid integer,
intro character varying(100),
profile character varying(100)
)
WITH(OIDS=FALSE);
復(fù)制代碼
看下面這個(gè)Go如何操作數(shù)據(jù)庫表數(shù)據(jù):增刪改查
復(fù)制代碼
package main
import (
"database/sql"
"fmt"
_ "github.com/bmizerany/pq"
)
func main() {
db, err := sql.Open("postgres", "user=astaxie password=astaxie dbname=test sslmode=disable")
checkErr(err)
//插入數(shù)據(jù)
stmt, err := db.Prepare("INSERT INTO userinfo(username,departname,created) VALUES($1,$2,$3) RETURNING uid")
checkErr(err)
res, err := stmt.Exec("astaxie", "研發(fā)部門", "2012-12-09")
checkErr(err)
//pg不支持這個(gè)函數(shù),因?yàn)樗麤]有類似MySQL的自增ID
id, err := res.LastInsertId()
checkErr(err)
fmt.Println(id)
//更新數(shù)據(jù)
stmt, err = db.Prepare("update userinfo set username=$1 where uid=$2")
checkErr(err)
res, err = stmt.Exec("astaxieupdate", 1)
checkErr(err)
affect, err := res.RowsAffected()
checkErr(err)
fmt.Println(affect)
//查詢數(shù)據(jù)
rows, err := db.Query("SELECT * FROM userinfo")
checkErr(err)
for rows.Next() {
var uid int
var username string
var department string
var created string
err = rows.Scan(uid, username, department, created)
checkErr(err)
fmt.Println(uid)
fmt.Println(username)
fmt.Println(department)
fmt.Println(created)
}
//刪除數(shù)據(jù)
stmt, err = db.Prepare("delete from userinfo where uid=$1")
checkErr(err)
res, err = stmt.Exec(1)
checkErr(err)
affect, err = res.RowsAffected()
checkErr(err)
fmt.Println(affect)
db.Close()
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
復(fù)制代碼
從上面的代碼我們可以看到,PostgreSQL是通過$1,$2這種方式來指定要傳遞的參數(shù),而不是MySQL中的?,另外在sql.Open中的dsn信息的格式也與MySQL的驅(qū)動(dòng)中的dsn格式不一樣,所以在使用時(shí)請(qǐng)注意它們的差異。
還有pg不支持LastInsertId函數(shù),因?yàn)镻ostgreSQL內(nèi)部沒有實(shí)現(xiàn)類似MySQL的自增ID返回,其他的代碼幾乎是一模一樣
高級(jí)!能用上go語言了嗎?不會(huì)是Android Studio吧?!
如果是Apk是連不上SQL的,訪問WebService,手機(jī)做SQL服務(wù)一般用WEB,不用WAP,手機(jī)可以直接訪問WEB,無論什么編寫的,如果是特殊需要,那就用WebService去返回查詢結(jié)果
//假設(shè)的GOPATH指向C:\gohome
0. 執(zhí)行 go get github.com/wendal/go-oci8 ,然后肯定是報(bào)錯(cuò)了,沒關(guān)系,代碼會(huì)下載下來.
1. 首先,你需要安裝mingw到C:\mingw
2. 然后,到Oracle官網(wǎng),下載OCI及其SDK,解壓到instantclient_11_2 -- 當(dāng)前最新版
3. 從我的go-oci8庫的windows文件夾,拷貝pkg-config.exe到C:\mingw\bin\,拷貝oci8.pc到C:\mingw\lib\pkg-config\
4. 設(shè)置環(huán)境變量 PATH ,值為 原有PATH;C:\instantclient_11_2;C:\mingw\bin;
5. 設(shè)置環(huán)境變量 PKG_CONFIG_PATH,值為 C:\mingw\lib\pkg-config
6. 接下來,就最重要的,就是再執(zhí)行一次,這次應(yīng)該能成功的: go get github.com/wendal/go-oci8
7. 測(cè)試一下:
cd %GOPATH%/src/github.com/wendal/go-oci8/example
go run oracle.go
#提醒一句, oracle.go里面的寫的密碼是system/123456, 實(shí)例名XE