使用 Go-Ora 连接到 Oracle 数据库

alt

前文 《 一鍵啓動 Oracle 23c Free 》 介绍了如何使用容器技术快速拉起 Oracle 23c 数据库。

这个开发者版本可以很便捷的拉起、测试、销毁,对开发者是非常友好的。

本文将介绍如何使用 Go 语言构建项目,并连接到 Oracle 数据库。

Go 环境配置

本文使用的是 Go 1.21 版本。

下载安装包,并解压。

wget https://studygolang.com/dl/golang/go1.21.8.linux-amd64.tar.gz
tar zxf go1.21.8.linux-amd64.tar.gz

将二进制目录添加到环境变量中。

echo 'export PATH=/home/mysql/go/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

查看 Go 版本。

go version
$ go version
go version go1.21.8 linux/amd64

创建一个 Go 的测试项目

Go 语言环境配置完成后,我们来初始化一个新项目。

具体步骤如下:

1. 创建项目目录

创建项目目录 mygo

mkdir mygo
cd mygo

2. 初始化项目

使用 go mod init 命令初始化项目。

go mod init github.com/shawn0915/mygo
$ go mod init github.com/shawn0915/mygo
go: creating new go.mod: module github.com/shawn0915/mygo

3. 创建 Go 文件

创建项目主文件。

touch main.go

在主文件中添加如下代码。

package main
 
import "fmt"
 
func main() {
    fmt.Println("Hello, World!")
}

3. 运行 Go 程序

运行 Go 程序:

go run .
$ go run .
Hello, World!

这将编译并运行 main.go 中的程序,并输出 Hello, World!

相信通过这个小案例,大家已经对 Go 项目有初步的了解。

使用 go-ora 驱动连接到 Oracle

接下来演示如何使用 go-ora 驱动连接到 Oracle 数据库。

go-ora 是由 Go 语言实现的 Oracle 客户端,推荐使用 go-ora v2 版本,对 Oracle 10.2 及以上版本更友好。

下面是代码示例,以供参考。

连接到 Oracle

导入 go-ora 驱动,并创建连接。

import (
    "database/sql"
    "fmt"
    "log"

    goora "github.com/sijms/go-ora/v2"
)

func main() {
    // Oracle 数据库连接信息
    dsn := go_ora.BuildUrl("${oracle_host}"${oracle_port}"${oracle_sid}""${oracle_user}""${oracle_password}", nil)

    // 创建数据库连接
    db, err := sql.Open("goora", dsn)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    // 检查连接
    err = db.Ping()
    if err != nil {
        log.Fatal(err)
    }
}

这里需要将数据库连接信息替换为实际的值,这段代码中并没有使用其他连接参数,所以最后一个值为 nil

需要注意的是,为了安全起见,不要在代码中硬编码数据库连接信息,这里只是为了演示,建议在正式环境中使用环境变量或配置文件来管理敏感信息。

查看版本信息

创建查询,并将查询结果打印出来。

var banner string
querySQL := "SELECT banner FROM v$version"
err = db.QueryRow(querySQL).Scan(&banner)
if err != nil {
    log.Fatal(err)
}
fmt.Printf("Oracle Version: %s\n", banner)

运行程序

运行程序,可以得到版本信息。

$ go run .
Oracle Version: Oracle Database 23c Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free

小结

本文展示了 go-ora 驱动的基本用法。当然还有其他驱动可以使用,比如 GODROR

GODROR 是一个活跃的 Oracle 驱动,基于官方的 ODPI-C (Oracle Call Interface (OCI) wrapper) 接口。

需安装依赖:

go get github.com/godror/godror@latest

在实际生产环境中,你或许会使用 ORM 库来简化数据库操作,而不是直接使用 database/sql 包。

常见的 Go 语言连接 Oracle 数据库的 ORM 框架有:

  1. XORM

XORM 是简单而强大的开源 ORM 框架,支持 godror 和 go-oci8 这两种 Oracle 驱动。

安装依赖:

go get xorm.io/xorm
  1. GORM

支持 Oracle 12c 及以上版本。但已经三年未更新,不建议用于生产环境。

安装依赖:

go get github.com/cengsin/oracle

不过,对于理解底层工作原理和进行特定测试、优化,直接使用数据库驱动 和 database/sql 包是有价值的。

-- END. --

alt

如果这篇文章为你带来了灵感或启发,就请帮忙点『赞』or『在看』or『转发』吧,感谢!(๑˃̵ᴗ˂̵)

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/527762.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于在线脑电图的运动框架解码运动意图

多年来,我们研究了自然控制的各个方面,然而,单个方面的研究成果尚未被整合。在这里,我们提出了一个全面的在线研究中该框架的第一个实现,结合(i)目标定向运动意图、(ii)轨迹解码和(i…

VSCode输入花括号{}}会多一个解决方案

打开设置 搜索Closing Brackets 选择BeforeWhitespace 选完后重启下VSCode即可

AI应用实战1:AI项目实战五大环节

文章目录 环节一:定义问题环节二:收集和处理数据环节三:选择机器学习模型环节四:训练模型环节五:超参数调试和性能优化1.评价模型效果的指标分类任务评估标准:回归任务评估标准:其他通用评估指标…

【Linux】TCP编程{socket/listen/accept/telnet/connect/send}

