1. 程式人生 > >【Go語言】連線資料庫SQLite、MySQL、Oracle

【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語言連線資料庫SQLiteMySQLOracle

本文目錄 說明: 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連線資料庫步驟(mysqloraclesqlserver2008)

•建立一個以JDBC連線資料庫的程式,包含7個步驟: 1、載入JDBC驅動程式: 在連線資料庫之前,首先要載入想要連線的資料庫的驅動到JVM(Java虛擬機器), 這通過java.lan

go語言讀取mysqlgo語言連線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語言利用指標模式實現字串函式(strlenstrcatstrstrstrcpystrcmpmemcpymemove)

模擬實現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() {