开发环境:windows7 64位、编辑器是sublime text3。 直接添上代码了,代码中有注释。 注:须要提早下载github.com/go-sql-driver/mysql,下面的程序才会运行成功。 package mainjava
import ( "database/sql" //这个感受有点相似java中的java.sql.* "fmt" _ "github.com/go-sql-driver/mysql" //这个感受相似于jdbc )mysql
func main() { //主函数,调用不一样的方法 //Insert() //Delete() //Update() //Query() QueryWithParams() //QueryWithParam() }git
//获得数据库的链接,并将链接返回 func Init() (*sql.DB, error) { //返回类型有俩个,第一个是数据库的链接(指针),第二个是错误类型 //获得数据库的链接,"test"表示的是数据库名称 db, err := sql.Open("mysql", "root:dmj2010@tcp(localhost:3306)/test?charset=utf8") if err != nil { //err的值不是nil那么表示打开数据库链接失败 fmt.Println("打开数据库链接失败_" + err.Error()) return nil, err } return db, nil //返回的错误类型是nil,表示成功获得数据库链接 }github
//向数据库中插入数据 func Insert() { //这个函数没有参数,也没有返回值 db, err := Init() //获得数据库链接sql
if err != nil { //if语句的判断语句不用加括号 fmt.Println("获得数据库链接有问题") return } sql := "insert into user(name,age) values(?,?)" stmt, err := db.Prepare(sql) if err != nil { fmt.Println("错误——" + err.Error()) return } defer stmt.Close() //表示当程序退出当前所在的函数(即Insert())时关闭stmt defer db.Close() //表示当程序退出时当前所在的函数(即Insert())时关闭数据库链接db fmt.Println("开始插入数据") stmt.Exec("张三", 20) //设置参数并进行插入数据 stmt.Exec("李四", 45) //设置参数并进行插入数据 stmt.Exec("段幕", 36) //设置参数并进行插入数据 fmt.Println("插入结束")
}数据库
//删除数据 func Delete() { db, err := Init() if err != nil { fmt.Println("获得数据库链接结果失败——" + err.Error()) return } sql := "delete from user where id=?" stmt, err := db.Prepare(sql) if err != nil { fmt.Println("删除失败——" + err.Error()) return } defer stmt.Close() defer db.Close()windows
stmt.Exec(1) //设置参数,即id的值为1 stmt.Exec(2) //设置参数,即id的值为2
}tcp
//更新数据 func Update() { db, err := Init() if err != nil { fmt.Println("获得数据库链接结果失败——" + err.Error()) return } sql := "update user set name=?,age=? where id=?" stmt, err := db.Prepare(sql) if err != nil { fmt.Println("更新失败——" + err.Error()) return } defer stmt.Close() defer db.Close()编辑器
stmt.Exec("木婉清", 123, 3) stmt.Exec("曾小邪", 18, 4) stmt.Exec("其二", 23, 5)
}函数
//查询数据 func Query() { db, err := Init() if err != nil { fmt.Println("获得数据库链接结果失败——" + err.Error()) return }
rows, err := db.Query("select * from user") if err != nil { fmt.Println("查询失败——" + err.Error()) return } for rows.Next() { //rows.Next()返回的是bool值 var id int //声明id为int型 var name string //声明name为string型 var age int //声明age为int型 err := rows.Scan(&id, &name, &age) if err != nil { fmt.Println("rows.Scan失败!——" + err.Error()) return } //if //fmt.Printf(....) 这个有点相似C中的printf(...) fmt.Printf("id:%d name:%s age:%d \n", id, name, age) //%d表示显示整形数值 %s表示显示字符串 } //for defer rows.Close() defer db.Close()
}
//查询数据,有参数设置&&返回值有多行 func QueryWithParams() { db, err := Init() if err != nil { fmt.Println("获得数据库链接结果失败——" + err.Error()) return }
rows, err := db.Query("select * from user where age=?", 20) if err != nil { fmt.Println("查询失败——" + err.Error()) return } for rows.Next() { //rows.Next()返回的是bool值 var id int var name string var age int err := rows.Scan(&id, &name, &age) if err != nil { fmt.Println("rows.Scan失败!——" + err.Error()) return } //if //fmt.Printf(....) 这个有点相似C中的printf(...) fmt.Printf("id:%d name:%s age:%d \n", id, name, age) //%d表示显示整形数值 %s表示显示字符串 } //for defer rows.Close() defer db.Close()
}
//查询数据,有参数设置&&返回值最多只有一行 func QueryWithParam() { db, err := Init() if err != nil { fmt.Println("获得数据库链接结果失败——" + err.Error()) return }
var id int var name string var age int row := db.QueryRow("select * from user where id=?", 3) err = row.Scan(&id, &name, &age) if err != nil { fmt.Println("查询失败——" + err.Error()) return } //fmt.Printf(....) 这个有点相似C中的printf(...) fmt.Printf("id:%d name:%s age:%d \n", id, name, age) //%d表示显示整形数值 %s表示显示字符串 defer db.Close()
}