Golang操作数据库
基本概念
连接到数据库
import ( "database/sql" _ "github.com/go-sql-driver/mysql" )
db,err := sql.Open("mysql","user:password@tcp(ip:port)/database")
import ( "database/sql" _ "github.com/go-sql-driver/mysql" "log" ) func main() { db,"user:password@tcp(ip:port)/database") if err != nil { log.Println(err) } //在这里进行一些数据库操作 defer db.Close() }
err = db.Ping() if err != nil { log.Println(err) }
进行数据库操作增删改操作
stmt,err := db.Prepare("insert into user(name,age)values(?,?)") if err != nil { log.Println(err) } rs,err := stmt.Exec("go-test",12) if err != nil { log.Println(err) } //我们可以获得插入的id id,err := rs.LastInsertId() //可以获得影响行数 affect,err := rs.RowsAffected() 查询操作一般的查询var name string var age int rows,err := db.Query("select name,age from user where id = ? ",1) if err != nil { fmt.Println(err) } defer rows.Close() for rows.Next() { err := rows.Scan(&name,&age) if err != nil { fmt.Println(err) } } err = rows.Err() if err != nil { fmt.Println(err) } fmt.Println("name:",url,"age:",description)
查询单条记录
var name string err = db.QueryRow("select name from user where id = ?",222).Scan(&name)
处理空值
var name NullString err := db.QueryRow("SELECT name FROM names WHERE id = ?",id).Scan(&name) ... if name.Valid { // use name.String } else { // value is NULL }
var col1,col2 []byte for rows.Next() { // Scan the value to []byte err = rows.Scan(&col1,&col2) if err != nil { panic(err.Error()) // Just for example purpose. You should use proper error handling instead of panic } // Use the string value fmt.Println(string(col1),string(col2)) }
package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) func main() { // Open database connection db,"user:password@/dbname") if err != nil { panic(err.Error()) // Just for example purpose. You should use proper error handling instead of panic } defer db.Close() // Execute the query rows,err := db.Query("SELECT * FROM table") if err != nil { panic(err.Error()) // proper error handling instead of panic in your app } // Get column names columns,err := rows.Columns() if err != nil { panic(err.Error()) // proper error handling instead of panic in your app } // Make a slice for the values values := make([]sql.RawBytes,len(columns)) // rows.Scan wants '[]interface{}' as an argument,so we must copy the // references into such a slice // See http://code.google.com/p/go-wiki/wiki/InterfaceSlice for details scanArgs := make([]interface{},len(values)) for i := range values { scanArgs[i] = &values[i] } // Fetch rows for rows.Next() { // get RawBytes from data err = rows.Scan(scanArgs...) if err != nil { panic(err.Error()) // proper error handling instead of panic in your app } // Now do something with the data. // Here we just print each column as a string. var value string for i,col := range values { // Here we can check if the value is nil (NULL value) if col == nil { value = "NULL" } else { value = string(col) } fmt.Println(columns[i],": ",value) } fmt.Println("-----------------------------------") } if err = rows.Err(); err != nil { panic(err.Error()) // proper error handling instead of panic in your app } } 事务
tx := db.Begin() tx.Rollback() tx.Commit()
The Connection Pool
db.SetMaxIdleConns(n) db.SetMaxOpenConns(n) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |