数据库访问需要用到标准库database/sql和mysql的驱动"github.com/go-sql-driver/mysql"。这两个包都需要引用。mysql的驱动因为只是需要它的init()初始化,所以需要采用下划线的方式。
import (
"database/sql"
_"github.com/go-sql-driver/mysql"
"fmt"
"log"
)
在访问数据库前,我们先在MySql里建好表并预先插入一些数据以便测试程序。请在Mysql里执行下面的SQL脚本。
-- ----------------------------
-- Table structure for announcement
-- ----------------------------
DROP TABLE IF EXISTS `announcement`;
CREATE TABLE `announcement` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`imgUrl` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL,
`detailUrl` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL,
`createDate` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
`state` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- ----------------------------
-- Records of announcement
-- ----------------------------
INSERT INTO `announcement` VALUES ('1', '/visitshop/img/ann/ann1.jpg', null, '2016-07-20', '0');
INSERT INTO `announcement` VALUES ('2', '/visitshop//img/ann/ann1.jpg', null, '2016-07-20', '0');
INSERT INTO `announcement` VALUES ('3', '/visitshop//img/ann/ann1.jpg', null, '2016-07-20', '0');
INSERT INTO `announcement` VALUES ('4', '/visitshop//img/ann/ann1.jpg', null, '2016-07-20', '0');
我们将在主函数里调用增删该查函数。先预设这四种操作的函数名
query() //查询
query2() //查询
insert() //插入
update() //修改
remove() //删除
然后分别实现这几个函数。
查询
首先是query()查询函数。
要想访问数据库,首先要打开数据库链接。这就需要用到database/sql Open函数。
db, err := sql.Open("mysql", "root:@/shopvisit")
我们的数据库链接是这个样子的。为了简化操作,我的数据库用户 root 是没有密码的。而正常的数据库链接应该是这个样子的
db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/shopvisit")
这个连接说明数据库用户root的密码是123456,使用tcp协议,数据库ip地址是127.0.0.1,使用3306端口作为通讯端口。当前使用的库名是shopvisit。
当然链接数据库的方式其实是有好几种的
user@unix(/path/to/socket)/dbname?charset=utf8
user:password@tcp(localhost:5555)/dbname?charset=utf8
user:password@/dbname
user:password@tcp([de:ad:be:ef::ca:fe]:80)/dbname
既然有了数据库连接的语句,就要有错误检查。而错误检查会比较频繁的出现,所以写一个函数来直接处理它。
func check(err error) {
if err != nil{
fmt.Println(err)
panic(err)
}
}
这样每当需要对错误进程检查的时候,就执行check(err)。
当db链接数据库正常之后,我们就可以执行sql查询语句了。
rows, err := db.Query("SELECT * FROM shop