连接数据库
db, err := sql.Open("mysql", username:password@protocol(address)/dbname?param=value)
第一个参数是驱动器,第二个参数就是数据库信息。
defer db.Close()
断开数据库连接函数。
func Connect() *sql.DB {
var DNS string
DNS = "root:root@tcp(localhost:3306)/db?charset=utf8"
db, err := sql.Open("mysql", DNS)
if err != nil {
fmt.Println(err)
}
return db
}
执行SQL命令
常用的SQL命令请点击这里
golang中,提供了db.Exec()
,
通过这个函数,可以直接用SQL命令来实现想要的操作,返回值是sql.Result
。
_, err := db.Exec("create table if not exists Item(id int primary key auto_increment,name varchar(30),price int);")
例如,上面这段代码就在MySQL中新建了一个表格。
预编译命令
如果需要在表中大量查询某些东西,每个查询中只有where字句
的某些数值不一样。
试想一下,如果使用db.Exec()
,不但涉及大量的数字转字符串的操作,而且代码也很不美观。
这里就需要预编译命令来解决这个问题。
golang中,提供了db.Prepare()
具体用法如下:
pre, _ := db.Prepare("select * from item where id=?;")
将每次改变的值用问号代替,接下来使用pre.Query()
函数。
result, err := pre.Query(num)
这样result
就是在item
表格中,查询id
为num
的结果。
sql.Result的读取
对于从MySQL数据库返回的值,是一个行的集合,提供了reselt.Scan()
函数。
for result.Next() {
result.Scan(&Id)
}
建议Id的类型为sql.Nullint32等类型,方便判断。