Go 操作 Oracle
创建并授权用户 user5
# system 用户连接 Oracle 数据库su - oraclesqlplus system/root# 创建一个用户 user5grant connect, resource, unlimited tablespace to user5 identified by oracle;# 授予 user5 创建目录的权限grant create any directory to user5;
在 user5 上创建 emp 表并导入数据
切换到 user5
conn user5/oracle
查看 user5 的表
select table_name from user_tables;

创建并查看 emp 表

导入数据到 emp 表中
修改 info.ctl 文件
su - oraclevim /home/oracle/data/info.ctlLOAD DATAinfile '/home/oracle/data/info.csv'replace into table empfields terminated by ','optionally enclosed by '"'(empno,ename)
导入数据
host sqlldr userid=user5/oracle control=/home/oracle/data/info.ctl log=/home/oracle/data/emp.log

使用 Go 访问 Oracle 并配置环境
创建项目目录
mkdir -p ~/go_code/go_oraclemkdir -p ~/go_code/go_mysql
生成 go.mod 文件
cd ~/go_code/go_oracle/go mod init go_oraclels

编写访问数据库的文件
vim dbquery.gopackage mainimport ("database/sql""fmt""log"_ "github.com/mattn/go-oci8")func main() {// 设置连接数据库的参数db, _ := sql.Open("oci8", "user5:oracle@dbserver/it.test.com")//获取所有数据rows, _ := db.Query("select empno, ename from emp")var empno, ename string//循环显示所有的数据for rows.Next() {rows.Scan(&empno, &ename)fmt.Printf("empno: %s\tename: %s\n", empno, ename)}//关闭数据库defer db.Close()//连接数据库err := db.Ping()if err != nil {fmt.Println("数据库连接失败")return}fmt.Println("hello")}
设置代理
go env -w GO111MODULE=ongo env -w GOPROXY=https://goproxy.io,direct
配置 oci8
创建 pkg-config 目录
mkdir -p /u01/app/oracle/product/oracle12c201/lib/pkg-config/
创建 oci8.pc 文件
```bash cd /u01/app/oracle/product/oracle12c201/lib/pkg-config/
vim oci8.pc prefix=/oracle libdir=/u01/app/oracle/product/oracle12c201/lib includedir=/u01/app/oracle/product/oracle12c201/rdbms/public glib_genmarshal=glib-genmarshal gobject_query=gobject-query glib_mkenums=glib-mkenums Name: oci8 Description: oci8 library Libs: -L${libdir} -lclntsh Cflags: -I${includedir} Version: 12.2
- 配置环境变量```bashvim ~/.bash_profileexport PKG_CONFIG_PATH=/u01/app/oracle/product/oracle12c201/lib/pkg-config/
切换到 root ,再切回 oracle 执行程序
su -su - oraclecd ~/go_code/go_oracle/go run dbquery.go

查看 oci8 是否加载
cat go.mod

注释 log

- 执行程序,查看文件

添加环境变量
vim ~/.bash_profileexport LD_LIBRARY_PATH=/u01/app/oracle/product/oracle12c201/lib
切换到 root ,再切回 oracle 执行程序
su -su - oraclecd ~/go_code/go_oracle/go run dbquery.go

新建项目测试环境
mkdir -p ~/go_code/go_oracle_1cd ~/go_code/go_oracle_1/go mod init go_oracle_1cp ~/go_code/go_oracle/dbquery.go .go run dbquery.go

Go 代码实现增删改查
添加表和数据
编写 Go 代码
cd ~/go_code/go_oraclecp dbquery.go dbtest.govim dbtest.gopackage mainimport ("database/sql""fmt"// "log"_ "github.com/mattn/go-oci8")func main() {// 设置连接数据库的参数db, _ := sql.Open("oci8", "user5:oracle@dbserver/it.test.com")err := db.Ping()if err != nil {fmt.Println("数据库连接失败")return} else {fmt.Println("成功连接到数据库")}db.Exec("create table book (bookid number(5), bookname varchar2(100) not null)")var insert_sql = fmt.Sprintf("insert into book (bookid, bookname) values (%d, '%s')" , 1, "thinking in java")fmt.Println(insert_sql)db.Exec(insert_sql)//关闭数据库defer db.Close()}
查看数据

修改数据
Go 代码
vim dbtest.gopackage mainimport ("database/sql""fmt"// "log"_ "github.com/mattn/go-oci8")func main() {// 设置连接数据库的参数db, _ := sql.Open("oci8", "user5:oracle@dbserver/it.test.com")err := db.Ping()if err != nil {fmt.Println("数据库连接失败")return} else {fmt.Println("成功连接到数据库")}// 创建表//db.Exec("create table book (bookid number(5), bookname varchar2(100) not null)")// 插入数据//var insert_sql = fmt.Sprintf("insert into book (bookid, bookname) values (%d, '%s')" , 1, "thinking in java")//fmt.Println(insert_sql)//db.Exec(insert_sql)// 修改数据update_sql := fmt.Sprintf("update book set bookname = '%s' where bookid = %d", "thinking in python", 1)fmt.Println(update_sql)db.Exec(update_sql)//关闭数据库defer db.Close()}
查看数据

删除数据
Go 代码
package mainimport ("database/sql""fmt"// "log"_ "github.com/mattn/go-oci8")func main() {// 设置连接数据库的参数db, _ := sql.Open("oci8", "user5:oracle@dbserver/it.test.com")err := db.Ping()if err != nil {fmt.Println("数据库连接失败")return} else {fmt.Println("成功连接到数据库")}// 创建表//db.Exec("create table book (bookid number(5), bookname varchar2(100) not null)")// 插入数据//var insert_sql = fmt.Sprintf("insert into book (bookid, bookname) values (%d, '%s')" , 1, "thinking in java")//fmt.Println(insert_sql)//db.Exec(insert_sql)// 修改数据//update_sql := fmt.Sprintf("update book set bookname = '%s' where bookid = %d", "thinking in python", 1)//fmt.Println(update_sql)//db.Exec(update_sql)// 删除数据delete_sql := fmt.Sprintf("delete from book where bookid = %d", 1)db.Exec(delete_sql)//关闭数据库defer db.Close()}
查看数据
Go 操作 MongoDB
- 创建用户并修改密码

切换到 mongodb 用户
su - mongodb
修改环境变量
vim ~/.bash_profileexport MONGODB_HOME=/usr/local/mongodbexport PATH=$MONGODB_HOME/bin:.:$PATH
配置文件生效
source ~/.bash_profile
查看 mongodb 服务
which mongod

创建 mongodb 目录 ```bash
数据目录
mkdir -p ~/mongodb/data
日志目录
mkdir -p ~/mongodb/log
- 启动 mongodb<br />```bashmongod --dbpath ~/mongodb/data --logpath ~/mongodb/log/mongo.log
新建一个窗口,切换到 mongodb 用户,查看27017 端口监听状态
netstat -anlp | grep 27017 | grep LISTEN

查看 mongod 版本(服务器端)
mongod --version

连接数据库
# 连接客户端mongo --host localhost --port 27017# 连接服务端mongo --host dbserver -p 27017
启动服务器
su - mongodbmongod --dbpath ~/mongodb/data --logpath ~/mongodb/log/mongo.log
连接服务器
su - mongodbmongo --host dbserver --port 27017
使用 Go 连接 mongodb
package mainimport ("context""fmt""log""go.mongodb.org/mongo-driver/mongo""go.mongodb.org/mongo-driver/mongo/options")func main() {// 设置客户端连接配置clientOptions := options.Client().ApplyURI("mongodb://dbserver:27017")// 连接到MongoDBclient, err := mongo.Connect(context.TODO(), clientOptions)if err != nil {log.Fatal(err)}// 检查连接err = client.Ping(context.TODO(), nil)if err != nil {log.Fatal(err)}fmt.Println("Connected to MongoDB!")}

关闭连接
• package mainimport ("context""fmt""log""go.mongodb.org/mongo-driver/mongo""go.mongodb.org/mongo-driver/mongo/options")func main() {// 设置客户端连接配置clientOptions := options.Client().ApplyURI("mongodb://dbserver:27017")// 连接到MongoDBclient, err := mongo.Connect(context.TODO(), clientOptions)if err != nil {log.Fatal(err)return}fmt.Println("Connected to MongoDB!")err = client.Disconnect(context.TODO())if err != nil {log.Fatal(err)return}fmt.Println("Connection to MongoDB closed.")}