文章目录 1.TCP接口1.1socket文档 1.2listen拓:端口号8080 1.3accept拓:今天全局函数 1.4读写接口1.5telnet1.一个客户端2.两个客户端 1.6ulimit -a1.7常识回顾1.8connect1.9拓:客户端的ip和地址什么时候被分配?1.10拓&#xff1a…

力扣739. 每日温度

Problem: 739. 每日温度 文章目录 题目描述思路复杂度Code 题目描述 思路 若本题目使用暴力法则会超时,故而使用单调栈解决: 1.创建结果数组res,和单调栈stack; 2.循环遍历数组temperatures: 2.1.若当stack不为空同时…

AQS(AbstractQueuedSynchronizer)

一、什么是AQS AQS的全称为(AbstractQueuedSynchronizer)抽象的队列式的同步器,用来构建锁或者其他同步组件的基础框架类。使⽤AQS能简单且⾼效地构造出应⽤⼴泛的⼤量的同步器,如:基于AQS实现的lock、CountDownLatch…

计算机是如何工作的6

因此,往往就把“并行”和“并发”统称为“并发” 对应的编程方式(解决一个问题,同时搞多个任务来执行,共同协作解决)就称为“并发” 此处cpu的百分数,就是你的进程在cpu舞台上消耗时间的百分比 如果有一…

字符串2s总结

4.字符串 字符串理论基础 什么是字符串 字符串是若⼲字符组成的有限序列,也可以理解为是⼀个字符数组,但是很多语⾔对字符串做了特殊的规定,接下来我来说⼀说C/C中的字符串。 在C语⾔中,把⼀个字符串存⼊⼀个数组时&#xff0c…

Android Activity 介绍

Activity Activity 是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。 每个 Activity 都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之…

Cherno CPP学习笔记-01-背景知识

0、工具网站收集 C语言版本特性 https://en.cppreference.com https://www.cplusplus.com https://www.tutorialspoint.com/cplusplus https://www.learncpp.com https://github.com/fffaraz/awesomecpp https://stackoverflow.com 网页CPP编译器 [C] gcc 12.1.0 - Wa…

expected scalar type long but found float

在报这个错误的情况下,找到报错的路径,将target 改为target.long()就可以解决了

Chatgpt掘金之旅—有爱AI商业实战篇|虚拟助理|(九)

演示站点: https://ai.uaai.cn 对话模块 官方论坛: www.jingyuai.com 京娱AI 一、AI技术创业在虚拟助理业务有哪些机会? 人工智能(AI)技术作为当今科技创新的前沿领域,为创业者提供了广阔的机会和挑战。随…

【Leetcode每日一题】 递归 - 二叉树剪枝(难度⭐⭐)(50)

1. 题目解析 题目链接:814. 二叉树剪枝 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 想象一下,你有一堆层层叠叠的积木,你想从底部开始,把那些标记为0的积木拿走。如…

设计模式之观察者模式讲解

概念:定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。 抽象主题:或者叫被观察者,可以持有、增加、删除观察者对象。具体主题:实现抽象主题定义的…

定时任务原理方案综述

定时任务原理方案综述 背景概述 定时任务,顾名思义,就是指定时间点进行执行相应的任务。业务场景中包括: 每天晚上12点,将当日的销售数据发送给各个VP;订单下单十分钟未付款将自动取消订单;用户下单后发…

【JavaScript】预解析 ② ( 预解析示例分析 | 分步骤分析预解析过程 )

文章目录 一、预解析示例分析一1、要分析的代码2、代码预解析分析3、作用域链分析 二、预解析示例分析二1、要分析的代码2、代码预解析分析 三、预解析示例分析三1、要分析的代码2、预解析过程分析 一、预解析示例分析一 1、要分析的代码 要分析的 代码示例 : <!DOCTYPE ht…

人工智能前沿成科技竞争新高地

以下文章来源&#xff1a;经济参考报 近日&#xff0c;首届中国具身智能大会&#xff08;CEAI 2024&#xff09;在上海举行。作为人工智能领域的前沿热点&#xff0c;具身智能正逐步走进现实&#xff0c;成为当前全球科技竞争的新高地、未来产业的新赛道、经济发展的新引擎。 “…

人工智能_大模型018_AssistantsAPI_01_---人工智能工作笔记0154

先来说一下一些问题: 尽量不要微调,很麻烦,而且效果需要自己不断的去测试. 如果文档中有图表,大量的图片去分析就不合适了. 是否用RAG搜索,这个可以这样来弄,首先去es库去搜能直接找到答案可以就不用去RAG检索了,也可以设置一个分,如果低于60分,那么就可以去进行RAG检索 微…

视频实例分割 | 基于ViT实现的端到端end-to-end+query-based的视频实例分割

项目应用场景 面向视频实例分割场景&#xff0c;项目采用 Vision-Transformer 深度学习算法来实现。 项目效果 项目细节 > 具体参见项目 README.md (1) 创建 python 开发环境 conda create --name tevit python3.7.7 conda activate tevit (2) 安装依赖 torch1.9.0 torch…

XC7A35T-2FGG484 嵌入式FPGA现场可编程门阵列 Xilinx

XC7A35T-2FGG484 是一款由Xilinx&#xff08;赛灵思&#xff09;制造的FPGA&#xff08;现场可编程门阵列&#xff09;芯片 以下是XC7A35T-2FGG484 的主要参数&#xff1a; 1. 系列&#xff1a;Artix-7 2. 逻辑单元数量&#xff1a;33280个 3. 工艺技术&#xff1a;28nm 4. …