使用 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 多平台发布

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构与算法】:归并排序和计数排序

1. 归并排序 归并排序是一种效率仅次于快速排序的排序算法。它有非递归和递归两种实现方式(本文只讲述递归实现,非递归实现以后有专门的文章)。 其实,归并排序也叫外排序。它不仅可以对内存中的数据进行排序,还能对文件里的数据排序。 比如&…

LeetCode 使数组连续的最少操作数

地址:. - 力扣(LeetCode) 难度:困难 题目描述:给你一个整数数组 nums 。每一次操作中,你可以将 nums 中 任意 一个元素替换成 **任意 **整数。 如果 nums 满足以下条件,那么它是 连续的 &#x…

点击上传文件

一、页面样式: (1)点击前: (2)点击后: 设计:①自定义elementPlus图标;②使用Tooltip实现鼠标悬浮按钮上出现文字提示;③上传与更换的切换样式;…

Linux 性能分析工具大全

vmstat--虚拟内存统计 vmstat(VirtualMeomoryStatistics,虚拟内存统计)是 Linux 中监控内存的常用工具,可对操作系统的虚拟内存、进程、CPU 等的整体情况进行监视。vmstat 的常规用法:vmstat interval times 即每隔 interval 秒采…

从概念到实践:揭开枚举与联合体在数字化创新时代的神秘面纱

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看,已成习惯 创作不易,多多支持! 在编程的世界中,枚举和联合体是两种非常基础且重要的数据结构。它们各自具有独特的特点和用途,为程序员提供…

(一)基于IDEA的JAVA基础12

一维数组 为什么使用数组: 当我们需要存储一系列数据的时候,就需要用到数组,如果不使用数组,我们就要需要一个一个的去声明变量,这样浪费内存空间,同时效率低下。 什么是数组: 数组本身就是一个变量,只…

Redis从入门到精通(六)Redis实战(三)优惠券秒杀

↑↑↑下载测试项目原代码↑↑↑ 文章目录 前言4.3 优惠券秒杀4.3.1 数据表与实体类4.3.2 添加优惠券4.3.2.1 添加普通券代码4.3.2.2 添加秒杀券代码 4.3.3 实现秒杀下单4.3.3.1 秒杀下单逻辑分析4.3.3.2 获取秒杀订单ID4.3.3.3 获取用户ID4.3.3.4 实现秒杀下单 前言 Redis实战…

diffusion model(十五) : IP-Adapter技术小结

infopaperhttps://arxiv.org/pdf/2308.06721.pdfcodehttps://github.com/tencent-ailab/IP-Adapterorg.Tencent AI Lab个人博客地址http://myhz0606.com/article/ip_adapter 1 Motivation 为了对文生图diffusion model进行特定概念的定制,常用LoRA[1]、textual in…

JDK下载及安装说明

1.JDK下载 访问oracle官网:http://www.oracle.com 在首页点击Downloads,进入oracle软件下载页。 在下载页面,点击Java。 选择Java (JDK) for Developers,点击。 在 Java SE Downloads 页面,点击中间的DO…

装机指导。

everything winrar snipaste cmake git tortoisegit tortoisesvn inno setup vs2022 安装的时候注意sdk路径一定要默认!! 否则你会发现在你的sdk安装路径的根盘符下会多出一个Windows Kits,强迫症接受不了 默认的会跟已有的装在一起…

【Python系列】读取 Excel 第一列数据并赋值到指定列

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Linux的学习之路:4、权限

一、Linux权限的概念 权限我们都熟悉,最常见的就是在看电视时需要vip这个就是权限,然后在Linux就是有两个权限,就是管理员也就是超级用户和普通的用户 命令:su [用户名] 功能:切换用户。 例如,要从root用户…

ZLMediaKit ubantu 下编译

1、获取代码 #国内用户推荐从同步镜像网站gitee下载 git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit #千万不要忘记执行这句命令 git submodule update --init二、依赖库 Debian系(包括ubuntu)系统下安装依赖的方法: #除了…

Python-VBA函数之旅-ascii函数

ascii函数在Python中主要用于将对象(特别是字符和字符串)转换为它们的ASCII表示形式。这种转换在处理文本数据、调试代码以及确保文本以 ASCII 格式存储或传输时非常有用。常见应用场景有: 1、调试和文本处理:当处理包含非ASCII字符(如Unicode字符)的文…

景联文科技:为AI大模型提供高质海量训练数据

在全球AI浪潮的推动下,大量训练数据已成为AI算法模型发展和演进中的关键一环。 艾瑞咨询数据显示,包括数据采集、数据处理(标注)、数据存储、数据挖掘等模块在内的AI基础数据服务市场,将在未来数年内持续增长。 预计到…

算法:完全背包问题dp

文章目录 一、完全背包问题的特征二、定义状态三、状态转移四、降维优化五、参考例题5.1、Acwing:3.完全背包问题5.2、Acwing:900. 整数划分 一、完全背包问题的特征 完全背包问题是动态规划中的一种经典问题,它的主要特征可以总结如下&…

ES6中 Promise的详细讲解

文章目录 一、介绍状态特点流程 二、用法实例方法then()catchfinally() 构造函数方法all()race()allSettled()resolve()reject() 三、使用场景# 参考文献 一、介绍 Promise,译为承诺,是异步编程的一种解决方案,比传统的解决方案(…

2024/4/5—力扣—在排序数组中查找元素的第一个和最后一个位置

代码实现: 思路:二分法 方法一:分别查找左右侧边界 /*** Note: The returned array must be malloced, assume caller calls free().*/ int GetTargetFirstPosition(int *nums, int numsSize, int target) {int l 0, r numsSize - 1;while …

springboot无人便利店信息管理系统ssm+tomcat+java

jdk版本:1.8 及以上 ide工具:IDEA 或者eclipse 数据库: mysql 编程语言: java 框架:SSM/springboot都有 maven: 3.6.1 前端:layuibootstrapjsp 详细技术:HTMLCSSJSjspspringmvcmybatisMYSQLMAVENtomcat本文以java实现…

Jenkins使用-绑定域控与用户授权

一、Jenkins安装完成后,企业中使用,首先需要绑定域控以方便管理。 操作方法: 1、备份配置文件,防止域控绑定错误或授权策略选择不对,造成没办法登录,或登录后没有权限操作。 [roottest jenkins]# mkdir ba…