【Go语言】连接数据库SQLite、MySQL、Oracle

本文目录

  • 1.Go连接SQLite
    • 1_1.SQLite推荐驱动
    • 1_2.SQLite连接示例代码
  • 2.Go连接MySQL
    • 2_1.MySQL推荐驱动
    • 2_2.MySQL连接示例代码
  • 3.Go连接Oracle
    • 3_1.Oracle推荐驱动以及准备事项
    • 3_2.Oracle连接示例代码

说明:go语言连接数据库不像Java那么方便,本文分别介绍了连接三种典型的数据库的驱动以及连接方法:小型,SQLite;中型,MySQL;大型,Oracle.

-1.Go连接SQLite

1.Go连接SQLite

回到顶部

1_1.SQLite推荐驱动

https://github.com/mattn/go-sqlite3

回到顶部

1_2.SQLite连接示例代码

示例代码如下:

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/mattn/go-sqlite3"
    "log"
    "os"
)

type Users struct {
    UserId int
    Uname  string
}

func main() {
    os.Remove("./foo.db")

    db, err := sql.Open("sqlite3", "./foo.db")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    sql := `create table users (userId integer, uname text);`
    db.Exec(sql)
    sql = `insert into users(userId,uname) values(1,‘Mike‘);`
    db.Exec(sql)
    sql = `insert into users(userId,uname) values(2,‘John‘);`
    db.Exec(sql)
    rows, err := db.Query("select * from users")
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()
    var users []Users = make([]Users, 0)
    for rows.Next() {
        var u Users
        rows.Scan(&u.UserId, &u.Uname)
        users = append(users, u)
    }
    fmt.Println(users)
}

执行结果为:

[{1 Mike} {2 John}]
同时在当前目录生成foo.db

-2.Go连接MySQL

2.Go连接MySQL

回到顶部

2_1.MySQL推荐驱动

https://github.com/Go-SQL-Driver/MySQL

回到顶部

2_2.MySQL连接示例代码

示例代码如下:

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

type Users struct {
    UserId int
    Uname  string
}

func main() {
    //db, err := sql.Open("mysql", "user:[email protected]/dbname")
    db, err := sql.Open("mysql", "root:[email protected]/test")
    if err != nil {
        fmt.Println("连接数据库失败")
    }
    defer db.Close()
    var users []Users = make([]Users, 0)
    sqlStr := "select * from users"
    rows, err := db.Query(sqlStr)
    if err != nil {
        fmt.Println(err)
    } else {
        for i := 0; rows.Next(); i++ {
            var u Users
            rows.Scan(&u.UserId, &u.Uname)
            users = append(users, u)
        }
        fmt.Println(users)
    }
}

执行结果为:

[{1 Mike} {2 John}]

-3.Go连接Oracle

3.Go连接Oracle

回到顶部

3_1.Oracle推荐驱动以及准备事项

	本人的数据库相关配置是 版本11.2.0.1.0
	Go版本是1.2
	系统是WIN7旗舰版64位
	按照下面的步骤最终连接上了oracle
①首先是先在机子上安装git(这是必须的吧 作为go开发者)
②下载最新版的OCI尽管我用的是11.2的版本,但是试了n次才返现只有最新的12.1.0.1.0 才管用
	下载地址是http://www.oracle.com/technetwork/cn/database/winx64soft-089540.html
	如果这个地址不好使,可以再baidu是搜Instant Client Downloads for Microsoft Windows (x64)
	需要下载instantclient-basic和instantclient-sdk两个zip文件
	下载后将两个包解压,然后将sdk中的文件sdk文件夹放到instantclient_12_1下,形成instantclient_12_1/sdk目录级
	然后将instantclient_12_1文件夹改名为instantclient_11_2并放到了C盘的跟目录下
③下载MinGW最新版(实际上我用的不是最新的  用的是这个版本x86_64-4.9.0-posix-seh-rt_v3-rev2)
④到https://github.com/wendal/go-oci8下载pkg-config.exe和oci8.pc
	注意先不要把这些源码git到计算机上,只是先下载pkg-config.exe和oci8.pc(在windows目录下)
	下载后进行以下操作
	将pkg-config.exe复制到mingw\bin\下
	将oci8.pc复制到mingw\lib\pkg-config\下(我的pkg-config是新建的因为原来没有)
	注意,oci8.pc 需要根据你下载的 oci进行修改。下面是我根据我下载的oci版本做的修改。
	# Package Information for pkg-config

	prefix=C:/instantclient_11_2
	exec_prefix=C:/instantclient_11_2
	libdir=${exec_prefix}
	includedir=${prefix}/sdk/include/

	Name: OCI
	Description: Oracle database engine
	Version: 11.2
	Libs: -L${libdir} -loci
	Libs.private:
	Cflags: -I${includedir}
⑤修改系统环境变量,
	添加
	PATH=原有PATH;C:\instantclient_11_2;D:\MinGW\bin; (读者根据自己的目录变换一下)
	PKG_CONFIG_PATH=D:\MinGW\lib\pkg-config(读者根据自己的目录变换一下)
⑥下载源码.
	把https://github.com/wendal/go-oci8源码git到本地(这是go-oci库 也就是连接oracle的驱动)
	go get github.com/wendal/go-oci8
	然后执行测试一下吧

