国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

golang 連接 oracle 數(shù)據(jù)庫(kù) 增刪改查

這篇具有很好參考價(jià)值的文章主要介紹了golang 連接 oracle 數(shù)據(jù)庫(kù) 增刪改查。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

?1,golang 連接 oracle 數(shù)據(jù)庫(kù)

?2,增刪改查文章來(lái)源地址http://www.zghlxwxcb.cn/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數(shù)據(jù)庫(kù)

func main() {
	var err error

	// 演示的數(shù)據(jù)庫(kù)表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" ;

	// 傳入數(shù)據(jù)庫(kù)連接字符串
	// 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" // 連接名|服務(wù)名
	username := "system"                  // 用戶名
	password := "123456"                  // 密碼
	sid := "orcl"                         // SID
	connStr := ""
	//連接數(shù)據(jù)庫(kù)的方式
	//方法1:簡(jiǎn)單連接
	connStr = go_ora.BuildUrl(server, port, serviceName, username, password, nil)
	fmt.Println("數(shù)據(jù)庫(kù)鏈接1=>", connStr)
	//方法2:使用SID連接
	urlOptions := map[string]string{
		"SID": sid,
	}
	connStr = go_ora.BuildUrl(server, port, "", username, password, urlOptions)
	fmt.Println("數(shù)據(jù)庫(kù)鏈接2=>", connStr)

	oracleDB, err = CreateOracleSQLConnV2(connStr)
	if err != nil {
		fmt.Printf("連接數(shù)據(jù)庫(kù)失?。?v \n", err)
		return
	}
	// 設(shè)置數(shù)據(jù)庫(kù)鏈接 |  要數(shù)據(jù)庫(kù)連鏈接創(chuàng)建成功 才能走下面的流程

	//增
	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("新增數(shù)據(jù)成功", info)
	} else {
		fmt.Println("新增數(shù)據(jù)失敗", 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("新增數(shù)據(jù)異常", info, err)
	} else {
		if isOK {
			fmt.Println("新增數(shù)據(jù)成功", info)
		} else {
			fmt.Println("新增數(shù)據(jù)失敗", info)
		}
	}

	//根據(jù)名稱和年齡搜查詢單條數(shù)據(jù)
	info, err = sqlGetOneTableDataInfo("明", 18)
	if err != nil {
		fmt.Printf("根據(jù)ID查詢單條數(shù)據(jù)失?。?v \n", err)
		return
	}
	fmt.Println("根據(jù)名稱和年齡搜查詢單條數(shù)據(jù)", info)
	//查詢所有數(shù)據(jù)
	datas, err := sqlGetAllTableDataInfo()
	if err != nil {
		fmt.Printf("查詢所有數(shù)據(jù)失?。?v \n", err)
		return
	}
	fmt.Println("查詢所有數(shù)據(jù)=>", datas)

	info.Name = "老明"
	info.Age = 20
	info.Birthday, _ = time.Parse("2006-01-02", "2003-05-06")
	//改
	if isOK := editTableInfo(info); isOK {
		fmt.Println("編輯數(shù)據(jù)成功", info)
	} else {
		fmt.Println("編輯數(shù)據(jù)失敗", info)
	}

	//查詢所有數(shù)據(jù)
	datas, err = sqlGetAllTableDataInfo()
	if err != nil {
		fmt.Printf("查詢所有數(shù)據(jù)失?。?v", err)
		return
	}
	fmt.Println("查詢所有數(shù)據(jù)=>", datas)
	fmt.Println("刪除數(shù)據(jù)=>", info.ID)
	// 刪除
	deleteTableInfoByID(info.ID)
	fmt.Println()
	//查詢所有數(shù)據(jù)
	datas, err = sqlGetAllTableDataInfo()
	if err != nil {
		fmt.Printf("查詢所有數(shù)據(jù)失?。?v", err)
		return
	}
	fmt.Println("查詢所有數(shù)據(jù)=>", datas)

	//刪除所有數(shù)據(jù)
	deleteTableInfo()
	fmt.Println("刪除表所有數(shù)據(jù)")

	//查詢所有數(shù)據(jù)
	datas, err = sqlGetAllTableDataInfo()
	if err != nil {
		fmt.Printf("查詢所有數(shù)據(jù)失?。?v", err)
		return
	}
	fmt.Println("查詢所有數(shù)據(jù)=>", datas)
}

