centos6.4下用golang連線mssql
阿新 • • 發佈:2019-01-23
背景描述:公司資料庫用mssql,web伺服器又打算遷移到linux,發現真是悲劇啊,到處是地雷。進入正題
1.安裝ODBC
Install:
yum install unixODBC unixODBC-devel
安裝成功後,會生成兩個配置檔案,/etc/odbcinst.ini,/etc/odbc.ini;這兩個配置檔案稍後會用到。在linux安裝ODBC後,其實已經預設安裝了PostgreSQL,mysql的驅動,此時檢視/etc/odbcinst.ini的內容便知,所以下面還得單獨安裝SQL Server驅動。
2.安裝Microsoft ODBC Driver 11 for SQL Server
http://technet.microsoft.com/zh-cn/library/hh568454.aspx
官方下載包中有兩個sh檔案:build_dm.sh,install.sh。按照sh檔案的提示進行安裝即可。
安裝成功後,檢視檔案/etc/odbcinst.ini,發現新增瞭如下內容:Install: wget http://download.microsoft.com/download/B/C/D/BCDD264C-7517-4B7D-8159-C99FC5535680/RedHat6/msodbcsql-11.0.2270.0.tar.gz tar xvf msodbcsql-11.0.2270.0.tar.gz cd msodbcsql-11.0.2270.0 ./build_dm.sh //build_dm.sh會下載依賴包,然後會出現如下提示叫你安裝相應的依賴。 //Run the command 'cd /tmp/unixODBC.4745.28125.26522/unixODBC-2.3.0; make install' to install the driver manager. ./install.sh verify //驗證安裝條件是否滿足,主要是檢查依賴是否解決。 ./install.sh install
[ODBC Driver 11 for SQL Server]
Description=Microsoft ODBC Driver 11 for SQL Server
Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-11.0.so.2270.0
Threading=1
UsageCount=1
證明SQL Server Driver安裝成功了。
3.配置DSN
參考文件:http://www.easysoft.com/products/data_access/odbc-sql-server-driver/getting-started.html#data-source vi /etc/odbc.ini新增如下程式碼:[SQLSERVER_SAMPLE] Driver = ODBC Driver 11 for SQL Server Description = ODBC Driver 11 for SQL Server Server = 192.168.1.1 Port = Database = database User = root Password = root
4.安裝golang的ODBC驅動
驅動地址:github.com/weigj/go-odbc
Install:
cd $GOPATH/src
git clone git://github.com/weigj/go-odbc.git odbc
cd odbc
go install
cd odbc/driver
go install
如果go install的時候出現如下錯誤:
odbc.go:18:17: error: sql.h: No such file or directory
odbc.go:19:20: error: sqlext.h: No such file or directory
odbc.go:20:22: error: sqltypes.h: No such file or directory
說明本機還沒有安裝ODBC的原因,(鄙人菜鳥之前還不曉得ODBC是什麼,所以才會犯這種低階錯誤哈)
5.寫測試程式碼
package main;
import (
"fmt"
"database/sql"
_"odbc/driver"
)
func main(){
conn,err := sql.Open("odbc","DSN=SQLSERVER_SAMPLE;driver={ODBC Driver 11 for SQL Server};SERVER=192.168.1.235;UID=sa;PWD=zgj_1234;DATABASE=gameupdate");
if(err!=nil){
fmt.Println("Connecting Error");
return;
}
defer conn.Close();
stmt,err := conn.Prepare("select top 5 id from users_role");
if(err!=nil){
fmt.Println("Query Error",err);
return;
}
defer stmt.Close();
row,err := stmt.Query();
if err!=nil {
fmt.Println("Query Error",err);
return;
}
defer row.Close();
for row.Next() {
var id int;
if err := row.Scan(&id);err==nil {
fmt.Println(id);
}
}
fmt.Printf("%s\n","finish");
return;
}
在執行上面的go程式碼中,如果出現錯誤:
Query Error IM002 [unixODBC][Driver Manager]Data source name not found, and no default driver specified
可能是SQL Server Driver沒有安裝成功,或者DSN沒有配置。關鍵還是在於需要對ODBC有一定了解,才不會犯低階錯誤。