banner
biuaxia

biuaxia

"万物皆有裂痕,那是光进来的地方。"
github
bilibili
tg_channel

Golang開發達梦數據庫應用

title: Golang 開發達梦資料庫應用
date: 2022-02-21 14:23:13
toc: true
index_img: https://b3logfile.com/file/2022/02/23a5526744174569ada00a90ca3167f3.png
category:

  • Golang
    tags:
  • Golang
  • 開發
  • 達夢
  • 資料庫
  • 應用

Go 資料庫介面#

Go 語言標準庫 database/sql 提供了一系列資料庫操作的標準介面,DM 資料庫基於 GO 1.13 版本通過實現 database/sql 包的介面,向開發人員提供 DM 資料庫操作的 Go 語言介面。

開發環境搭建#

軟體版本
DM 資料庫DM 8.0 及以上版本
GOGo 1.13 Windows-amd 64
LiteIDELiteIDE x20.1,Go 語言開發編輯器
GITGit-2.29.2-64-bit

安裝 DM 資料庫#

請參考 DM 資料庫快速上手指南

資料庫安裝過程中,請勾選創建 BOOKSHOPDMHR 示例庫,作為資料庫模擬環境,如下圖所示:

DMHR 示例庫

安裝 Go 環境#

可從官网下载 Go 1.13 Windows-amd 64 安裝包,也有解壓版下載,如下圖所示:

安裝包圖片

安裝 Go 語言編輯器 LiteIDE#

LiteIDE 是一個輕量級 Go 語言開發編輯器,下載 LiteIDE 安裝包

下載並安裝 Git#

下載並安裝 Git,通過 Git 獲取驅動程序。

Git 安裝步驟簡單,持續點擊【下一步】即可。安裝完成後,在桌面單擊滑鼠右鍵,選擇【Git Bash Here】按鈕,出現下圖即表明安裝成功。

Git 安裝成功

DM 驅動包的配置#

  1. 安裝 DM 驅動包

將提供的 DM 驅動包放在 GOPATH 的 src 目錄下。驅動包位於 dmdbms/drivers/go/dm-go-driver.zip 解壓到 GPPATH 安裝路徑的 src 下,如圖所示:

安裝 dm 驅動包

  1. 安裝依賴包

所需 Go 依賴包有兩個,textsnappy,從 Git 上把依賴包 clone 到本地,桌面右鍵【Git Bash Here】打開 Git 命令行窗口,依次下載 text 和 snappy 依賴。

git clone https://github.com/golang/text.git  D:/Go/src/golang.org/x/text
git clone https://github.com/golang/snappy  D:/Go/src/github.com/golang/snappy

注意示例安裝路徑為 D:/Go 注意換成自己的安裝路徑。

clone 依賴包

clone 依賴包

綁定變數及大字段操作示例#

打開 LiteIDE 編輯工具,新建一個目錄,並在目錄下新建一 TestDemo.go 文件。

/*該例程實現插入資料,修改資料,刪除資料,資料查詢等基本操作。*/
package main

// 引入相關包
import (
	"database/sql"
	"dm"
	"fmt"
	"io/ioutil"
	"time"
)

var db *sql.DB
var err error

func main() {
	driverName := "dm"
	dataSourceName := "dm://SYSDBA:SYSDBA@localhost:5236"
	if db, err = connect(driverName, dataSourceName); err != nil {
		fmt.Println(err)
		return
	}
	if err = insertTable(); err != nil {
		fmt.Println(err)
		return
	}
	if err = updateTable(); err != nil {
		fmt.Println(err)
		return
	}
	if err = queryTable(); err != nil {
		fmt.Println(err)
		return
	}
	if err = deleteTable(); err != nil {
		fmt.Println(err)
		return
	}
	if err = disconnect(); err != nil {
		fmt.Println(err)
		return
	}
}

/* 創建資料庫連接 */
func connect(driverName string, dataSourceName string) (*sql.DB, error) {
	var db *sql.DB
	var err error
	if db, err = sql.Open(driverName, dataSourceName); err != nil {
		return nil, err
	}
	if err = db.Ping(); err != nil {
		return nil, err
	}
	fmt.Printf("connect to \"%s\" succeed.\n", dataSourceName)
	return db, nil
}

/* 往產品資訊表插入資料 */
func insertTable() error {
	var inFileName = "D:\\三國演義.jpg"
	var sql = `INSERT INTO production.product(name,author,publisher,publishtime,
product_subcategoryid,productno,satetystocklevel,originalprice,nowprice,discount,
description,photo,type,papertotal,wordtotal,sellstarttime,sellendtime)
VALUES(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17);`
	data, err := ioutil.ReadFile(inFileName)
	if err != nil {
		return err
	}
	t1, _ := time.Parse("2006-Jan-02", "2005-Apr-01")
	t2, _ := time.Parse("2006-Jan-02", "2006-Mar-20")
	t3, _ := time.Parse("2006-Jan-02", "1900-Jan-01")
	_, err = db.Exec(sql, "三國演義", "羅貫中", "中華書局", t1, 4, "9787101046126", 10, 19.0000, 15.2000,
		8.0,
		"《三國演義》是中國第一部長篇章回體小說,中國小說由短篇發展至長篇的原因與說書有關。",
		data, "25", 943, 93000, t2, t3)
	if err != nil {
		return err
	}
	fmt.Println("insertTable succeed")
	return nil
}

/* 修改產品資訊表資料 */
func updateTable() error {
	var sql = "UPDATE production.product SET name = :name WHERE productid = 11;"
	if _, err := db.Exec(sql, "三國演義(上)"); err != nil {
		return err
	}
	fmt.Println("updateTable succeed")
	return nil
}

/* 查詢產品資訊表 */
func queryTable() error {
	var productid int
	var name string
	var author string
	var description dm.DmClob
	var photo dm.DmBlob
	var sql = "SELECT productid,name,author,description,photo FROM production.product WHERE productid=11"
	rows, err := db.Query(sql)
	if err != nil {
		return err
	}
	defer rows.Close()
	fmt.Println("queryTable results:")
	for rows.Next() {
		if err = rows.Scan(&productid, &name, &author, &description, &photo); err != nil {
			return err
		}
		blobLen, _ := photo.GetLength()
		fmt.Printf("%v %v %v %v %v\n", productid, name, author, description, blobLen)
	}
	return nil
}

/* 刪除產品資訊表資料 */
func deleteTable() error {
	var sql = "DELETE FROM production.product WHERE productid = 12;"
	if _, err := db.Exec(sql); err != nil {
		return err
	}
	fmt.Println("deleteTable succeed")
	return nil
}

/* 關閉資料庫連接 */
func disconnect() error {
	if err := db.Close(); err != nil {
		fmt.Printf("db close failed: %s.\n", err)
		return err
	}
	fmt.Println("disconnect succeed")
	return nil
}

注意提前在 D:\\三國演義.jpg 準備好要插入的大字段圖片。

點擊【build and run】按鈕運行代碼,運行截圖如下:

運行後截圖

運行後資料庫截圖如下圖所示:

運行後資料庫截圖

參考資料#

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。