原版

import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
"fmt"
) func main() {
//打开数据库
//DSN数据源字符串:用户名:密码@协议(地址:端口)/数据库?参数=参数值
db, err := sql.Open("mysql", "root:@tcp(127.0.0.1:3306)/test?charset=utf8");
if err != nil {
fmt.Println(err);
} //关闭数据库,db会被多个goroutine共享,可以不调用
defer db.Close(); //查询数据,指定字段名,返回sql.Rows结果集
rows, _ := db.Query("select id,name from test");
id := ;
name := "";
for rows.Next() {
rows.Scan(&id, &name);
fmt.Println(id, name);
} //查询数据,取所有字段
rows2, _ := db.Query("select * from test");
//返回所有列
cols, _ := rows2.Columns();
//这里表示一行所有列的值,用[]byte表示
vals := make([][]byte, len(cols));
//这里表示一行填充数据
scans := make([]interface{}, len(cols));
//这里scans引用vals,把数据填充到[]byte里
for k, _ := range vals {
scans[k] = &vals[k];
} i := ;
result := make(map[int]map[string]string);
for rows2.Next() {
//填充数据
rows2.Scan(scans...);
//每行数据
row := make(map[string]string);
//把vals中的数据复制到row中
for k, v := range vals {
key := cols[k];
//这里把[]byte数据转成string
row[key] = string(v);
}
//放入结果集
result[i] = row;
i++;
}
fmt.Println(result); //查询一行数据
rows3 := db.QueryRow("select id,name from test where id = ?", );
rows3.Scan(&id, &name);
fmt.Println(id, name); //插入一行数据
ret, _ := db.Exec("insert into test(id,name) values(null, '444')");
//获取插入ID
ins_id, _ := ret.LastInsertId();
fmt.Println(ins_id); //更新数据
ret2, _ := db.Exec("update test set name = '000' where id > ?", );
//获取影响行数
aff_nums, _ := ret2.RowsAffected();
fmt.Println(aff_nums); //删除数据
ret3, _ := db.Exec("delete from test where id = ?", );
//获取影响行数
del_nums, _ := ret3.RowsAffected();
fmt.Println(del_nums); //预处理语句
stmt, _ := db.Prepare("select id,name from test where id = ?");
rows4, _ := stmt.Query();
//注意这里需要Next()下,不然下面取不到值
rows4.Next();
rows4.Scan(&id, &name);
fmt.Println(id, name); stmt2, _ := db.Prepare("insert into test values(null, ?, ?)");
rows5, _ := stmt2.Exec("", );
fmt.Println(rows5.RowsAffected()); //事务处理
tx, _ := db.Begin(); ret4, _ := tx.Exec("update test set price = price + 100 where id = ?", );
ret5, _ := tx.Exec("update test set price = price - 100 where id = ?", );
upd_nums1, _ := ret4.RowsAffected();
upd_nums2, _ := ret5.RowsAffected(); if upd_nums1 > && upd_nums2 > {
//只有两条更新同时成功,那么才提交
tx.Commit();
} else {
//否则回滚
tx.Rollback();
}
}

gorm 中文文档

package TDb

import (
"log" "github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/sqlite"
) //声明并初始化变量
var (
err error //错误
TDb *gorm.DB //thcon Db 传输数据库
) func init() {
//连接数据库
TDb, err = gorm.Open("sqlite3", "E:/test_data/thcon/apppath/data/ts_db/gorm.db")
if err != nil {
log.Println(err)
} } type Login struct {
Id int `gorm:"primary_key"`
Username string `gorm:"size:20;NOT NULL;unique"`
Password string `gorm:"size:20"`
} func NewLogin(username, password string) *Login {
return &Login{
Username: username,
Password: password,
}
}
func Create() {
flag := TDb.HasTable("logins")
if flag {
fmt.Println("logins 表存在")
} else {
fmt.Println("logins 表不存在")
TDb.CreateTable(&Login{})
}
//TDb.Set("gorm:table_options", "ENGINE=InnoDB").CreateTable(&Login{})
//TDb.Set("gorm:table_options", "ENGINE=InnoDB").CreateTable(&Login{})
//TDb.CreateTable(&Login{})
//TDb.Create(&Login{Id: 1, Username: "L1212", Password: "1000"})
TDb.Create(&Login{Username: "L1212", Password: ""})
TDb.Create(&Login{Username: "oy", Password: ""}) } func (l *Login) WriteLogin() {
TDb.Create(&l)
} func (l *Login) Query() int {
flag := TDb.Where(&l).Find(&Login{}).RecordNotFound()
if flag {
return
} else {
return
} } func QueryAll() (result []Login) {
row, err := TDb.Table("logins").Rows()
if err != nil {
fmt.Println(err)
} else {
var login *Login
for row.Next() {
login = &Login{}
//fmt.Println(&login)
row.Scan(&login.Id, &login.Username, &login.Password)
result = append(result, *login)
}
}
fmt.Println(result)
return
} func (l *Login) Alter1() {
//Db.Where("username", l.Username).Model(&Login{}).Update(&l)
//TDb.Where("username", l.Username).Model(&Login{}).Update(&l)
//TDb.Where("username", l.Username).Model("logins").Update(&l)
//TDb.Model("logins").Update(&l) err := TDb.Model(&Login{}).Where("username=?", l.Username).Updates(l)
fmt.Println(err) } func (l *Login) Alter2() {
err := TDb.Table("logins").Where("username=?", l.Username).Updates(l)
fmt.Println(err)
}

