当前位置: 首页 > news >正文

苏州网站开发网站开发费用企业邮箱格式怎么注册

苏州网站开发网站开发费用,企业邮箱格式怎么注册,网站服务器过期了怎么办,国际化网站建设关于标准库database/sqldatabase/sql是golang的标准库之一#xff0c;它提供了一系列接口方法#xff0c;用于访问关系数据库。它并不会提供数据库特有的方法#xff0c;那些特有的方法交给数据库驱动去实现。database/sql库提供了一些type。这些类型对掌握它的用法非常重要…关于标准库database/sqldatabase/sql是golang的标准库之一它提供了一系列接口方法用于访问关系数据库。它并不会提供数据库特有的方法那些特有的方法交给数据库驱动去实现。database/sql库提供了一些type。这些类型对掌握它的用法非常重要。DB数据库对象。 sql.DB类型代表了数据库。和其他语言不一样它并是数据库连接。golang中的连接来自内部实现的连接池连接的建立是惰性的当你需要连接的时候连接池会自动帮你创建。通常你不需要操作连接池。一切都有go来帮你完成。Results结果集。数据库查询的时候都会有结果集。sql.Rows类型表示查询返回多行数据的结果集。sql.Row则表示单行查询结果的结果集。当然对于插入更新和删除返回的结果集类型为sql.Result。Statements语句。sql.Stmt类型表示sql查询语句例如DDLDML等类似的sql语句。可以把当成prepare语句构造查询也可以直接使用sql.DB的函数对其操作。而通常工作中我们可能更多的是用https://github.com/jmoiron/sqlx包来操作数据库sqlx是基于标准库database/sql的扩展并且我们可以通过sqlx操作各种类型的数据如和其他语言不通的是查询数据库的时候需要创建一个连接对于go而言则是需要创建一个数据库对象连接将会在查询需要的时候由连接池创建并维护使用sql.Open函数创建数据库对象第一个参数是数据库驱动名第二个参数是一个连接字符串关于数据库的增删查改增加数据关于增加数据几个小知识点关于插入数据的时候占位符是通过问号插入数据的后可以通过LastInsertId可以获取插入数据的id通过RowsAffected可以获取受影响的行数执行sql语句是通过exec一个简单的使用例子package mainimport (github.com/jmoiron/sqlx_github.com/go-sql-driver/mysqlfmt)func main() {Db,err:sqlx.Open(mysql,root:123456tcp(192.168.14.7:3306)/godb)if err !nil{fmt.Println(connect to mysql failed,,err)return}defer Db.Close()fmt.Println(connect to mysql success)//执行sql语句切记这里的占位符是result,err : Db.Exec(INSERT INTO user_info(username,sex,email)VALUES (?,?,?),user01,男,8989qq.com)if err !nil{fmt.Println(insert failed,,err)}//通过LastInsertId可以获取插入数据的iduserId,err:result.LastInsertId()//通过RowsAffected可以获取受影响的行数rowCount,err:result.RowsAffected()fmt.Println(user_id:,userId)fmt.Println(rowCount:,rowCount)}通过Exec方法插入数据返回的结果是一个sql.Result类型查询数据下面是一个查询的例子代码//执行查询操作rows,err : Db.Query(SELECT email FROM user_info WHERE user_id5)if err !nil{fmt.Println(select db failed,err:,err)return}// 这里获取的rows是从数据库查的满足user_id5的所有行的email信息rows.Next(),用于循环获取所有for rows.Next(){var s stringerr rows.Scan(s)if err !nil{fmt.Println(err)return}fmt.Println(s)}rows.Close()使用了Query方法执行select查询语句返回的是一个sql.Rows类型的结果集迭代后者的Next方法然后使用Scan方法给变量s赋值以便取出结果。最后再把结果集关闭(释放连接)。同样的我们还可以通过Exec方式执行查询语句但是因为Exec返回的是一个sql.Result类型从官网这里https://golang.google.cn/pkg/database/sql/#typeResult我们可以直接这个接口里只有两个方法LastInsertId()RowsAffected()我们还可以通过Db.Get()方法获取查询的数据,将查询的数据保存到一个结构体中//Get执行查询操作type user_info struct {Username string db:usernameEmail string db:email}var userInfo user_infoerr Db.Get(userInfo,SELECT username,email FROM user_info WHERE user_id5)if err !nil{fmt.Println(err)return}fmt.Println(userInfo)这样获取的一个数据如果我们需要获取多行数据信息还可以通过Db.Select方法获取数据代码例子为var userList []*user_infoerr Db.Select(userList,SELECT username,email FROM user_info WHERE user_id5)if err !nil{fmt.Println(err)return}fmt.Println(userList)for _,v:range userList{fmt.Println(v)}通过Db.Select方法将查询的多行数据保存在一个切片中然后就可以通过循环的方式获取每行数据更新数据下面是一个更新的例子这里是通过Exec的方式执行的//更新数据results,err : Db.Exec(UPDATE user_info SET username? where user_id?,golang,5)if err !nil{fmt.Println(update data fail,err:,err)return}fmt.Println(results.RowsAffected())删除数据下面是一个删除的例子同样是通过Exec的方式执行的//删除数据results,err : Db.Exec(DELETE from user_info where user_id?,5)if err !nil{fmt.Println(delete data fail,err:,err)return}fmt.Println(results.RowsAffected())通过上面的简单例子对golang操作mysql的增删查改有了一个基本的了解下面整理一下重点内容sql.DB当我们调用sqlx.Open()可以获取一个sql.DB对象sql.DB是数据库的抽象切记它不是数据库连接sqlx.Open()只是验证数据库参数并没不创建数据库连接。sql.DB提供了和数据库交互的函数同时也管理维护一个数据库连接池并且对于多gegoroutines也是安全的sql.DB表示是数据库抽象因此你有几个数据库就需要为每一个数据库创建一个sql.DB对象。因为它维护了一个连接池因此不需要频繁的创建和销毁。连接池只用sql.Open函数创建连接池可是此时只是初始化了连接池并没有创建任何连接。连接创建都是惰性的只有当真正使用到连接的时候连接池才会创建连接。连接池很重要它直接影响着你的程序行为。连接池的工作原来却相当简单。当你的函数(例如ExecQuery)调用需要访问底层数据库的时候函数首先会向连接池请求一个连接。如果连接池有空闲的连接则返回给函数。否则连接池将会创建一个新的连接给函数。一旦连接给了函数连接则归属于函数。函数执行完毕后要不把连接所属权归还给连接池要么传递给下一个需要连接的(Rows)对象最后使用完连接的对象也会把连接释放回到连接池。请求连接的函数有几个执行完毕处理连接的方式也不同db.Ping() 调用完毕后会马上把连接返回给连接池。db.Exec() 调用完毕后会马上把连接返回给连接池但是它返回的Result对象还保留这连接的引用当后面的代码需要处理结果集的时候连接将会被重用。db.Query() 调用完毕后会将连接传递给sql.Rows类型当然后者迭代完毕或者显示的调用.Clonse()方法后连接将会被释放回到连接池。db.QueryRow()调用完毕后会将连接传递给sql.Row类型当.Scan()方法调用之后把连接释放回到连接池。db.Begin() 调用完毕后将连接传递给sql.Tx类型对象当.Commit()或.Rollback()方法调用后释放连接。每个连接都是惰性的如何验证sql.Open调用之后sql.DB对象可用通过db.Ping()初始化代码例子package mainimport (github.com/jmoiron/sqlx_github.com/go-sql-driver/mysqlfmt)func main() {Db, err : sqlx.Open(mysql, root:123456tcp(192.168.50.166:3306)/godb)if err !nil {fmt.Println(connect to mysql failed,, err)return}defer Db.Close()fmt.Println(connect to mysql success)errDb.Ping()if err !nil{fmt.Println(err)return}fmt.Println(ping success)}需要知道当调用了ping之后连接池一定会初始化一个数据连接连接失败database/sql 其实帮我们做了很多事情我们不用见擦汗连接失败的情况当我们进行数据库操作的时候如果连接失败database/sql 会帮我们处理它会自动连接2次这个如果查看源码中我们可以看到如下的代码// ExecContext executes a querywithout returning any rows.// The args are for any placeholder parameters in the query.func (db*DB) ExecContext(ctx context.Context, querystring, args ...interface{}) (Result, error) {var res Resultvar err errorfor i : 0; i maxBadConnRetries; i{res, err db.exec(ctx, query, args, cachedOrNewConn)if err !driver.ErrBadConn {break}}if err driver.ErrBadConn {return db.exec(ctx,query, args, alwaysNewConn)}return res, err}上述代码中变量maxBadConnRetries小时如果连接失败尝试的次数默认是2关于连接池配置db.SetMaxIdleConns(n int) 设置连接池中的保持连接的最大连接数。默认也是0表示连接池不会保持释放会连接池中的连接的连接状态即当连接释放回到连接池的时候连接将会被关闭。这会导致连接再连接池中频繁的关闭和创建。db.SetMaxOpenConns(n int) 设置打开数据库的最大连接数。包含正在使用的连接和连接池的连接。如果你的函数调用需要申请一个连接并且连接池已经没有了连接或者连接数达到了最大连接数。此时的函数调用将会被block直到有可用的连接才会返回。设置这个值可以避免并发太高导致连接mysql出现too many connections的错误。该函数的默认设置是0表示无限制。db.SetConnMaxLifetime(d time.Duration) 设置连接可以被使用的最长有效时间如果过期连接将被拒绝
http://www.zqtcl.cn/news/99776/