// 添加表數(shù)據(jù)
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("添加數(shù)據(jù)失?。?v", err)
		return false, err
	}
	return affect > 0, nil
}

// 編輯表數(shù)據(jù)
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("修改數(shù)據(jù)失?。?v", err)
		return false
	}
	return affect > 0
}

// 根據(jù)ID刪除表數(shù)據(jù)
func deleteTableInfoByID(id int) bool {
	affect, err := ExecSQL(oracleDB, "DELETE TABLE1 where ID = :id", id)
	if err != nil {
		fmt.Printf("根據(jù)ID刪除數(shù)據(jù)失?。篿d:%v,%v", id, err)
		return false
	}
	return affect > 0
}

// 刪除表所有數(shù)據(jù)
func deleteTableInfo() bool {
	affect, err := ExecSQL(oracleDB, "DELETE TABLE1 ")
	if err != nil {
		fmt.Printf("刪除所有數(shù)據(jù)失?。?v", err)
		return false
	}
	return affect > 0
}

// 表數(shù)據(jù)結(jié)構(gòu)體
type TableInfo struct {
	ID       int       //id,--ID
	Name     string    //NAME,--名稱
	Age      int       //AGE,--年紀(jì)
	Birthday time.Time //BIRTHDAY,--生日
}

// 根據(jù)ID查詢單條數(shù)據(jù)
func sqlGetOneTableDataInfo(name string, age int) (TableInfo, error) {
	//根據(jù)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("查詢 數(shù)據(jù)失敗--沒(méi)有符合條件的數(shù)據(jù): \n ")
		}
		fmt.Printf("查詢 數(shù)據(jù)失敗: \nid=%v \nerr=%s", info.ID, err)
		return info, err
	}
	return info, err
}

// 查詢所有數(shù)據(jù)
func sqlGetAllTableDataInfo() ([]TableInfo, error) {
	var data []TableInfo
	rows, err := oracleDB.Query("SELECT ID, NAME,AGE,BIRTHDAY FROM TABLE1")
	if err != nil {
		fmt.Printf("查詢數(shù)據(jù)失?。?v \n", err)
		return data, err
	}
	defer rows.Close()
	var info TableInfo
	for rows.Next() { // 游標(biāo)讀取
		info = TableInfo{}
		err = rows.Scan(&info.ID, &info.Name, &info.Age, &info.Birthday)
		if err != nil {
			fmt.Printf("查詢數(shù)據(jù)失?。?v \n", err)
		} else {
			data = append(data, info)
		}
	}
	return data, nil
}

/*
ExecSQL 通用語(yǔ)句

	參數(shù):
	1. *sql.DB
	2. SQL語(yǔ)句  例子: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語(yǔ)句參數(shù)參數(shù)  os7Cm1EygxiRF3Tox6FM1z11HiMc ,.........
	返回受影響行數(shù)affect和錯(cuò)誤提示消息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 { //執(zhí)行失敗
		err = fmt.Errorf("execSQLStr Err:%s\nsql:%s\ndata:%s", err, sqlStr, fmt.Sprintln(args...))
	}
	return affect, err
}

/*
CreateOracleSQLConnV2 用于創(chuàng)建數(shù)據(jù)庫(kù)鏈接
*/
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
	}
	// 測(cè)試創(chuàng)建鏈接是否成功
	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
}