数据库操作-go的更多相关文章

  1. 如何在高并发环境下设计出无锁的数据库操作(Java版本)

    一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...

  2. 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~

    最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...

  3. MySQL 系列(二) 你不知道的数据库操作

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 本章内容: 查看\创建\使用\删除 数据库 用户管理及授权实战 局域网 ...

  4. ABP创建数据库操作步骤

    1 ABP创建数据库操作步骤 1.1 SimpleTaskSystem.Web项目中的Web.config文件修改数据库配置. <add name="Default" pro ...

  5. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. django数据库操作和中间件

    数据库配置 django的数据库相关表配置在models.py文件中,数据库的连接相关信息配置在settings.py中 models.py相关相关参数配置 from django.db import ...

  7. [Android Pro] 完美Android Cursor使用例子(Android数据库操作)

    reference to : http://www.ablanxue.com/prone_10575_1.html 完美 Android Cursor使用例子(Android数据库操作),Androi ...

  8. phpcms v9 中的数据库操作函数

    1.查询 $this->select($where = '', $data = '*', $limit = '', $order = '', $group = '', $key='')   返回 ...

  9. Android打造属于自己的数据库操作类。

    1.概述 开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要 ...

  10. python之数据库操作

    数据库操作 Python 操作 Mysql 模块的安装 1 2 3 4 5 linux:     yum install MySQL-python   window:     http://files ...

随机推荐

  1. Mysql学习---基础操作学习2

    基本数据类型 Mysql基本数据类型:二进制,数值[整数,小数].字符串[定长,变长]. 二进制数据.时间和枚举集合 bit[(M)] 二进制位(101001),m表示二进制位的长度(1-64),默认 ...

  2. for循环里面的break;和continue;语句

    for循环里面的break;和continue;语句 break语句 哇,我已经找到我要的答案了,我不需要进行更多的循环了! 比如,寻找第一个能被5整除的数: for循环中,如果遇见了break语句, ...

  3. 全国大学生数据挖掘邀请赛中的NDCG

    转:http://www.zhizhihu.com/html/y2011/2794.html 评价标准 性能良好的评分模型,应该能够给予那些引起msg或click的候选会员更高的评分(排序靠前),从而 ...

  4. spring定时器quartz版本问题

    如果quartz的版本是1.8.5启动会报错,修改给2.0版本以上即可 <dependency> <groupId>org.quartz-scheduler</group ...

  5. 人类主动探索地外文明(METI)活动正在进行中

                  请看下图:            这是位于俄罗斯克里米亚境内的行星际深空通讯雷达(口径70米,2-300GHz,建造于1978年)的外观.借助该雷达的强大发射功率,有关国际 ...

  6. Impala 加载Hive的UDF

    Impala的UDF有两种: Native Imapal UDF:使用C++开发的,性能极高,官方性能测试比第二种高出将近10倍 Hive的UDF:是Hive中的UDF,直接加载到Impala中,优点 ...

  7. PHP----练习------球队列表

    题目:页面上有一个ul球队列表当鼠标移动到某个li上的时候改行背景颜色变红,当点击某个li的时候,让该li之前的所有li背景色变黄,之后的所有li背景色变蓝.自己不变色. <!DOCTYPE h ...

  8. 【Node.js】Jade视图模板的使用

    跟MVC里面的Rezor做差不多的事儿,但是比Rezor弱了一些,比较不喜欢CoffeeScript.Jade这种靠缩进来维系层级结构的做法,就好比接受不了c#中if下面只有一句很长的代码,但是却不加 ...

  9. 【Linux学习笔记】常用命令速记

    创建文件夹:mkdir 文件夹名 删除文件夹 rmdir 文件夹名 进入文件夹 cd 文件夹名 给某个目录所有用户配置读写权限:chmod 777 -R 文件夹名(-R会递归里面所有的子文件夹并给和父 ...

  10. Reading Notes : 180212 冯诺依曼计算机

    读书<计算机组成原理>,百度百科 现在大部分接触过计算机的人,都会知道冯诺依曼计算机,但是这个概念是怎么来的呢?本节我们就通过聊一下计算机的存储程序控制,来认识”冯诺依曼”. 存储程序控制 ...