Go 操作 Oracle
创建并授权用户 user5
# system 用户连接 Oracle 数据库
su - oracle
sqlplus system/root
# 创建一个用户 user5
grant 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.ctl
LOAD DATA
infile '/home/oracle/data/info.csv'
replace into table emp
fields 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_oracle
mkdir -p ~/go_code/go_mysql
生成 go.mod 文件
cd ~/go_code/go_oracle/
go mod init go_oraclels
编写访问数据库的文件
vim dbquery.go
package main
import (
"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=on
go 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
- 配置环境变量
```bash
vim ~/.bash_profile
export 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_profile
export 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_1
cd ~/go_code/go_oracle_1/
go mod init go_oracle_1
cp ~/go_code/go_oracle/dbquery.go .
go run dbquery.go
Go 代码实现增删改查
添加表和数据
编写 Go 代码
cd ~/go_code/go_oraclecp dbquery.go dbtest.go
vim dbtest.go
package main
import (
"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.go
package main
import (
"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()
}
查看数据
![](https://cdn.nlark.com/yuque/0/2020/jpeg/335089/1602466727149-25809337-9c57-4b5e-bcf9-93d6e1b2d8dd.jpeg#align=left&display=inline&height=144&margin=%5Bobject%20Object%5D&originHeight=195&originWidth=347&size=0&status=done&style=none&width=257)
删除数据
Go 代码
package main
import (
"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_profile
export MONGODB_HOME=/usr/local/mongodb
export PATH=$MONGODB_HOME/bin:.:$PATH
配置文件生效
source ~/.bash_profile
查看 mongodb 服务
which mongod
创建 mongodb 目录 ```bash
数据目录
mkdir -p ~/mongodb/data
日志目录
mkdir -p ~/mongodb/log
- 启动 mongodb<br />
```bash
mongod --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 - mongodb
mongod --dbpath ~/mongodb/data --logpath ~/mongodb/log/mongo.log
连接服务器
su - mongodb
mongo --host dbserver --port 27017
使用 Go 连接 mongodb
package main
import (
"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")
// 连接到MongoDB
client, 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 main
import (
"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")
// 连接到MongoDB
client, 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.")
}