在使用Go語言編寫應(yīng)用程序時,我們經(jīng)常需要和數(shù)據(jù)庫進(jìn)行連接和交互。其中,連接MySQL數(shù)據(jù)庫是最常見的一種情況。在Go語言中,連接MySQL數(shù)據(jù)庫可以使用go-sql-driver/mysql這個官方推薦的MySQL驅(qū)動,也可以直接使用MySQL原生庫。
接下來我們將介紹如何使用MySQL原生庫連接MySQL數(shù)據(jù)庫,以及對數(shù)據(jù)庫進(jìn)行增、刪、改、查操作。
import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" // 導(dǎo)入MySQL驅(qū)動 ) func main() { // 創(chuàng)建MySQL連接 db, err := sql.Open("mysql", "username:password@tcp(host:port)/dbname") if err != nil { panic(err.Error()) } defer db.Close() // 關(guān)閉連接 // 測試連接是否成功 err = db.Ping() if err != nil { panic(err.Error()) } fmt.Println("Connected to MySQL database!") // 插入數(shù)據(jù) insert, err := db.Query("INSERT INTO users(name, age) VALUES('John', 25)") if err != nil { panic(err.Error()) } defer insert.Close() // 更新數(shù)據(jù) update, err := db.Query("UPDATE users SET age=26 WHERE name='John'") if err != nil { panic(err.Error()) } defer update.Close() // 刪除數(shù)據(jù) delete, err := db.Query("DELETE FROM users WHERE name='John'") if err != nil { panic(err.Error()) } defer delete.Close() // 查詢數(shù)據(jù) results, err := db.Query("SELECT * FROM users") if err != nil { panic(err.Error()) } defer results.Close() for results.Next() { var name string var age int err = results.Scan(&name, &age) if err != nil { panic(err.Error()) } fmt.Printf("%s is %d years old\n", name, age) } }
在代碼中,我們首先導(dǎo)入了database/sql和github.com/go-sql-driver/mysql這兩個包。其中,_ "github.com/go-sql-driver/mysql"是為了在代碼中隱式地導(dǎo)入MySQL驅(qū)動。
在main函數(shù)中,我們先創(chuàng)建MySQL連接。創(chuàng)建連接時需要指定MySQL的用戶名、密碼、主機(jī)地址、端口號和要連接的數(shù)據(jù)庫名。連接創(chuàng)建成功后,我們使用db.Ping()函數(shù)測試連接是否成功。連接測試成功后,我們就可以開始對數(shù)據(jù)庫進(jìn)行增、刪、改、查操作了。
在代碼中,我們使用db.Query()函數(shù)執(zhí)行SQL語句并獲取結(jié)果。這個函數(shù)返回的是一個Rows對象,其中包含了SQL語句執(zhí)行后返回的所有結(jié)果。代碼中還使用了db.Query()、db.Query()和db.Query()三個函數(shù)分別對數(shù)據(jù)庫進(jìn)行插入、更新和刪除操作。這些語句的執(zhí)行結(jié)果并不包含實(shí)際的數(shù)據(jù),通常只包含執(zhí)行結(jié)果是否成功的信息。
最后,我們使用db.Query()函數(shù)執(zhí)行SELECT語句,并將結(jié)果放入results對象中。我們使用for循環(huán)遍歷results對象中的所有結(jié)果,并使用results.Scan()函數(shù)將結(jié)果賦值給變量name和age,然后輸出到控制臺中。