达梦数据库(DM8)的安装这里就不多介绍了,可以通过图形化界面进行安装,也可以通过命令行进行安装,个人觉得通过命令行安装比较方便。这里给出在CentOS7/中标麒麟v7系统中的基本步骤:
> su root
> mount -o loop /opt/dm8_setup.iso /mnt
# 开始安装
> su - dmdba
> cd /mnt
> ./DMInstall.bin -i
# 根据提示进行选择,可以选择默认项,安装路径选择已经授予dmdba用户权限的/dm8目录
# 命令行安装完后
> su root
# 此步为安装DMAP服务
> /dm8/script/root/root_installer.sh
> su - dmdba
> cd /dm8/bin
# 可以通过过 ./dminit help 查看支持的选项
> ./dminit PATH=/dm8/data DB_NAME=DM01 INSTANCE_NAME=DM01 PORT_NUM=5236 SYSDBA_PWD=dameng123
## 注册系统服务
> su root
> /dm8/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm8/data/DM01/dm.ini -p DM01
> systemctl enable DmServiceDM01
> systemctl status DmServiceDM01
> systemctl start DmServiceDM01
# 到此,DM8数据库安装和实例初始化基本完成
/dm8/drivers/go/dm-go-driver.zip
,将该驱动包解压复制到$GOPATH/src
目录下。go get golang.org/x/text
go get github.com/golang/snappy
dm://sysdba:dameng123@localhost:5236?socketTimeout=10&logLevel=info&schema=TEST
如果需要查看所有的参数设置,可以查看DM8的程序员手册。
/* 创建数据库连接 */
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
}
// insert
func insertTable() error {
var inFileName = "c:\\三国演义.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, "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
}
// update
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
}
// query
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
}
// delete
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
}
/*该例程实现插入数据,修改数据,删除数据,数据查询等基本操作。*/
package main
// 引入相关包
import (
"database/sql"
"dm"
"fmt"
"io/ioutil"
"time"
)
var db *sql.DB
var err error
func main() {
driverName := "dm"
dataSourceName := "dm://sysdba:dameng123@localhost:5236?socketTimeout=10&logLevel=info&schema=TEST"
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
}
}
DM8作为国产数据库,感觉还是不错的,跟其它主流的数据库使用上差别也不算很大。对于其它开发语言也提供了一些驱动包,比如ODBC,JDBC,.NET Data Provider,DM PHP,DM Node.js等,对开发来说相对友好。
仅以此博文记录一下有关DM8的开始学习使用过程,抛砖引玉,希望国产数据库发展得越来越好。