golang 连接 oracle 数据库 增删改查

这篇具有很好参考价值的文章主要介绍了golang 连接 oracle 数据库 增删改查。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 1,golang 连接 oracle 数据库

 2,增删改查文章来源地址https://www.toymoban.com/news/detail-698759.html

/*
 * @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 main

import (
	"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=orcl
	port := 1521                          // 端口
	server := "192.168.168.152"           // Host
	serviceName := "orcl.docker.internal" // 连接名|服务名
	username := "system"                  // 用户名
	password := "123456"                  // 密码
	sid := "orcl"                         // SID
	connStr := ""
	//连接数据库的方式
	//方法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 TableInfo
	info.Name = "小明"
	info.Age = 11
	info.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 = 19
	var timeZero time.Time
	info.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 = 20
	info.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,--ID
	Name     string    //NAME,--名称
	Age      int       //AGE,--年纪
	Birthday time.Time //BIRTHDAY,--生日
}

// 根据ID查询单条数据
func sqlGetOneTableDataInfo(name string, age int) (TableInfo, error) {
	//根据id查询名称
	var info TableInfo
	sqlStr := `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 []TableInfo
	rows, 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 TableInfo
	for 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.DB
	2. 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.Result
	var err error
	result, 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) {
	// 建立 Oracle
	sqldbdata, 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 数据库 增删改查的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • django连接本地数据库并执行增删改查

    models.py文件根据数据库表映射出对应的类 在views.py中实现增删改查操作: 增: 删: 改: 查:

    2024年02月20日
    浏览(44)
  • 使用 GORM 连接数据库并实现增删改查操作

    首先,我们需要安装 GORM 包。在终端中运行以下命令: shell go get -u gorm.io/gorm 在 Go 代码的开头导入以下包: 在代码中建立数据库连接,示例中使用 MySQL 数据库作为示范: 请确保替换 user 、 password 和 dbname 为你的实际数据库凭据和名称。 在 GORM 中,我们需要定义模型结构来

    2024年02月15日
    浏览(53)
  • JDBC如何连接SQL Server数据库实现增删改查

    目录 一、连接前准备  1. 环境配置  2. 下载JAR包 3. 添加环境变量 4. 导入JDBC包  二、连接SQL Server  三、实现增删改查 1. 查询数据 2. 添加数据 3. 修改数据 4. 删除数据 5. 拓展 JDBC的全称是Java数据库连接 (Java DataBase Connectivity) ,应用程序通过JDBC连接到数据库,使用SQL语句对数

    2024年02月03日
    浏览(66)
  • Java/JavaWeb连接数据库完成增删改查(胎教级教程)

    目录 项目展示:(增删改查)环境:Tomcat 8.5 1.数据库结构         1.1 创建数据库(source_db)         1.2 创建数据表(tb_source),结构如下。 2.项目文件结构 3.jar包导入 4.创建JDBC数据库访问类:JDBCutil 5.创建实体类:Source 6.创建数据访问层:SourceDao 7.创建业务逻辑层

    2024年02月08日
    浏览(37)
  • PHP后端连接数据库插入数据

    一、打开phpstudy。怎么搭建phpstudy,我上一个文章里有教。   二、编写代码 在网站根目录下(默认是www文件下)创建一个任意名称的文件夹,文件夹里创建两个php后缀的文件,一个html后缀的文件,名称自定义。但为了方便理解我把文件名命名成这样:          后端连接数据库

    2024年02月06日
    浏览(59)
  • Navicat连接Oracle数据库

    打开服务里面找到Oracle服务 OracleServerXE或者OracleServerTTL  创建数据库连接 连接名默认自己起 主机选择本地 端口默认 服务名在服务中可以找到输入后缀 用户名默认都是system 密码是创建oracle时候填写的口令 点击测试连接即可

    2024年02月04日
    浏览(56)
  • Java连接Oracle数据库

    目录 第一步:导入jar包  第二步:配置数据库参数 Oracle配置参数:xml中配置 Mysql配置参数:xml方式配置 第三步:写一个工具类JDBCUtils 第四步:连接数据库 commons-dbutils-1.6.jar,jar包大家就到网上搜吧 Oracle配置参数:xml中配置 重点一: Oracle数据库的JDBC连接分为三种,服务名

    2024年02月13日
    浏览(50)
  • Java连接数据库(学生管理系统案例,可以实现增删改查)

    首先,需要做一个准备工作 ——下载jar包,这个包是用来支持数据库的连接的 官网的下载链接:MySQL :: Download Connector/J 点击链接进入页面: 选择画红框的下载按钮。 与此同时,打开IDEA开发工具,在当前项目目录下新建一个lib目录文件夹用来存放第三方jar包,这样做方便管

    2024年02月07日
    浏览(55)
  • pycharm社区版使用SQLite连接数据库,并实现数据的增删改查

    社区版找不到数据库,需要先安装Database Navigator插件,之后才能通过sqlite3连接数据库。 ①文件 — ②设置 — ③插件 — ④Marketplace搜索database — ⑤安装Database Navigator — ⑥应用确定 安装之后就可以在页面左侧边栏找到DB Browser,也可以拖动移动到页面右侧。找不到的可以在视

    2024年01月17日
    浏览(52)
  • 【PHP系统学习】——Laravel框架数据库的连接以及数据库的增删改查的详细教程

    👨‍💻个人主页 :@开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏 :PHP程序开发 —   按照 MVC 的架构,对数据的操作应该放在 Model 中完成,但如果不使用 Model,我们也可以用 laravel框架提供的 D8 类

    2024年04月15日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包