当前位置: 首页 > news >正文

golang 连接 oracle 数据库 增删改查

 1,golang 连接 oracle 数据库

 2,增删改查

/** @Author: lmy* @Date: 2023-08-24 15:19:22* @LastEditors: lmy* @LastEditTime: 2023-08-24 16:23:58* @FilePath: \golangOracleDemo\main.go* @Description:  golang oracle 增删改查 DEMO*/package mainimport ("database/sql""fmt""strings""time"go_ora "github.com/sijms/go-ora/v2"
)var oracleDB *sql.DB //oracleDB  oracle数据库func main() {var err error// 演示的数据库表DDL//   CREATE TABLE "SYSTEM"."TABLE1"//    (	"ID" NUMBER(*,0) GENERATED ALWAYS AS IDENTITY MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER  NOCYCLE  NOKEEP  NOSCALE  NOT NULL ENABLE,// 	"NAME" VARCHAR2(20 BYTE),// 	"AGE" NUMBER(*,0),// 	"PHONE" VARCHAR2(11 BYTE),// 	"BIRTHDAY" DATE//    ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255//  NOCOMPRESS LOGGING//   STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645//   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1//   BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)//   TABLESPACE "SYSTEM" ;// 传入数据库连接字符串// username/password@host:port/service_name//system:123456@192.168.168.152:1521/orcl.docker.internal//system:123456@192.168.168.152:1521/?SID=orclport := 1521                          // 端口server := "192.168.168.152"           // HostserviceName := "orcl.docker.internal" // 连接名|服务名username := "system"                  // 用户名password := "123456"                  // 密码sid := "orcl"                         // SIDconnStr := ""//连接数据库的方式//方法1:简单连接connStr = go_ora.BuildUrl(server, port, serviceName, username, password, nil)fmt.Println("数据库链接1=>", connStr)//方法2:使用SID连接urlOptions := map[string]string{"SID": sid,}connStr = go_ora.BuildUrl(server, port, "", username, password, urlOptions)fmt.Println("数据库链接2=>", connStr)oracleDB, err = CreateOracleSQLConnV2(connStr)if err != nil {fmt.Printf("连接数据库失败:%v \n", err)return}// 设置数据库链接 |  要数据库连链接创建成功 才能走下面的流程//增var info TableInfoinfo.Name = "小明"info.Age = 11info.Birthday, _ = time.Parse("2006-01-02", "2012-08-08")if isOK, _ := addTableInfo(info); isOK {fmt.Println("新增数据成功", info)} else {fmt.Println("新增数据失败", info)}//增info.Name = "大明"info.Age = 19var timeZero time.Timeinfo.Birthday = timeZero//info.Birthday, _ = time.Parse("2006-01-02", "2004-09-08")isOK, err := addTableInfo(info)if err != nil {fmt.Println("新增数据异常", info, err)} else {if isOK {fmt.Println("新增数据成功", info)} else {fmt.Println("新增数据失败", info)}}//根据名称和年龄搜查询单条数据info, err = sqlGetOneTableDataInfo("明", 18)if err != nil {fmt.Printf("根据ID查询单条数据失败:%v \n", err)return}fmt.Println("根据名称和年龄搜查询单条数据", info)//查询所有数据datas, err := sqlGetAllTableDataInfo()if err != nil {fmt.Printf("查询所有数据失败:%v \n", err)return}fmt.Println("查询所有数据=>", datas)info.Name = "老明"info.Age = 20info.Birthday, _ = time.Parse("2006-01-02", "2003-05-06")//改if isOK := editTableInfo(info); isOK {fmt.Println("编辑数据成功", info)} else {fmt.Println("编辑数据失败", info)}//查询所有数据datas, err = sqlGetAllTableDataInfo()if err != nil {fmt.Printf("查询所有数据失败:%v", err)return}fmt.Println("查询所有数据=>", datas)fmt.Println("删除数据=>", info.ID)// 删除deleteTableInfoByID(info.ID)fmt.Println()//查询所有数据datas, err = sqlGetAllTableDataInfo()if err != nil {fmt.Printf("查询所有数据失败:%v", err)return}fmt.Println("查询所有数据=>", datas)//删除所有数据deleteTableInfo()fmt.Println("删除表所有数据")//查询所有数据datas, err = sqlGetAllTableDataInfo()if err != nil {fmt.Printf("查询所有数据失败:%v", err)return}fmt.Println("查询所有数据=>", datas)
}// 添加表数据
func addTableInfo(info TableInfo) (bool, error) {affect, err := ExecSQL(oracleDB, "INSERT INTO TABLE1( NAME,AGE,BIRTHDAY) VALUES(:name, :age,:brithday)", info.Name, info.Age, info.Birthday)if err != nil {fmt.Printf("添加数据失败:%v", err)return false, err}return affect > 0, nil
}// 编辑表数据
func editTableInfo(info TableInfo) bool {affect, err := ExecSQL(oracleDB, "UPDATE TABLE1 SET NAME=:name,AGE=:age,BIRTHDAY=:brithday WHERE ID=:ID", info.Name, info.Age, info.Birthday, info.ID)if err != nil {fmt.Printf("修改数据失败:%v", err)return false}return affect > 0
}// 根据ID删除表数据
func deleteTableInfoByID(id int) bool {affect, err := ExecSQL(oracleDB, "DELETE TABLE1 where ID = :id", id)if err != nil {fmt.Printf("根据ID删除数据失败:id:%v,%v", id, err)return false}return affect > 0
}// 删除表所有数据
func deleteTableInfo() bool {affect, err := ExecSQL(oracleDB, "DELETE TABLE1 ")if err != nil {fmt.Printf("删除所有数据失败:%v", err)return false}return affect > 0
}// 表数据结构体
type TableInfo struct {ID       int       //id,--IDName     string    //NAME,--名称Age      int       //AGE,--年纪Birthday time.Time //BIRTHDAY,--生日
}// 根据ID查询单条数据
func sqlGetOneTableDataInfo(name string, age int) (TableInfo, error) {//根据id查询名称var info TableInfosqlStr := `select  ID, nvl(NAME,' ')  NAME, nvl(AGE,0) AGE, nvl(BIRTHDAY,'') BIRTHDAY  from TABLE1 where  NAME LIKE :name  AND AGE >= :p2 `err := oracleDB.QueryRow(sqlStr, "%"+name+"%", age).Scan(&info.ID, &info.Name, &info.Age, &info.Birthday)if err != nil {if err == sql.ErrNoRows { // 属于空查找fmt.Printf("查询 数据失败--没有符合条件的数据: \n ")}fmt.Printf("查询 数据失败: \nid=%v \nerr=%s", info.ID, err)return info, err}return info, err
}// 查询所有数据
func sqlGetAllTableDataInfo() ([]TableInfo, error) {var data []TableInforows, err := oracleDB.Query("SELECT ID, NAME,AGE,BIRTHDAY FROM TABLE1")if err != nil {fmt.Printf("查询数据失败:%v \n", err)return data, err}defer rows.Close()var info TableInfofor rows.Next() { // 游标读取info = TableInfo{}err = rows.Scan(&info.ID, &info.Name, &info.Age, &info.Birthday)if err != nil {fmt.Printf("查询数据失败:%v \n", err)} else {data = append(data, info)}}return data, nil
}/*
ExecSQL 通用语句参数:1. *sql.DB2. SQL语句  例子:UPDATE WX_USER_INFO SET wui_status = 20 WHERE wui_openid = :openid例子:INSERT INTO dbo.ALL_WEIXIN_MSG_LOG (awml_wxid,awml_send_openid,awml_msg_from,awml_msg_body,awml_addtime) VALUES(:wxid,:openid,:msgform,:msgbody,GETDATE())3. SQL语句参数参数  os7Cm1EygxiRF3Tox6FM1z11HiMc ,.........返回受影响行数affect和错误提示消息err
*/
func ExecSQL(sqlBasis *sql.DB, sqlStr string, args ...interface{}) (int64, error) {affect := int64(-1)var result sql.Resultvar err errorresult, err = sqlBasis.Exec(sqlStr, args...)if err == nil {affect, _ = result.RowsAffected()}if affect == -1 { //执行失败err = fmt.Errorf("execSQLStr Err:%s\nsql:%s\ndata:%s", err, sqlStr, fmt.Sprintln(args...))}return affect, err
}/*
CreateOracleSQLConnV2 用于创建数据库链接
*/
func CreateOracleSQLConnV2(dbconfigdatastr string) (*sql.DB, error) {// 建立 Oraclesqldbdata, err := sql.Open("oracle", dbconfigdatastr)if err != nil {fmt.Printf("sql application pool:%s\n", err)return nil, err}// 测试创建链接是否成功err = sqldbdata.Ping()dbName := strings.Split(dbconfigdatastr, "/")[2]if err != nil {fmt.Printf("%s DB Ping err : %s\n", dbName, err)defer sqldbdata.Close()} else {fmt.Printf("The Sql link is successful - %s. \n", dbName)}return sqldbdata, err
}

相关文章:

golang 连接 oracle 数据库 增删改查

1,golang 连接 oracle 数据库 2,增删改查 /** Author: lmy* Date: 2023-08-24 15:19:22* LastEditors: lmy* LastEditTime: 2023-08-24 16:23:58* FilePath: \golangOracleDemo\main.go* Description: golang oracle 增删改查 DEMO*/package mainimpor…...

Unity——音频管理器(附例子)

在实际游戏开发中,音效既是一个相对独立的部分,又与其他游戏逻辑密切关联。也就是说,与音效相关的代码会插入很多细节代码中。 而且在音效非常丰富的情况下,如果每一个游戏模块都单独播放音效,那么可能会带来一些问题…...

TCP协议基础

一: TCP协议是什么? TCP协议是基于面向连接,可靠传输,基于字节流的传输层通信协议 1. 面向连接 TCP协议是一种面向连接的协议,意味着在双方在建立数据传输之前,需要进行一个逻辑上的连接,且是…...

C# NetTopologySuite+ProjNet 任意图形类型坐标转换

添加引用:NetTopologySuite、ProjNet、ProjNet.SRID Program.cs文件: using ProjNet.CoordinateSystems; using ProjNet.CoordinateSystems.Transformations; using ProjNet.SRID; using System; using System.Collections.Generic; using System.Linq;…...

Windows笔记本电脑开机黑屏

Windows笔记本电脑开机黑屏 最近,我遇到了一件奇怪的事情。我的Windows笔记本电脑在开机时出现了一个黑屏,没有任何反应。我尝试了多种方法,包括重启和恢复出厂设置,但都无济于事。 我开始感到担心,因为这只会影响到…...

Samb共享用户的设置和修改Linux用户的id号,修改Linux组的id号,加入组,删除组成员等

零、samba帐号的设置 为samba共享添加用户,并设定仅能由授权用户进入的共享 #增加没有家目录,也无法登录系统的空用户 useradd -M userA -s /sbin/nologin #-M 选项是--no-create-home的简写形式,即不为该用户配置家目录;-s选项&…...

VBA:对Excel单元格进行合并操作

Sub hb()Dim nn 3For i 3 To 18If Range("b" & i) <> Range("b" & i 1) ThenRange("b" & n & ":b" & i).Mergen i 1End IfNextEnd Sub...

HTML5离线储存

简介 离线存储指的是&#xff1a;在用户没有与因特网连接时&#xff0c;可以正常访问站点或应用&#xff0c;在用户与因特网连接时&#xff0c;更新用户机器上的缓存文件。 原理&#xff1a;HTML5的离线存储是基于一个新建的 .appcache 文件的缓存机制(不是存储技术)&#xf…...

cmd: Union[List[str], str], ^ SyntaxError: invalid syntax

跑项目在调用from easyprocess import EasyProcess 遇到报错&#xff1a; cmd: Union[List[str], str], ^ SyntaxError: invalid syntax猜测是EasyProcess版本与python版本不对应 pip show EasyProcess查证一下&#xff1a; WARNING: pip is being invoked by an old…...

2023高教社杯数学建模思路 - 案例:异常检测

文章目录 赛题思路一、简介 -- 关于异常检测异常检测监督学习 二、异常检测算法2. 箱线图分析3. 基于距离/密度4. 基于划分思想 建模资料 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 一、简介 – 关于异常…...

FFDNet-pytorch版本代码测试教程

一、FFDNet-pytorch版本代码下载 &#xff08;1&#xff09;FFDNet-pytorch下载 https://download.csdn.net/download/qq_41104871/88233742 二、FFDNet-pytorch版本代码运行环境配置 &#xff08;1&#xff09;FFDNet-pytorch版本代码运行环境配置 https://blog.csdn.net/q…...

uni-app项目由hbuilder项目转化为cli项目

1.背景 原uni-app项目是通过hbuilder创建的&#xff0c;运行以及打包都要依赖于hbuilder运行&#xff1b;一般在vscode开发&#xff0c;在hbuilder运行比较怪异&#xff1b;后续希望脱离hbuilder运行并能通过构建平台进行打包&#xff0c;因此将hbuilder项目转化为cli项目 2.…...

使用SpaceDesk连接平板作为电脑副屏详细步骤教程

文章目录 下载安装PC端安装安卓端安装 配置步骤PC端安卓端 连接 SpaceDesk官网链接https://www.spacedesk.net/ (应该是需要科学上网才能进入) SpaceDesk它可以连接安卓,苹果的平板,手机等&#xff0c;也可以连接其他可以打开网页&#xff08;HTML5&#xff09;的设备。 这里我…...

云备份——第三方库使用介绍(下)

httplib库&#xff0c;一个C11单文件头的跨平台HTTP/HTTPS库。安装起来非常容易。只需包含httplib.h在你的代码中即可。 httplib库实际上是用于搭建一个简单的http服务器或者客户端的库&#xff0c;这种第三方网络库&#xff0c;可以让我们免去搭建服务器或客户端的时间&#x…...

springboot实战(一)之项目搭建

环境准备 ideajdk1.8springboot版本 2.7.15 项目开始 1.打开idea&#xff0c;点击new project 2.选择spring initillizr 核对&#xff1a;Server Url是否是&#xff1a;start.spring.io&#xff0c;然后根据自己依次设置项目名称、存储位置和包名&#xff0c;如下&#xff…...

线性代数的学习和整理16:什么是各种空间(类型),向量空间,距离(类型)?

目录 1 空间相关的群&#xff0c;环&#xff0c;域&#xff0c;集合&#xff0c;空间的预备知识 1.1&#xff1a;群&#xff0c;环&#xff0c;域&#xff0c;集合&#xff0c;空间的定义&#xff08;表示不懂&#xff0c;只是做个标记&#xff09; 2 空间 2.1 各种空间概念…...

css实现文字翻转效果

csss实现文字翻转效果 主要实现核心属性 direction: rtl; unicode-bidi: bidi-override; direction: rtl; 这个属性用于指定文本的方向为从右到左&#xff08;Right-to-Left&#xff09;。它常用于处理阿拉伯语、希伯来语等从右向左书写的文字样式。当设置了 direction: rtl; …...

19 Linux之Python定制篇-apt软件管理和远程登录

19 Linux之Python定制篇-apt软件管理和远程登录 文章目录 19 Linux之Python定制篇-apt软件管理和远程登录19.1 apt软件管理19.1.1 apt介绍19.1.2 更新软件下载地址-阿里源19.1.3 使用apt完成安装和卸载vim 19.2 远程登录Ubuntu 学习视频来自于B站【小白入门 通俗易懂】2021韩顺…...

WebDAV之π-Disk派盘 + notototo

notototo是一款功能丰富的笔记软件,提供了多种功能,包括载入PDF文件并进行批注和标记的能力。您可以使用Apple Pencil或手指在PDF文件上进行写作和绘图操作。 同时,notototo也提供了与团队合作的功能,您可以连接到服务器并与他人协作。此外,您还可以在notototo中进行绘图,…...

_kbhit() and getch() 在小游戏中用不了。因为控制台函数,仅在控制台程序中可用

太长不看版&#xff1a; _kbhit() and getch() 包含在conio.h中。 conio是Console Input/Output&#xff08;控制台输入输出&#xff09;的简写&#xff0c;其中定义了通过控制台进行数据输入和数据输出的函数&#xff0c;主要是一些用户通过按键盘产生的对应操作&#xff0c…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

基于单片机的宠物屋智能系统设计与实现(论文+源码)

本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢&#xff0c;连接红外测温传感器&#xff0c;可实时精准捕捉宠物体温变化&#xff0c;以便及时发现健康异常&#xff1b;水位检测传感器时刻监测饮用水余量&#xff0c;防止宠物…...

Java后端检查空条件查询

通过抛出运行异常&#xff1a;throw new RuntimeException("请输入查询条件&#xff01;");BranchWarehouseServiceImpl.java // 查询试剂交易&#xff08;入库/出库&#xff09;记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...