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

摘要:
=零{log.致命}延迟。Close()varusers[]Users=makeforrows。Next(){varuUsersrows.Scanusers=追加}格式。Println}执行结果为:〔{1Mike}{2John}〕同时生成foo.db-2。转到当前目录以连接到MySQL 2。转到连接到MySQL返回顶部2_ 1。MySQL推荐的驱动程序https://github.com/Go-SQL-Driver/MySQL返回顶部2_ 2.MySQL连接的示例代码如下:packagemainimportTypeUsersstruct{UserIdintUnamestring}funcmain(){//db,err:=sql.Opendb,错误:=sql.openifer!以下是我根据下载的oci版本进行的修改。

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

1.Go连接SQLite

1_1.SQLite推荐驱动

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

1_2.SQLite连接示例代码

示例代码如下:

packagemain

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

type Users struct {
    UserId intUname  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)
    forrows.Next() {
        var u Users
        rows.Scan(&u.UserId, &u.Uname)
        users =append(users, u)
    }
    fmt.Println(users)
}

执行结果为:

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

2.Go连接MySQL

2_1.MySQL推荐驱动

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

2_2.MySQL连接示例代码

示例代码如下:

packagemain

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

type Users struct {
    UserId intUname  string
}

func main() {
    //db, err := sql.Open("mysql", "user:password@/dbname")
    db, err := sql.Open("mysql", "root:root@/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_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复制到mingwin下 
	将oci8.pc复制到mingwlibpkg-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:MinGWin; (读者根据自己的目录变换一下)
	PKG_CONFIG_PATH=D:MinGWlibpkg-config(读者根据自己的目录变换一下)
⑥下载源码.
	把https://github.com/wendal/go-oci8源码git到本地(这是go-oci库 也就是连接oracle的驱动)
	go get github.com/wendal/go-oci8
	然后执行测试一下吧

3_2.Oracle连接示例代码

示例代码如下:

packagemain

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

type Users struct {
    UserId intUname  string
}

func main() {
    log.Println("Oracle Driver Connecting....")
    //用户名/密码@实例名 如system/123456@orcl、sys/123456@orcl
    db, err := sql.Open("oci8", "BOOKMAN/password@orcl")
    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{
            forrows.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:05Oracle Driver Connecting....
[{1 Mike} {2 john}]

免责声明:文章转载自《【Go语言】连接数据库SQLite、MySQL、Oracle》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇10.属性网易开源游戏服务器框架-Pomelo实践(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

常用的sql语句(转)

一、简单查询语句 1. 查看表结构 SQL>DESC emp; 2. 查询所有列 SQL>SELECT * FROM emp; 3. 查询指定列 SQL>SELECT empmo, ename, mgr FROM emp; SQL>SELECT DISTINCT mgr FROM emp; 只显示结果不同的项 4. 查询指定行 S...

MySQL性能调优思路

1.MySQL性能调优思路 如果一台服务器出现长时间负载过高 /周期性负载过大,或偶尔卡住如何来处理? 是周期性的变化还是偶尔问题?是服务器整体性能的问题, 还是某单条语句的问题? 具体到单条语句, 这条语句是在等待上花的时间,还是查询上花的时间? 1.1. 监测并观察服务器的状态. 观察服务器状态, 一般用如下2个命令 Show status;...

MySQL-快速入门(8)存储过程、存储函数

1、存储过程 1》创建存储过程:create procedure create procedure sp_name ([in | out | inout]param_name type) [characteristics ...] routine_body characteristics指定存储过程的特性: 1>language sql:说明rou...

CDH搭建Hadoop分布式服务器集群(java新手小白)

1首先对于一个java还白的小白,先理解CDH与Hadoop的关系 一、Hadoop版本选择。 Hadoop大致可分为Apache Hadoop和第三方发行第三方发行版Hadoop,考虑到Hadoop集群部署的高效,集群的稳定性, 以及后期集中的配置管理,业界多使用Cloudera公司的发行版,简称为CDH。 下面是转载的Hadoop社区版本与第三方发行版...

SQL数据库面试题

Database工程师面试 问题描述:为管理岗位业务培训信息,建立3个表:S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄C (C#,CN ) C#,CN 分别代表课程编号、课程名称SC ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩要求实现如下5个处理:1. 使用标准SQ...

java部署ubuntu后中文显示问号问题

1、首先先回忆自身项目的编码格式,即在本地进行编码时使用的编码格式。UTF-82、检测tomcat的设置问题,在web.xml和server中的设置:server.xml中: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443...