到了這里,關(guān)于golang 連接 oracle 數(shù)據(jù)庫(kù) 增刪改查的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • django連接本地?cái)?shù)據(jù)庫(kù)并執(zhí)行增刪改查

    django連接本地?cái)?shù)據(jù)庫(kù)并執(zhí)行增刪改查

    models.py文件根據(jù)數(shù)據(jù)庫(kù)表映射出對(duì)應(yīng)的類 在views.py中實(shí)現(xiàn)增刪改查操作: 增: 刪: 改: 查:

    2024年02月20日
    瀏覽(18)
  • 使用 GORM 連接數(shù)據(jù)庫(kù)并實(shí)現(xiàn)增刪改查操作

    首先,我們需要安裝 GORM 包。在終端中運(yùn)行以下命令: shell go get -u gorm.io/gorm 在 Go 代碼的開(kāi)頭導(dǎo)入以下包: 在代碼中建立數(shù)據(jù)庫(kù)連接,示例中使用 MySQL 數(shù)據(jù)庫(kù)作為示范: 請(qǐng)確保替換 user 、 password 和 dbname 為你的實(shí)際數(shù)據(jù)庫(kù)憑據(jù)和名稱。 在 GORM 中,我們需要定義模型結(jié)構(gòu)來(lái)

    2024年02月15日
    瀏覽(21)
  • JDBC如何連接SQL Server數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪改查

    JDBC如何連接SQL Server數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪改查

    目錄 一、連接前準(zhǔn)備 ?1. 環(huán)境配置 ?2. 下載JAR包 3. 添加環(huán)境變量 4. 導(dǎo)入JDBC包 ?二、連接SQL Server ?三、實(shí)現(xiàn)增刪改查 1. 查詢數(shù)據(jù) 2. 添加數(shù)據(jù) 3. 修改數(shù)據(jù) 4. 刪除數(shù)據(jù) 5. 拓展 JDBC的全稱是Java數(shù)據(jù)庫(kù)連接 (Java DataBase Connectivity) ,應(yīng)用程序通過(guò)JDBC連接到數(shù)據(jù)庫(kù),使用SQL語(yǔ)句對(duì)數(shù)

    2024年02月03日
    瀏覽(27)
  • Java/JavaWeb連接數(shù)據(jù)庫(kù)完成增刪改查(胎教級(jí)教程)

    Java/JavaWeb連接數(shù)據(jù)庫(kù)完成增刪改查(胎教級(jí)教程)

    目錄 項(xiàng)目展示:(增刪改查)環(huán)境:Tomcat 8.5 1.數(shù)據(jù)庫(kù)結(jié)構(gòu) ????????1.1 創(chuàng)建數(shù)據(jù)庫(kù)(source_db) ????????1.2?創(chuàng)建數(shù)據(jù)表(tb_source),結(jié)構(gòu)如下。 2.項(xiàng)目文件結(jié)構(gòu) 3.jar包導(dǎo)入 4.創(chuàng)建JDBC數(shù)據(jù)庫(kù)訪問(wèn)類:JDBCutil 5.創(chuàng)建實(shí)體類:Source 6.創(chuàng)建數(shù)據(jù)訪問(wèn)層:SourceDao 7.創(chuàng)建業(yè)務(wù)邏輯層

    2024年02月08日
    瀏覽(21)
  • PHP后端連接數(shù)據(jù)庫(kù)插入數(shù)據(jù)

    PHP后端連接數(shù)據(jù)庫(kù)插入數(shù)據(jù)

    一、打開(kāi)phpstudy。怎么搭建phpstudy,我上一個(gè)文章里有教。 ? 二、編寫代碼 在網(wǎng)站根目錄下(默認(rèn)是www文件下)創(chuàng)建一個(gè)任意名稱的文件夾,文件夾里創(chuàng)建兩個(gè)php后綴的文件,一個(gè)html后綴的文件,名稱自定義。但為了方便理解我把文件名命名成這樣: ? ? ? ? ?后端連接數(shù)據(jù)庫(kù)

    2024年02月06日
    瀏覽(24)
  • Navicat連接Oracle數(shù)據(jù)庫(kù)

    Navicat連接Oracle數(shù)據(jù)庫(kù)

    打開(kāi)服務(wù)里面找到Oracle服務(wù) OracleServerXE或者OracleServerTTL? 創(chuàng)建數(shù)據(jù)庫(kù)連接 連接名默認(rèn)自己起 主機(jī)選擇本地 端口默認(rèn) 服務(wù)名在服務(wù)中可以找到輸入后綴 用戶名默認(rèn)都是system 密碼是創(chuàng)建oracle時(shí)候填寫的口令 點(diǎn)擊測(cè)試連接即可

    2024年02月04日
    瀏覽(28)
  • Java連接Oracle數(shù)據(jù)庫(kù)

    Java連接Oracle數(shù)據(jù)庫(kù)

    目錄 第一步:導(dǎo)入jar包 ?第二步:配置數(shù)據(jù)庫(kù)參數(shù) Oracle配置參數(shù):xml中配置 Mysql配置參數(shù):xml方式配置 第三步:寫一個(gè)工具類JDBCUtils 第四步:連接數(shù)據(jù)庫(kù) commons-dbutils-1.6.jar,jar包大家就到網(wǎng)上搜吧 Oracle配置參數(shù):xml中配置 重點(diǎn)一: Oracle數(shù)據(jù)庫(kù)的JDBC連接分為三種,服務(wù)名

    2024年02月13日
    瀏覽(27)
  • Java連接數(shù)據(jù)庫(kù)(學(xué)生管理系統(tǒng)案例,可以實(shí)現(xiàn)增刪改查)

    Java連接數(shù)據(jù)庫(kù)(學(xué)生管理系統(tǒng)案例,可以實(shí)現(xiàn)增刪改查)

    首先,需要做一個(gè)準(zhǔn)備工作 ——下載jar包,這個(gè)包是用來(lái)支持?jǐn)?shù)據(jù)庫(kù)的連接的 官網(wǎng)的下載鏈接:MySQL :: Download Connector/J 點(diǎn)擊鏈接進(jìn)入頁(yè)面: 選擇畫紅框的下載按鈕。 與此同時(shí),打開(kāi)IDEA開(kāi)發(fā)工具,在當(dāng)前項(xiàng)目目錄下新建一個(gè)lib目錄文件夾用來(lái)存放第三方j(luò)ar包,這樣做方便管

    2024年02月07日
    瀏覽(27)
  • pycharm社區(qū)版使用SQLite連接數(shù)據(jù)庫(kù),并實(shí)現(xiàn)數(shù)據(jù)的增刪改查

    pycharm社區(qū)版使用SQLite連接數(shù)據(jù)庫(kù),并實(shí)現(xiàn)數(shù)據(jù)的增刪改查

    社區(qū)版找不到數(shù)據(jù)庫(kù),需要先安裝Database Navigator插件,之后才能通過(guò)sqlite3連接數(shù)據(jù)庫(kù)。 ①文件 — ②設(shè)置 — ③插件 — ④Marketplace搜索database — ⑤安裝Database Navigator — ⑥應(yīng)用確定 安裝之后就可以在頁(yè)面左側(cè)邊欄找到DB Browser,也可以拖動(dòng)移動(dòng)到頁(yè)面右側(cè)。找不到的可以在視

    2024年01月17日
    瀏覽(18)
  • 【PHP系統(tǒng)學(xué)習(xí)】——Laravel框架數(shù)據(jù)庫(kù)的連接以及數(shù)據(jù)庫(kù)的增刪改查的詳細(xì)教程

    【PHP系統(tǒng)學(xué)習(xí)】——Laravel框架數(shù)據(jù)庫(kù)的連接以及數(shù)據(jù)庫(kù)的增刪改查的詳細(xì)教程

    ?????個(gè)人主頁(yè) :@開(kāi)發(fā)者-曼億點(diǎn) ????? hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 曼億點(diǎn) 原創(chuàng) ????? 收錄于專欄 :PHP程序開(kāi)發(fā) — ??按照 MVC 的架構(gòu),對(duì)數(shù)據(jù)的操作應(yīng)該放在 Model 中完成,但如果不使用 Model,我們也可以用 laravel框架提供的 D8 類

    2024年04月15日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包