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

网站集约化建设讲话稿中国建设银行网站暑假工报名

网站集约化建设讲话稿,中国建设银行网站暑假工报名,技术支持 沧州网站建设,电器网站建设规划书【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】05 GO 操作 达梦 数据库 【REST2SQL】06 GO 跨包接口重构代码 MySQL是一个关系型数据库管理系统#xf…【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】05 GO 操作 达梦 数据库 【REST2SQL】06 GO 跨包接口重构代码 MySQL是一个关系型数据库管理系统由瑞典MySQL AB 公司开发属于 Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一在 WEB 应用方面MySQL是最好的RDBMS (Relational Database Management System关系数据库管理系统)应用软件之一。 MySQL是一种关系型数据库管理系统关系数据库将数据保存在不同的表中而不是将所有数据放在一个大仓库内这样就增加了速度并提高了灵活性。 MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策分为社区版和商业版由于其体积小、速度快、总体拥有成本低尤其是开放源码这一特点一般中小型和大型网站的开发都选择 MySQL作为网站数据库。 1 准备工作 我的操作环境 操作系统Win10 x64 数据库 Ver 8.0.35 for Win64 on x86_64 (MySQL Community Server - GPL) go:1.21.5 LiteIDE : X38.3 1.1 安装Mysql数据 登录 Mysql 官网有Mysql社区版可以下载官网下载显示的是32位实际上安装包里也包括64位的下载成功后安装配置等这里省略5217字我安装后就是64位的自己脑补。 创建测试表 guci 导入部分测试数据 1.2 Mysql go驱动安装 第三方驱动下载。 go get -u github.com/go-sql-driver/mysql //其中包含一个依赖库 go get -u filippo.io/edwards25519众所周知的原因可能同步失败自己想办法翻墙或代理等一系列操作。 我这里偶尔能登录github.com网站我从网站上手动下载下来加到开发环境中的src 2 新建一个gomysql的项目 新建一下gomysql的项目用来测试go操作mysql数据库。 2.1 go连接Mysql数据库 1 引入相关包 import (database/sqldatabase/sql/driver_ github.com/go-sql-driver/mysql2 声明连接字符串 var ConnString string mysql://blma:5217tcp(127.0.0.1:3306)/blma3 连接数据库 // 连接Mysql数据库 func connDB(connStr string) *sql.DB {end : strings.Index(connStr, ://)if end 0 {log.Println(连接字符串设置有误。)panic(nil)}driverName : connStr[:end] // dmconnstring : connStr[end3:]db, err : sql.Open(driverName, connstring)dieOnError(Cant open the driver:, err)if err db.Ping(); err ! nil {fmt.Println(不能连接mysql数据库, err)return nil}// fmt.Printf(connect to \%s\ succeed.\n, connStr)return db }2.2 实现CRUD CUD比较简单都执行execSQL操作只是sql语句不同。 代码如下 /* 往表插入数据 */ func insertData(insertSql string) string {result, _ : execSQL(insertSql)rows, err : result.RowsAffected()dieOnError(Cant insert, err)ret : map[string]int{Insert rowsAffected: int(rows),}jsonBytes, err : json.Marshal(ret)dieOnError(map 转 json失败, err)return string(jsonBytes) }/* 删除表数据 */ func deleteData(deleteSql string) string {result, _ : execSQL(deleteSql)rows, err : result.RowsAffected()dieOnError(Cant delete, err)ret : map[string]int{Delete rowsAffected: int(rows),}jsonBytes, err : json.Marshal(ret)dieOnError(map 转 json失败, err)return string(jsonBytes) }/* 修改表数据 */ func updateData(updateSql string) string {result, _ : execSQL(updateSql)rows, err : result.RowsAffected()dieOnError(Cant update, err)ret : map[string]int{Update rowsAffected: int(rows),}jsonBytes, err : json.Marshal(ret)dieOnError(map 转 json失败, err)return string(jsonBytes)// var sql // result, err : db.Exec(sql)// if err ! nil {// return err// }// affectedRows, _ : result.RowsAffected()// fmt.Println(updateTable succeed Affected rows:, affectedRows)// return nil }// 执行SQL execute stmt (INSERT, UPDATE, DELETE, DML, PLSQL) and return driver.Result object func execSQL(sqls string) (result driver.Result, err error) {//连接数据库DB : connDB(ConnString)//延迟关闭连接defer DB.Close()statement, err : DB.Prepare(sqls)if err ! nil {fmt.Println(prepare statement failed:, err.Error())}defer statement.Close()//执行SQL execute stmt (INSERT, UPDATE, DELETE, DML) and return driver.Result objectresult, err statement.Exec()if err ! nil {fmt.Println(Exec failed:, err.Error())}dieOnError(Cant execSql() , err)return result, err }2.3 动态查询有点费劲 没仔细研究Mysql的驱动还是用达梦数据库的思路。 总体思路是先查询获取 *sql.Rows对象从这里通过rows.Columns和 rows. ColumnTypes()再获取列名切片和列类型信息第三步把列名和数据库数据类型组合在一个map[string]string里第四步初始化列值接收变量第五步 rows.Next() 逐行遍历返回结果集并根据数据库类型目前只匹配的VARCHER2 和 NUMBER遇到其它类型再匹配转换为Go的数据类型组成一个dataset数据集第六步序列化并转json返回查询结果。 代码如下 /* 查询表数据 */ func selectData(sqlSelect string) string {// 连接数据库DB : connDB(ConnString)//延迟关闭连接defer DB.Close()// 准备查询语句statement, err : DB.Prepare(sqlSelect)if err ! nil {fmt.Println(prepare statement failed:, err.Error())return }defer statement.Close() // 1查询rows, err : statement.Query()if err ! nil {fmt.Println(query failed:, err.Error())}// 2查询的列名称切片columns, err : rows.Columns()if err ! nil {fmt.Println(err.Error())return }//fmt.Println(columns)// 3数据库列类型cType, err : rows.ColumnTypes()if err ! nil {log.Fatal(err)}//fmt.Println(cType[0].Name(), cType[0].DatabaseTypeName())// 4列名类型mapcoltyp : colType(cType)// 5初始化列值接收变量row : make([]sql.RawBytes, len(columns))scanArgs : make([]interface{}, len(row))for i : range row {scanArgs[i] row[i]}// 查询结果数据集var dataset []map[string]interface{} //元素为map的切片for rows.Next() {err : rows.Scan(scanArgs...)if err ! nil {panic(err.Error())}// rowvar row1 map[string]interface{} make(map[string]interface{})for pos, col : range row {//fmt.Println(columns[pos], :, string(col))colname : columns[pos]svalue : string(col)//数据类型处理value : typeConv(colname, svalue, coltyp)row1[colname] value}//fmt.Println(row1:, row1)dataset append(dataset, row1)//fmt.Println()}if err ! io.EOF {dieOnError(Cant Next, err)}//切片转jsonjsonBytes, err : json.Marshal(dataset)dieOnError(slice 转 json失败, err)//fmt.Println(string(jsonBytes))return string(jsonBytes) }// 生成列名和类型 map func colType(cType []*sql.ColumnType) map[string]string {var colTyp map[string]string make(map[string]string)for _, col : range cType {colTyp[col.Name()] col.DatabaseTypeName()}//fmt.Println(colTyp)return colTyp }// 字符根据数据库类型转为go数据类型 func typeConv(colname string, svalue string, ct map[string]string) interface{} {var ret interface{}switch ct[colname] {case VARCHAR:ret svaluecase DECIMAL:if len(svalue) 0 {flt, err : strconv.ParseFloat(svalue, 64)if err ! nil {fmt.Println(转换失败, colname, svalue, err)} else {ret flt}} else { //空串处理ret nil}default:ret svalue}return ret }3 全部代码及运行结果截图 全部代码 /*该例程实现了Mysql数据库插入数据修改数据删除数据数据查询等基本操作。*/ package main// 引入相关包 import (database/sqldatabase/sql/driverencoding/jsonfmtiologstrconvstrings_ github.com/go-sql-driver/mysql )var ConnString string mysql://blma:5217tcp(127.0.0.1:3306)/blma// var ConnString string config.Conf.ConnStringfunc main() {fmt.Println(\ngo 操作mysql数据库 demo)var (sqls string //sql语句result string //sql执行后返回的结果)//显示版本号showMysqlVersion()// // insert 插入一行数据sqls INSERT INTO kezz(p_id,s_dm,s_mc,n_zzxj) VALUES(-101,125217,白龙马,5217);result insertData(sqls)fmt.Println(result)// update 更新数据sqls UPDATE kezz SET n_zzxj 111 WHERE p_id -100result updateData(sqls)fmt.Println(result)// delete 删除数据sqls delete from kezz where p_id -109result deleteData(sqls)fmt.Println(result)// select 查询数据sqls select p_id,s_dm,s_mc,n_zzxj from kezz limit 5 result selectData(sqls)fmt.Println(result)}func showMysqlVersion() {//连接数据库db : connDB(ConnString)var version stringerr2 : db.QueryRow(SELECT VERSION()).Scan(version)if err2 ! nil {log.Fatal(err2)}fmt.Println(Mysql:, version) }// 连接Mysql数据库 func connDB(connStr string) *sql.DB {end : strings.Index(connStr, ://)if end 0 {log.Println(连接字符串设置有误。)panic(nil)}driverName : connStr[:end] // dmconnstring : connStr[end3:]db, err : sql.Open(driverName, connstring)dieOnError(Cant open the driver:, err)if err db.Ping(); err ! nil {fmt.Println(不能连接mysql数据库, err)return nil}// fmt.Printf(connect to \%s\ succeed.\n, connStr)return db }// 发生错误退出1 func dieOnError(msg string, err error) {if err ! nil {log.Println(msg, err)//os.Exit(1)} }/* 往表插入数据 */ func insertData(insertSql string) string {result, _ : execSQL(insertSql)rows, err : result.RowsAffected()dieOnError(Cant insert, err)ret : map[string]int{Insert rowsAffected: int(rows),}jsonBytes, err : json.Marshal(ret)dieOnError(map 转 json失败, err)return string(jsonBytes) }/* 删除表数据 */ func deleteData(deleteSql string) string {result, _ : execSQL(deleteSql)rows, err : result.RowsAffected()dieOnError(Cant delete, err)ret : map[string]int{Delete rowsAffected: int(rows),}jsonBytes, err : json.Marshal(ret)dieOnError(map 转 json失败, err)return string(jsonBytes) }/* 修改表数据 */ func updateData(updateSql string) string {result, _ : execSQL(updateSql)rows, err : result.RowsAffected()dieOnError(Cant update, err)ret : map[string]int{Update rowsAffected: int(rows),}jsonBytes, err : json.Marshal(ret)dieOnError(map 转 json失败, err)return string(jsonBytes) }// 执行SQL execute stmt (INSERT, UPDATE, DELETE, DML, PLSQL) and return driver.Result object func execSQL(sqls string) (result driver.Result, err error) {//连接数据库db : connDB(ConnString)//延迟关闭连接defer db.Close()statement, err : db.Prepare(sqls)if err ! nil {fmt.Println(prepare statement failed:, err.Error())}defer statement.Close()//执行SQL execute stmt (INSERT, UPDATE, DELETE, DML) and return driver.Result objectresult, err statement.Exec()if err ! nil {fmt.Println(Exec failed:, err.Error())}dieOnError(Cant execSql() , err)return result, err }/* 查询表数据 */ func selectData(sqlSelect string) string {// 连接数据库db : connDB(ConnString)//延迟关闭连接defer db.Close()// 准备查询语句statement, err : db.Prepare(sqlSelect)if err ! nil {fmt.Println(prepare statement failed:, err.Error())return }defer statement.Close()// 1查询rows, err : statement.Query()if err ! nil {fmt.Println(query failed:, err.Error())}// 2查询的列名称切片columns, err : rows.Columns()if err ! nil {fmt.Println(err.Error())return }//fmt.Println(columns)// 3数据库列类型cType, err : rows.ColumnTypes()if err ! nil {log.Fatal(err)}//fmt.Println(cType[0].Name(), cType[0].DatabaseTypeName())// 4列名类型mapcoltyp : colType(cType)// 5初始化列值接收变量row : make([]sql.RawBytes, len(columns))scanArgs : make([]interface{}, len(row))for i : range row {scanArgs[i] row[i]}// 查询结果数据集var dataset []map[string]interface{} //元素为map的切片for rows.Next() {err : rows.Scan(scanArgs...)if err ! nil {panic(err.Error())}// rowvar row1 map[string]interface{} make(map[string]interface{})for pos, col : range row {//fmt.Println(columns[pos], :, string(col))colname : columns[pos]svalue : string(col)//数据类型处理value : typeConv(colname, svalue, coltyp)row1[colname] value}//fmt.Println(row1:, row1)dataset append(dataset, row1)//fmt.Println()}if err ! io.EOF {dieOnError(Cant Next, err)}//切片转jsonjsonBytes, err : json.Marshal(dataset)dieOnError(slice 转 json失败, err)//fmt.Println(string(jsonBytes))return string(jsonBytes) }// 生成列名和类型 map func colType(cType []*sql.ColumnType) map[string]string {var colTyp map[string]string make(map[string]string)for _, col : range cType {colTyp[col.Name()] col.DatabaseTypeName()}//fmt.Println(colTyp)return colTyp }// 字符根据数据库类型转为go数据类型 func typeConv(colname string, svalue string, ct map[string]string) interface{} {var ret interface{}switch ct[colname] {case VARCHAR:ret svaluecase DECIMAL:if len(svalue) 0 {flt, err : strconv.ParseFloat(svalue, 64)if err ! nil {fmt.Println(转换失败, colname, svalue, err)} else {ret flt}} else { //空串处理ret nil}default:ret svalue}return ret } 运行结果截图 完
http://www.w-s-a.com/news/976806/

