【Go語言】連線資料庫SQLite、MySQL、Oracle
說明: go語言連線資料庫不像Java那麼方便,本文分別介紹了連線三種典型的資料庫的驅動以及連線方法:小型,SQLite;中型,MySQL;大型,Oracle.
1.Go連線SQLite
1_1.SQLite推薦驅動
1_2.SQLite連線示例程式碼
示例程式碼如下:
package main
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
"log"
"os"
)
type Users struct {
UserId int
Uname string
}
func main () {
os.Remove("./foo.db")
db, err := sql.Open("sqlite3", "./foo.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
sql := `create table users (userId integer, uname text);`
db.Exec(sql)
sql = `insert into users(userId,uname) values(1,'Mike');`
db.Exec(sql)
sql = `insert into users(userId,uname) values(2,'John' );`
db.Exec(sql)
rows, err := db.Query("select * from users")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
var users []Users = make([]Users, 0)
for rows.Next() {
var u Users
rows.Scan(&u.UserId, &u.Uname)
users = append(users, u)
}
fmt.Println(users)
}
執行結果為:
[{1 Mike} {2 John}]
同時在當前目錄生成foo.db
2.Go連線MySQL
2_1.MySQL推薦驅動
2_2.MySQL連線示例程式碼
示例程式碼如下:
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
type Users struct {
UserId int
Uname string
}
func main() {
//db, err := sql.Open("mysql", "user:[email protected]/dbname")
db, err := sql.Open("mysql", "root:[email protected]/test")
if err != nil {
fmt.Println("連線資料庫失敗")
}
defer db.Close()
var users []Users = make([]Users, 0)
sqlStr := "select * from users"
rows, err := db.Query(sqlStr)
if err != nil {
fmt.Println(err)
} else {
for i := 0; rows.Next(); i++ {
var u Users
rows.Scan(&u.UserId, &u.Uname)
users = append(users, u)
}
fmt.Println(users)
}
}
執行結果為:
[{1 Mike} {2 John}]
3.Go連線Oracle
3_1.Oracle推薦驅動以及準備事項
本人的資料庫相關配置是 版本11.2.0.1.0
Go版本是1.2
系統是WIN7旗艦版64位
按照下面的步驟最終連線上了oracle
①首先是先在機子上安裝git(這是必須的吧 作為go開發者)
②下載最新版的OCI儘管我用的是11.2的版本,但是試了n次才返現只有最新的12.1.0.1.0 才管用
下載地址是http://www.oracle.com/technetwork/cn/database/winx64soft-089540.html
如果這個地址不好使,可以再baidu是搜Instant Client Downloads for Microsoft Windows (x64)
需要下載instantclient-basic和instantclient-sdk兩個zip檔案
下載後將兩個包解壓,然後將sdk中的檔案sdk資料夾放到instantclient_12_1下,形成instantclient_12_1/sdk目錄級
然後將instantclient_12_1資料夾改名為instantclient_11_2並放到了C盤的跟目錄下
③下載MinGW最新版(實際上我用的不是最新的 用的是這個版本x86_64-4.9.0-posix-seh-rt_v3-rev2)
④到https://github.com/wendal/go-oci8下載pkg-config.exe和oci8.pc
注意先不要把這些原始碼git到計算機上,只是先下載pkg-config.exe和oci8.pc(在windows目錄下)
下載後進行以下操作
將pkg-config.exe複製到mingw\bin\下
將oci8.pc複製到mingw\lib\pkg-config\下(我的pkg-config是新建的因為原來沒有)
注意,oci8.pc 需要根據你下載的 oci進行修改。下面是我根據我下載的oci版本做的修改。
# Package Information for pkg-config
prefix=C:/instantclient_11_2
exec_prefix=C:/instantclient_11_2
libdir=${exec_prefix}
includedir=${prefix}/sdk/include/
Name: OCI
Description: Oracle database engine
Version: 11.2
Libs: -L${libdir} -loci
Libs.private:
Cflags: -I${includedir}
⑤修改系統環境變數,
新增
PATH=原有PATH;C:\instantclient_11_2;D:\MinGW\bin; (讀者根據自己的目錄變換一下)
PKG_CONFIG_PATH=D:\MinGW\lib\pkg-config(讀者根據自己的目錄變換一下)
⑥下載原始碼.
把https://github.com/wendal/go-oci8原始碼git到本地(這是go-oci庫 也就是連線oracle的驅動)
go get github.com/wendal/go-oci8
然後執行測試一下吧
3_2.Oracle連線示例程式碼
示例程式碼如下:
package main
import (
"database/sql"
"fmt"
_ "github.com/wendal/go-oci8"
"log"
)
type Users struct {
UserId int
Uname string
}
func main() {
log.Println("Oracle Driver Connecting....")
//使用者名稱/密碼@例項名 如system/[email protected]、sys/[email protected]
db, err := sql.Open("oci8", "BOOKMAN/[email protected]")
if err != nil {
log.Fatal(err)
panic("資料庫連線失敗")
} else {
defer db.Close()
var users []Users = make([]Users, 0)
rows, err := db.Query("select * from users")
if err != nil {
log.Fatal(err)
} else {
for rows.Next() {
var u Users
rows.Scan(&u.UserId, &u.Uname)
users = append(users, u)
}
fmt.Println(users)
defer rows.Close()
}
}
}
執行過程比mysql和sqlite比起來非常緩慢,結果如下
2014/07/08 01:14:05 Oracle Driver Connecting....
[{1 Mike} {2 john}]
相關推薦
【Go語言】連線資料庫SQLite、MySQL、Oracle
本文目錄 說明: go語言連線資料庫不像Java那麼方便,本文分別介紹了連線三種典型的資料庫的驅動以及連線方法:小型,SQLite;中型,MySQL;大型,Oracle. 1.Go連線SQLit
【程式碼集合】連線資料庫、查詢所有資料,API介面定義
連線資料庫、查詢所有資料,API介面定義 <?php $dbhost = 'localhost:3306'; //mysql伺服器主機地址 $dbuser = 'root'; //mysql使用者名稱 $dbpass = 'root';//m
【Go語言】map在goroutine通信中的使用
cannot .net html goroutin field tail 問題 tar ocs 簡介 本篇文章的主要內容是解決go語言map在使用中遇到的兩個問題 一、cannot assign to struct field https://haobook.readthe
【C語言】統計一個字串中字母、數字、空格及其它字元的數量
統計一個字串中字母、數字、空格及其它字元的數量 解法1: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> void Count(con
【程式語言】C++繼承和派生類、虛基類
從已有的物件型別出發建立一種新的物件型別,使它部分或全部繼承原物件的特點和功能,這是面向物件設計方法中的基本特性之一。繼承不僅簡化了程式設計方法,顯著提高了軟體的重用性,而且還使得軟體更加容易維護。派生則是繼承的直接產物,它通過繼承已有的一個或多個類來產生一個新的類,通過派生
【Go語言】基本型別排序和 slice 排序
Go 是通過 sort 包提供排序和搜尋,因為 Go 暫時不支援泛型(將來也不好說支不支援),所以,Go 的 sort 和 search 使用起來跟型別是有關的,或是需要像 c 一樣寫比較函式等,稍微顯得也不是很方便。 引言 Go 的排序思路和 C
jdbc連線資料庫步驟(mysql、oracle、sqlserver2008)
•建立一個以JDBC連線資料庫的程式,包含7個步驟: 1、載入JDBC驅動程式: 在連線資料庫之前,首先要載入想要連線的資料庫的驅動到JVM(Java虛擬機器), 這通過java.lan
【go語言讀取mysql】go語言連線mysql,並且查詢出結果
一、需求分析 go語言 連上mysql,並且從mysql中讀取資料 二、實現效果 "D:\Program Files (x86)\JetBrains\Gogland 171.3780.106\
【ITOO】--SQL資料庫優化:切割、資料庫連線池
上篇講到了考試過程中,開發人員需要關注cpu和記憶體。sql日誌也不容忽視,sql日誌中顯示了資料庫作業系統的報錯日誌,給排錯提供了很大的便利。 考試的資料庫中寫入了一些監聽死鎖和當前最耗資源語句的SQL語句。可以及時的監控死鎖和了解當前考試進行到哪一
【go 語言環境安裝】goland語言環境安裝配置詳解
1、下載go 下載地址: https://golang.google.cn/dl/ 開啟網址,由於我的電腦是win64,所以下載第一個。 2、安裝go 2.1、UNIX/Linux/Mac OS X, 和 FreeBSD 安裝 以下介紹了在UNIX/Linux/Mac OS
【C語言】一維陣列、二維陣列與指標
一維陣列和指標: 1、一維陣列名: 對於這樣的一維陣列:int a[4]; a作為陣列名就是我們陣列的首地址, a是一個地址常量 . 首先說說常量和變數的關係, 對於變數來說, 用箱子去比喻再好不過了, 宣告一個變數就宣告一個箱子,比如我們開闢出一個蘋果型別的箱子, 給這個變
【C語言】指標的算術運算(指標+/-整數、指標+/-指標)
一、指標+/-整數 在之前學習指標時,我們知道指標其實也是一種特殊的變數,既然這樣,那麼指標應該和普通變數一樣,可以進行算術運算。那問題就來了,是不是對指標的任何運算都是合法的呢? 答案是它可以執行某些運算,但並非所有的運算都合法。(指標可以進行加減法,對於乘除法是非法的)
【go語言 基礎系列】陣列及slice
【陣列】 Go語言處理陣列特別的地方是:go把陣列看成是值傳遞 如果需要傳引用,需要額外處理 *[5]int 如下demo package main import ( "fmt" ) func main() { var arr1 = [5]int{1,
【go語言 基礎系列】內建函式
原始檔builtin.go檔案中一共定義了15個內建函式,go1.9.2 版本。通過函式名可以直接呼叫函式。 func append(slice []Type, elems ...Type) []Type func copy(dst, src []Type) int
【c語言】利用指標模式實現字串函式(strlen、strcat、strstr、strcpy、strcmp、memcpy、memove)
模擬實現strlen int my_strlen(const char *p) { assert(p != NULL); char *s = p; while (*p) { p++; } r
【c語言】巨集(#define、#和##)與函式比較
#define -定義識別符號 ef:#define在預處理階段替代所有的Max #define Max 100 int main() { printf("%d\n", Max); system("pause"); return 0
【Python入門】42.資料庫之 使用SQLite
摘要:資料庫的簡單介紹;關係資料庫的簡單介紹;SQLite的基本語法介紹 *寫在前面:為了更好的學習python,博主記錄下自己的學習路程。本學習筆記基於廖雪峰的Python教程,如有侵權,請告知刪除。歡迎與博主一起學習Pythonヽ( ̄▽ ̄)ノ * 文章目
【go語言 socket程式設計系列】IPAddr型別及ResolveIPAddr方法
【型別定義】 IPAddr型別本質上是一個IP型別,原始碼定義檔案:golang/src/pkg/net/iprawsock.go 常用方法會返回一個*IPAddr的資料。 package net // IPAddr represents the address of
【go語言 socket程式設計系列】TCPConn型別與ne.tDialTCP方法
【TCPConn】 netTCPConn是允許服務端與客戶端之間的全雙工通訊的Go型別。其定義在tcpsock_posix.go檔案。 其定義如下 type TCPConn struct { conn } 注意到 conn 是小寫的c,其定義在net.
【go語言 socket程式設計系列】從單執行緒到簡單多執行緒的服務端搭建
簡單單執行緒serverdemo 通過下面程式碼簡單搭建一個服務端,並通過telnet模擬客戶端,演示多客戶端同時請求訪問單執行緒伺服器時的阻塞現象。 package main import ( "fmt" "net" "os" ) func main() {