相关文章:

  • 富源县住房和城乡建设局网站备案信息 网站名
  • 做门窗的网站宁波附近的seo推广
  • 上海网站建设解决方案怎样设计网站
  • 龙华建站公司seo研究中心怎么样
  • 网站的大图标怎么做项目网站
  • 南京网站设计机构wap网站设计方案
  • 建站点怎么做网站wordpress 重写规则
  • 泰州做网站优化服装网站建设方案ppt
  • wordpress怎么设计网站微商城科技
  • 昆山营销型网站建设旅游网页制作模板教程
  • 企业网站开发时间淘客网站开发源代码
  • 传奇世界新开服网站html静态网页模板代码
  • 门户网站app开发网络服务提供者发现未成年通过网络发布
  • 编辑网站在线注册系统行业网站制作
  • 国外建设网站的软件西宁设计网站建设
  • 云服务器网站配置在线设计免费logo
  • 怎么在手机上做企业网站北京大学两学一做网站
  • 社区网站建设方案书服务型网站建设的主题
  • 做淘推广的网站如何制作表白链接
  • 外贸网站代码中国建设银行招聘网站甘肃分行
  • 免费ai设计logo网站西安网站开发外包公司有
  • 2017优秀网站设计欣赏如何做建议的网站
  • 获取网站访问qq怎么做链接
  • 最简单的网站建设中英文自助网站建设
  • vps 做网站品牌网站建设可信大蝌蚪
  • 怎样在百度建网站怎么建设课题网站
  • 广西网站设计欣赏企业网站建设的管理制度
  • 网站建设与管理提纲免费编程教学视频
  • 做效果图的网站有哪些推广网站详细教程
  • 2.0网站线上建设什么意思WordPress怎么设置分类