相关文章:

  • 找人做网站内容自己编辑吗修改wordpress登陆界面
  • 登陆建设银行wap网站湖南网站建设磐石网络答疑
  • 58网站怎么做浏览度才高论坛网站怎么做排名
  • wordpress 手机网站支付京东网站建设的经费预算
  • 自己怎么样做游戏网站做海外贸易网站
  • 建立什么样的网站好制作网页网站代码
  • 岳麓区专业的建设网站公司尚一网常德论坛
  • 电商网站建设实训报告360站长平台链接提交
  • 个性化网站建设公司个人网站备案类型
  • 腾讯建站模板上海网站开发有限公司
  • 网站和小程序的区别请问做网站怎么赚钱
  • 网站logo设计免费版在线网站开发建设准备工作
  • wordpress多站点 主题南京做网站好的公司
  • 广州 门户seo到底是做什么的
  • 可以登录国外网站吗如何用家用电脑做网站
  • 吉安建站公司wordpress企业
  • 河北住房和城乡建设厅网站6thinkphp做视频网站
  • 遵义网站制作一般需要多少钱深圳全国网站制作哪个好
  • 公众平台网站价格哪个网站做餐饮推广最好
  • 深圳 公司网站设计重庆的网站设计公司价格
  • 网站开发市场分析餐饮平台app有哪些
  • 制作一个收费网站要多少钱开发网站需要什么技术
  • 网站流量统计平台二手域名做网站不收录
  • 蒙古网站后缀mysql8.0 wordpress
  • 免费建立一个网站互联网推广培训
  • WordPress多站点绑定域名深圳住房建设部官方网站
  • 网站建设公司zgkr上海网页网络技术有限公司
  • wordpress附件扩展格式徐州seo关键词
  • wordpress博客站模板织梦网站 联系方式修改
  • 北京城乡建设厅网站重庆网站建设解决方案