最終用戶(開發或生產)請推薦一個最好使用「database/sql」包的Sql驅動程序包。我對Postgres,ODBC,MySql感興趣(可能還有其他的東西,但對於高容量 - 即不是Sqlite),可以優先在Windows和/或Linux(最好是兩者)上使用。爲了我的興趣,它可能需要最近更新/維護,並且必須使用最新的Go版本。效率(吞吐量)顯然是重要的。歡迎任何相關意見。使用sql數據庫驅動程序
回答
GO-SQL驅動程序(MySQL的):
樣品表:
CREATE TABLE `userinfo` (
`uid` INT(10) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(64) NULL DEFAULT NULL,
`departname` VARCHAR(64) NULL DEFAULT NULL,
`created` DATE NULL DEFAULT NULL,
PRIMARY KEY (`uid`)
)
CREATE TABLE `userdetail` (
`uid` INT(10) NOT NULL DEFAULT '0',
`intro` TEXT NULL,
`profile` TEXT NULL,
PRIMARY KEY (`uid`)
)
樣品的編號:
package main
import (
_ "github.com/Go-SQL-Driver/MySQL"
"database/sql"
"fmt"
)
func main() {
db, err := sql.Open("mysql", "reckhou:[email protected]/test?charset=utf8")
checkErr(err)
//Insert
stmt, err := db.Prepare("INSERT userinfo SET username=?,departname=?,created=?")
checkErr(err)
res, err := stmt.Exec("reckhou", "IT", "2010-10-02")
checkErr(err)
id, err := res.LastInsertId()
checkErr(err)
fmt.Println(id)
// Update
stmt, err = db.Prepare("update userinfo set username=? where uid=?")
checkErr(err)
res, err = stmt.Exec("update", id)
checkErr(err)
affect, err := res.RowsAffected()
checkErr(err)
fmt.Println(affect)
//Query
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)
}
//Delete
stmt, err = db.Prepare("delete from userinfo where uid=?")
checkErr(err)
res, err = stmt.Exec(id)
checkErr(err)
affect, err = res.RowsAffected()
checkErr(err)
fmt.Println(affect)
db.Close()
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
PostgreSQ L:
樣品表:
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);
示例代碼:
import (
"database/sql"
"fmt"
_ "github.com/bmizerany/pq"
)
func main() {
db, err := sql.Open("postgres", "user=reckhou password=reckhou dbname=test sslmode=disable")
checkErr(err)
//Insert
stmt, err := db.Prepare("INSERT INTO userinfo(username,departname,created) VALUES($1,$2,$3) RETURNING uid")
checkErr(err)
res, err := stmt.Exec("reckhou", "IT", "2010-10-01")
checkErr(err)
id, err := res.LastInsertId()
checkErr(err)
fmt.Println(id)
// Update
stmt, err = db.Prepare("update userinfo set username=$1 where uid=$2")
checkErr(err)
res, err = stmt.Exec("update", 1)
checkErr(err)
affect, err := res.RowsAffected()
checkErr(err)
fmt.Println(affect)
// Query
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)
}
// Delete
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)
}
}
感謝您的信息。你是否積極使用這些驅動程序,如果有的話,你的經驗是什麼?我的首選可能是使用Postgres,但是我發佈這個問題的一個原因是我在Windows上使用pq的問題。我上次下載的pq在2013年4月14日重試,並且該問題尚未解決。簡單的描述是,在連接互聯網的Windows上運行速度非常緩慢(約爲40倍),包括內置測試。隨着互聯網斷開,它可能如預期的那樣,或者至少這個因素更快。 (問題#69) –
@BrianOh我現在不使用Windows,不能給你這方面的建議。我認爲這不是驅動程序的錯誤,你應該檢查你的網絡並安裝設置,或將DB移動到Linux。 –
感謝您的建議。我需要使用Windows來使用我正在使用的其他軟件,並且更喜歡使用兩種軟件。我不認爲這是網絡或設置,因爲psql和其他數據庫軟件運行沒有問題,而且速度非常快。也許這是我的pq連接設置,但我不知道,也沒有人建議改變它們。 –
- 1. Sql數據庫連接使用JDBC驅動程序與Android
- 2. 在數據庫中的命名參數/ sql和數據庫/ sql /驅動程序
- 3. 如何使用多個驅動程序編譯Go數據庫/ sql程序?
- 4. 使用HSQLDB JDBC驅動程序的CSV SQL驅動程序
- 5. OSGi和數據庫驅動程序
- 6. 導入數據庫驅動程序
- 7. Qt數據庫驅動程序
- 8. FireBird數據庫的HDBC驅動程序
- 9. 缺少ACCDB數據庫驅動程序
- 10. 使用通用數據庫包時找不到驅動程序
- 11. Tornado的哪個SQL數據庫具有異步驅動程序?
- 12. 找不到驅動程序連接到sql數據庫文件
- 13. 哪些數據庫驅動程序可以將DbVisualiser與Azure SQL結合使用?
- 14. 驅動程序使用php 5.5與MS SQL數據庫進行通信0
- 15. Microsoft JET數據庫引擎的數據庫驅動程序
- 16. 使用Impala JDBC驅動程序指定非默認數據庫
- 17. 使用與MS Access 2007數據庫(免費JDBC驅動程序)
- 18. 添加數據庫驅動程序使用WEKA類
- 19. 使用JDBC驅動程序鎖定Oracle數據庫中的表
- 20. 無法使用Mongo Java驅動程序創建數據庫
- 21. 使用MongoDB 3.0 Java驅動程序複製數據庫
- 22. 使用PHP7 + Microsoft驅動程序無法查詢MSSQL數據庫
- 23. 使用java連接數據庫 - 驅動程序錯誤
- 24. 使用VBA連接到Oracle數據庫的驅動程序
- 25. node-mongodb-native 2.X驅動程序使用多個數據庫
- 26. Qt4 Azure數據庫連接使用Sqlite驅動程序
- 27. Py2app不包含Sqlite驅動程序 - 「數據庫錯誤:驅動程序未加載驅動程序未加載」
- 28. 使用哪種驅動程序將Node.js應用程序連接到數據庫?
- 29. Microsoft PHP SQL驅動程序與PHP SQL驅動程序
- 30. 使用ndk項目/庫驅動程序
在一個項目中,我在過去的工作的,我們曾與Postgres的最成功進去,但我不記得我們選擇了哪一對夫婦。 – cthom06