原版

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. QT的文件查找

    https://blog.csdn.net/hustyangju/article/details/17784007 http://www.cppblog.com/biao/archive/2011/1 ...

  2. sqlite 用法整理

    转载:http://blog.csdn.net/zhaoweixing1989/article/details/19080593 先纪录到这,以后慢慢整理. 1. 在Android下通过adb she ...

  3. Jsonp实现Ajax跨域Demo

    JSONP 1.一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面.动态网页.web服务.WCF,只要是跨域请求,一律不准: 2.不过我们又发现,Web页面上调用j ...

  4. 薄弱的交互页面之新浪微博到博客的储存型xss漏洞

    首先分享一片博文到微博,然后 在微博评论xss code 最后回到博客点击举报就触发xss了 点击举报 Xss之2 首先还是分享一片博文到微博,然后评论xsscode 回到我的博客个人中心,查看评论 ...

  5. hdu-2879 hehe---积性函数

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2879 题目大意: he[n]为小于n且满足x^2 = x (mod n)的个数 hehe[n] =  ...

  6. 智能机器人“小昆”的实现(五)MainActivty的实现及项目结束

    好了,一切准备工作都完成了,下面我们就可以真正的编写MainActivity了.在MainActivity中,我们要为ListView设定适配器,并为发送按钮设定点击事件.我们的逻辑就是点击发送按钮, ...

  7. Unix I/O--输入/输出(I/O) : 是指主存和外部设备(如磁盘,终端,网络)之间拷贝数据过程

    输入/输出(I/O) : 是指主存和外部设备(如磁盘,终端,网络)之间拷贝数据过程 https://www.bbsmax.com/A/o75N88ZxzW/ 10.1 Unix I/O 一个Unix ...

  8. PHP-------- JQUERY方式

     JQUERY方式 1.根据ID取元素,Jquery对象  var div = $("#one"); 2.根据class取  var div = $(".test&quo ...

  9. EOJ Monthly 2019.1 唐纳德先生与这真的是签到题吗 【数学+暴力+multiset】

    传送门:https://acm.ecnu.edu.cn/contest/126/ C. 唐纳德先生与这真的是签到题吗 单测试点时限: 6.0 秒 内存限制: 1024 MB 唐纳德先生在出月赛的过程中 ...

  10. .ne 基础(2)

    类是一种抽象 抽象的概念,具体的实例. 现实是先有对象,再抽象成类,再用类来创建实例 构造方法 (1)如果写好了类,不写构造方法,系统会默认一个无参的构造方法 (2) 如果手动添加了一个 构造方法,就 ...