Go實現對MySQL的增刪改查

開發環境: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()

}

相關文章
相關標籤/搜索