go的数据库操作mysql
go get github.com/go-sql-driver/mysql
package main; import (
"database/sql"
_ "github.com/go-sql-driver/mysql" // 包的初始化,执行包中所有的init()方法 具体参见http://blog.csdn.net/wanglei9876/article/details/50475864
"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();
}
}
go的数据库操作mysql的更多相关文章
- python数据库操作 - MySQL入门【转】
python数据库操作 - MySQL入门 python学院 2017-02-05 16:22 PyMySQL是Python中操作MySQL的模块,和之前使用的MySQLdb模块基本功能一致,PyMy ...
- qt 5 数据库操作(mysql)
其实大家都知道,QT5以上的都自带了数据库驱动,所以呢,基本上可以直接使用,于是如果想知道怎么连接数据库,请参考这位大神写的.http://qtdebug.com/DB-AccessMySQL.htm ...
- python数据库操作-mysql数据库
一:连接 1:本地连接 mysql -u用户名 -p密码 2:连接远程服务器 mysql -u用户名 -p密码 -hip地址 -P端口号 线下修改远程服务端上部署的mysql服务器 二:创建数 ...
- 利用IDEA构建springboot应用-数据库操作(Mysql)
Spring-Date-Jpa 定义了一系列对象持久化的标准 例如Hibernate,TopLink等 spring data jpa让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来 ...
- 使用node js 操作 Mysql 数据库
使用node js 操作 Mysql 数据库 http://www.nodejs.org/ //node js 数据库操作 MySQL //使用https://github.com/felixge/n ...
- SQL Server connect to MySQL SQL Server通过LinkServer访问MySQL数据库,并操作mysql数据库代码
SQL Server 中需要访问MySQL的数据,可以通过调用MySQL的ODBC驱动,在SQL Server中添加LinkServer的方式实现. 1.从MySQL网站下载最新的MySQL ODBC ...
- MySQL 系列(二) 你不知道的数据库操作
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 本章内容: 查看\创建\使用\删除 数据库 用户管理及授权实战 局域网 ...
- node.js操作mysql数据库之增删改查
安装mysql模块 npm install mysql 数据库准备 mysql server所在的机器IP地址是192.168.0.108,登录账户就用root@123456 在mysql中创建tes ...
- PHP操作MySQL数据库5个步骤
PHP操作MySQL数据库一般可分为5个步骤:1.连接MySQL数据库服务器:2.选择数据库:3.执行SQL语句:4.关闭结果集:5断开与MySQL数据库服务器连接. 1.用mysql_connect ...
随机推荐
- 权限管理demo-Http请求前后监听工具
工具作用: 1. 输出每次请求的参数 2. 接口的请求时间 package com.mmall.common; import com.mmall.util.JsonMapper; import lom ...
- QTP 学习 - 对象库
QTP的关键字视图和专家视图 1.Keyword view(关键字视图) 在录制脚本的过程中,用户执行的每一个步骤,在关键字视图中记录为一行. 关键字视图直观有效,用户可以很清楚的看到被录制对象的录制 ...
- try、catch、finally都有return语句时执行哪个
任何执行try 或者catch中的return语句之前,都会先执行finally语句,如果finally存在的话.如果finally中有return语句,那么程序就return了,所以finally中 ...
- Redux的梳理
学习Redux之前,我了解了它需要去解决什么问题: 用户使用方式复杂 不同身份不同使用方式 多个用户可以协作 与服务器大量交互,或者使用websocket 视图数据从多个来源获取 共享组件状态 组件之 ...
- 31_NavLink组件包装优化
简单理解为自定义一个组件并自带样式 import React, {Component} from 'react' import {Switch, Route, Redirect} from 'reac ...
- 远程桌面 把explorer关掉了
用Ctrl+Alt+End调出远程桌面的任务管理器.然后,运行explorer.exe即可重启该服务.
- ubuntu环境下,ubuntu16.04装机到nvdia显卡驱动安装、cuda8安装、cudnn安装
首先是安装ubuntu16.04 A.制作u盘启动盘(提前准备好.ios文件): 1.安装u盘制作工具unetbootinsudo apt-get install unetbootin2.格式化u盘s ...
- 替换php remi源
检查当前安装的PHP包 yum list installed | grep php 如果有安装的PHP包,先删除他们 这里一定要把上一步列出来的所有php包删除干净 yum remove php.x8 ...
- vue 高阶 provide/inject
1.一般情况使用都是在app.vue配置为: provide () {return {isTest: this}}, 2.所有子组件都可以引用 拿到app.vue里面的所有数据 inject: ['i ...
- jfinal处理完html提交过来的数据,将处理信息返回给html页面。html根据返回值进行相应的处理
1.前台jQuery代码: $.ajax({ url: "/admin/jcsjpz/syxmdy/RemoveSyxm", data: {data: id}, success: ...