回到顶部

3_2.Oracle连接示例代码

示例代码如下:

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/wendal/go-oci8"
    "log"
)

type Users struct {
    UserId int
    Uname  string
}

func main() {
    log.Println("Oracle Driver Connecting....")
    //用户名/密码@实例名 如system/[email protected]、sys/[email protected]
    db, err := sql.Open("oci8", "BOOKMAN/[email protected]")
    if err != nil {
        log.Fatal(err)
        panic("数据库连接失败")
    } else {
        defer db.Close()
        var users []Users = make([]Users, 0)
        rows, err := db.Query("select * from users")
        if err != nil {
            log.Fatal(err)
        } else {
            for rows.Next() {
                var u Users
                rows.Scan(&u.UserId, &u.Uname)
                users = append(users, u)
            }
            fmt.Println(users)
            defer rows.Close()
        }

    }

}

执行过程比mysql和sqlite比起来非常缓慢,结果如下

2014/07/08 01:14:05 Oracle Driver Connecting....
[{1 Mike} {2 john}]

【Go语言】连接数据库SQLite、MySQL、Oracle

时间: 2024-10-05 05:07:12

【Go语言】连接数据库SQLite、MySQL、Oracle的相关文章

springmvc4 mybatis 整合 框架源码 bootstrap html5 mysql oracle sqlsever spring SSM

获取[下载地址]   QQ: 313596790   [免费支持更新] 三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统] A 集成代码生成器 [正反双向(单表.主表.明细表.树形表,开发利器)+快速构建表单; QQ:313596790 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块 B 集成阿里巴巴数据库连

springmvc+mybatis+spring 整合 bootstrap html5 mysql oracle SSM框架源码 SSH maven

获取[下载地址]   QQ: 313596790   [免费支持更新]支持三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体[新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]A 代码生成器(开发利器);      增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid

sql server 导出的datetime结果 CAST(0x00009E0E0095524F AS DateTime) 如何向mysql,oracle等数据库进行转换

在进行sql server向mysql等其他数据进行迁移数据时,会发现使用sql server导出的datetime类型的结果是16进制表示的二进制的结果,类似于:CAST(0x00009E0E0095524F AS DateTime),这样形式的datetime是无法向其他数据库插入的,所以需要将这种表现形式进行转换.搜索了很久,才在在stackoverflow上找到正确的转换方法.在网上看到很多人都这个问题都不知道解决办法,本文采用Java语言根据stackoverflow介绍的原理,进行编

springmvc4 mybatis 整合 框架源码 bootstrap html5 mysql oracle sqlsever spring SSM SSH

获取[下载地址]   QQ: 313596790   [免费支持更新]三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体[新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统] A 集成代码生成器 [正反双向(单表.主表.明细表.树形表,开发利器)+快速构建表单; QQ:313596790freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块B 集成阿里巴巴数据库连接池dr

html5 mysql oracle SSM框架源码 SSH maven

获取[下载地址]   QQ: 313596790   [免费支持更新]支持三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体A 代码生成器(开发利器);      增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Druid在监控.可

JavaEE框架Bootstrap、HTML5、jQuery、SpringMVC、Hibernate mybatis mysql oracle

获取[下载地址]   QQ: 313596790   [免费支持更新]三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体[新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统] A 集成代码生成器(开发利器)+快速构建表单;            QQ:313596790 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块B 集成阿里巴巴数据库连接池druid;  数据

C语言ODBC操作MySQL数据库

 数据库及其编程API来源于不同的背景,开发人员可以从众多的数据库中选择一种,每种数据库都有自己的一套编程API,这就为数据库编程造成了很大的局限性.SQL是标准化数据库编程接口的一种尝试,然而各种数据库所支持的SQL又有所不同. ODBC的设计目的是允许访问多种数据库,ODBC为数据库供应商提供了一致的ODBC驱动程序标准,遵循这个标准开发的数据库驱动程序,都可以被开发人员通过ODBC API透明地访问,而不必关心实际的数据库是什么.在这里,ODBC所做的,就是接收开发人员的数据库操作指令,调

MySQL/Oracle数据库的基础(二)

MySQL/Oracle数据库 Oracle数据库管理系统是管理数据库访问的计算机软件,由Oracle数据库与Oracle实例构成 Oracle数据库:一个相关的操作系统文件集合,这些文件组织在一起,成为一个逻辑整体,即为Oracle数据库.Oracle数据库必须要与内存实例合作,才能对外提供数据管理服务. Oracle实例:位于物理内存里的数据结构,它由操作系统的多个后台进程和一个共享的内存池所组成,共享的内存池可以被进程锁访问. Oracle用它们来管理数据库访问 Oracle实例就是平常所

Python操作SQLite/MySQL/LMDB

1.概述 1.1前言 最近在存储字模图像集的时候,需要学习LMDB,趁此机会复习了SQLite和MySQL的使用,一起整理在此. 1.2环境 使用win7,Python 3.5.2. 2.SQLite 2.1准备 SQLite是一种嵌入式数据库,它的数据库就是一个文件.Python 2.5x以上版本内置了SQLite3,使用时直接import sqlite3即可. 2.2操作流程 概括地讲,操作SQLite的流程是: ·通过sqlite3.open()创建与数据库文件的连接对象connectio