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

news2024/12/26 11:41:55
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.coloradmin.cn/o/1579375.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机视觉之三维重建(7)---多视图几何(下)

文章目录 一、透视结构恢复问题1.1 概述1.2 透视结构恢复歧义1.3 代数方法1.4 捆绑调整 二、P3P问题三、随机采样一致性 一、透视结构恢复问题 1.1 概述 1. 透视结构恢复问题:摄像机为透视相机,内外参数均未知。 2. 问题:已知 n n n 个三维…

一起学习python——基础篇(10)

前言,Python 是一种面向对象的编程语言。以前大学读书的时候经常开玩笑说的一句话“如果没有对象,就new一个”。起因就是编程老师上课时经常说一句“首先,我们new一个对象”。 今天讲一下python的类和对象。 类是什么?它是一种用…

互联网大厂ssp面经之路:计算机网络part2

什么是 HTTP 和 HTTPS?它们之间有什么区别? a. HTTP(超文本传输协议)和HTTPS(安全超文本传输协议)是用于在Web上传输数据的协议。它们之间的区别在于安全性和数据传输方式。 b. HTTP是一种不安全的协议&…

重大利好|五万亿元增量!能源领域大规模设备更新!

前 3月13日,国务院印发《推动大规模设备更新和消费品以旧换新行动方案》。国家发改委主任郑栅洁更是表示,随着高质量发展的深入推进,设备更新的需求会不断扩大,初步估算这是一个5万亿元以上的巨大市场。 在推进重点行业设备更新改…

面试算法-160-合并两个有序链表

题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4] 解 class Solution {public ListNode mergeTwoLists(ListNode li…

Springboot-redis整合

Springboot-redis命令行封装 前言 Redis(Remote Dictionary Server),即远程字典服务,是一个开源的使用ANSI C语言编写的、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis也是现…

为什么 AI 模型的计算成本如此之高?

生成式人工智能的热潮是受计算限制的。它具有独特的属性,即添加更多计算直接导致更好的产品。通常,研发投资与产品的价值更直接相关,而这种关系显然是亚线性的。但目前人工智能并非如此,因此,推动当今行业的一个主要因…

实验2 路由器基本配置

实验2 路由器基本配置 一、 原理描述二、 实验目的三、 实验内容四、 实验步骤1.建立实验拓扑2.基础配置3.配置路由器接口IP地址4.查看路由器配置信息5.连通性测试6.使用抓包工具 一、 原理描述 华为设备支持多种配置方式,操作人员要熟悉使用命令行的方式进行设备管…

关于JVM-三色标记算法剖析

相关系列 深入理解JVM垃圾收集器-CSDN博客 深入理解JVM垃圾收集算法-CSDN博客 深入理解jvm执行引擎-CSDN博客 jvm优化原则-CSDN博客 jvm流程图-CSDN博客 三色标记产生的原因? 在并发标记的过程中,因为标记期间应用线程还在继续跑,对象间的引…

Android Activity 介绍

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

用Echarts词云数据可视化热词表白​​

目录 1、使用前准备 2、准备工作 3、盒子搭建 4、整体展现 1、使用前准备 找到表白对象(重中之重!),不要一见钟情(个人觉得:一见钟情属于见色起意!),因为数据可视化需…

3D Web轻量引擎HOOPS Communicator装配制造流程演示

介绍 该演示介绍了使用HOOPS Communicator的独特工作流程,该工作流程从零件列表中加载零件,并使用自定义配合操作符(例如共线、同心和共面)构建装配模型。该工作流程可用于各种行业,例如维护手册、工作指令或电子商务…

不使用 Docker 构建 Triton 服务器并在 Google Colab 平台上部署 HuggingFace 模型

Build Triton server without docker and deploy HuggingFace models on Google Colab platform EnvironmentBuilding Triton serverDeploying HuggingFace models客户端推荐阅读参考 Environment 根据Triton 环境对应表 ,Colab 环境缺少 tensorrt-8.6.1&#xff0…

2024/4/5—力扣—搜索旋转排序数组

代码实现&#xff1a; 思路&#xff1a;二分法 int search(int *nums, int numsSize, int target) {int l 0, r numsSize - 1;while (l < r) { // 左闭右闭int mid (l r) >> 1;if (nums[mid] target) {return mid;}if (nums[l] < nums[mid]) { // 说明l - mid…

ClickHouse 介绍

前言 一个通用系统意味着更广泛的适用性&#xff0c;但通用的另一种解释是平庸&#xff0c;因为它无法在所有场景内都做到极致。 ClickHouse 在没有像三驾马车这样的指导性论文的背景下&#xff0c;通过针对特定场景的极致优化&#xff0c;获得闪电般的查询性能。 ClickHous…

为说阿拉伯语的国家进行游戏本地化

阿拉伯语是由超过4亿人使用的语言&#xff0c;并且是二十多个国家的官方语言。进入这些国家的市场并非易事——虽然他们共享一种通用语言&#xff0c;但每个国家都有自己独特的文化&#xff0c;有自己的禁忌和对审查的处理方式。这就是为什么视频游戏公司长期以来都远离阿拉伯语…

C语言学习初级阶段(数据)——scanf读取标准输入

文章目录 一、scanf函数的原理1.1、自己理解1.2、王道解释1.3、注意 一、scanf函数的原理 输入和输出是通过标准函数库实现的&#xff0c;C语言通过scanf函数读取键盘输入&#xff0c;键盘输入又称标准输入。当scanf函数读取标准输入时&#xff0c;如果还没有输入任何内容&…

如何提升产品用户体验?4个工具+6张案例,让你快速吃透!

在数字时代的浪潮中&#xff0c;产品用户体验早已不再是简单的“好用”或“不好用”的评判标准&#xff0c;它不仅仅是功能的堆砌&#xff0c;更是情感的连接、智慧的体现。在这个竞争激烈的市场中&#xff0c;只有那些能够深入理解用户需求、精准把握用户心理的产品&#xff0…

ES6中 Promise的详细讲解

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

(学习日记)2024.04.09:UCOSIII第三十七节:事件函数接口

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…