暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用golang链接达梦数据库

原创 夏克 2022-04-09
2939

Go DM 数据库驱动介绍

Go 语言标准库 database/sql(https://golang.google.cn/pkg/database/sql/)提供了一系列数据库操作的标准接口,DM 数据库基于 GO1.13 版本通过实现 database/sql 包的接口,向开发人员提供 DM 数据库操作的 Go 语言接口。

环境准备

  • 达梦安装后在安装目录的drivers下有go目录,该目录下面的dm-go-driver.zip

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8rqCjLoV-1648908140731)(images/i3y8cnkDoLzz4VGbbt5tnrAx_m5oTi0t0ok8-5pNdYg.png)]

  • 建立go工程
[root@vmpc ~]# mkdir go_dm8 [root@vmpc ~]# cd go_dm8/ [root@vmpc go_dm8]# mkdir src [root@vmpc go_dm8]# cd src/ [root@vmpc src]# mkdir app [root@vmpc src]# cd app

vim main.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 = "sanguo.txt" 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, "9787101046121", 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 = 11;" 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 }

将解压后的dm-go-driver.zip后的达梦go驱动放入工程目录

[root@vmpc dm8]# unzip dm-go-driver.zip [root@vmpc dm8]# mv dm ../go_dm8/src/

设置环境变量

[root@vmpc go_dm8]# export GOPATH=/root/go_dm8 [root@vmpc go_dm8]# export GO111MODULE="off"

手工下载** golang.org/x/text **

[root@vmpc go_dm8]# mkdir -p $GOPATH/src/golang.org/x/ [root@vmpc go_dm8]# cd $GOPATH/src/golang.org/x/ [root@vmpc x]# git clone https://github.com/golang/text.git

编译项目

[root@vmpc x]# cd $GOPATH [root@vmpc go_dm8]# go get app [root@vmpc go_dm8]# go install app

目录结构

[root@vmpc go_dm8]# tree -L 2 . ├── bin │ ├── app │ └── sanguo.txt └── src ├── app ├── dm ├── github.com └── golang.org 6 directories, 2 files

源码

https://gitee.com/xk_git_admin/go_dm8.git

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论