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

小说网站开发教程wordpress 显示所有分类

小说网站开发教程,wordpress 显示所有分类,怀柔建设网站公司,wordpress 主题 love【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 信创要求用国产数据库#xff0c;刚好有项目用的达梦#xff0c;研究一下go如何操作达梦数据库 1 准备工作 1.1 安…【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 信创要求用国产数据库刚好有项目用的达梦研究一下go如何操作达梦数据库 1 准备工作 1.1 安装达梦数据 登录 达梦 官网有DM8开发版可以下载我下载的是X86Win64版的DM8开发版。下载成功后安装配置等这里省略5217字自己脑补。 创建测试表 guci 导入部分测试数据 1.2 达梦 go驱动安装 安装达梦后在达梦的安装目录…\dmdbms\drivers\go下有go驱动包dm-go-driver.zip,解压到go开发环境dm目录即可也可以在第三方下载。 达梦的go驱动还有安装如下两个依赖 github.com/golang/snappy v0.0.4 // indirect golang.org/x/text v0.14.0 // indirect众所周知的原因可能同步失败自己想办法翻墙或代理等一系列操作。 2 新建一个godm的项目 新建一下godm的项目用来测试go操作达梦数据库。这次也试试 go mod 2.1 初始化 go mod go mod init godm go mod tidy自动创建了go.mod 和 go.sum //go.mod module godmgo 1.21.5require (github.com/golang/snappy v0.0.4 // indirectgolang.org/x/text v0.14.0 // indirect ) // go.sum github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6ziP7dTV1S2ALU0bI0zXKWiQ golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU2.2 go连接达梦数据库 1 引入相关包 import (database/sqldatabase/sql/driver_ dm2 声明连接字符串 var ConnString string dm://BLMA:dameng5217127.0.0.1:5236/BLMA3 连接数据库 // 连接dm数据库 func connDB(connStr string) *sql.DB {end : strings.Index(connStr, ://)if end 0 {log.Println(连接字符串设置有误。)panic(nil)}driverName : connStr[:end] // dmDB, err : sql.Open(driverName, connStr)dieOnError(Cant open the driver:, err)if err DB.Ping(); err ! nil {return nil}// fmt.Printf(connect to \%s\ succeed.\n, connStr)return DB }2.3 实现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.4 动态查询有点费劲 达梦提供了简单的查询驱动貌似没有提供动态查询相关驱动只好自己动手实现了好在其它数据库也能用上。 总体思路是先查询获取 *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 VARCHAR2:ret svaluecase NUMBER: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 全部代码及运行结果截图 全部代码 /*该例程实现了达梦数据库插入数据修改数据删除数据数据查询等基本操作。*/ package main// 引入相关包 import (database/sqldatabase/sql/driver_ dmencoding/jsonfmtiologstrconvstrings )var ConnString string dm://BLMA:dameng5217127.0.0.1:5236/BLMA// var ConnString string config.Conf.ConnStringfunc main() {fmt.Println(\ngo 操作达梦数据库 dome)var (sqls string //sql语句result string //sql执行后返回的结果)// insert 插入一行数据sqls INSERT INTO guci(p_id,f_zh,f_gp,s_mc) VALUES(-109,bailongma,005217,白龙马);result insertData(sqls)fmt.Println(result)// delete 删除数据sqls delete from guci where p_id -108result deleteData(sqls)fmt.Println(result)// update 更新数据sqls UPDATE guci SET n_sul 400 WHERE p_id -100result updateData(sqls)fmt.Println(result)sqls select p_id,f_zh,f_gp,s_mc,n_sul from guci where rownum 6result selectData(sqls)fmt.Println(result)}// 连接dm数据库 func connDB(connStr string) *sql.DB {end : strings.Index(connStr, ://)if end 0 {log.Println(连接字符串设置有误。)panic(nil)}driverName : connStr[:end] // dmDB, err : sql.Open(driverName, connStr)dieOnError(Cant open the driver:, err)if err DB.Ping(); err ! nil {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)// 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 }/* 查询表数据 */ 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 VARCHAR2:ret svaluecase NUMBER:flt, err : strconv.ParseFloat(svalue, 64)if err ! nil {fmt.Println(转换失败)} else {ret flt}default:ret svalue}return ret } 运行结果截图 完
文章转载自:
http://www.morning.lfdmf.cn.gov.cn.lfdmf.cn
http://www.morning.wmqxt.cn.gov.cn.wmqxt.cn
http://www.morning.zpqlf.cn.gov.cn.zpqlf.cn
http://www.morning.jgncd.cn.gov.cn.jgncd.cn
http://www.morning.nlwrg.cn.gov.cn.nlwrg.cn
http://www.morning.lktjj.cn.gov.cn.lktjj.cn
http://www.morning.wcqkp.cn.gov.cn.wcqkp.cn
http://www.morning.jfqpc.cn.gov.cn.jfqpc.cn
http://www.morning.qrnbs.cn.gov.cn.qrnbs.cn
http://www.morning.rxkq.cn.gov.cn.rxkq.cn
http://www.morning.wgxtz.cn.gov.cn.wgxtz.cn
http://www.morning.wnywk.cn.gov.cn.wnywk.cn
http://www.morning.jqrp.cn.gov.cn.jqrp.cn
http://www.morning.ssjry.cn.gov.cn.ssjry.cn
http://www.morning.bydpr.cn.gov.cn.bydpr.cn
http://www.morning.qnjcx.cn.gov.cn.qnjcx.cn
http://www.morning.wwklf.cn.gov.cn.wwklf.cn
http://www.morning.skbbt.cn.gov.cn.skbbt.cn
http://www.morning.hxxyp.cn.gov.cn.hxxyp.cn
http://www.morning.xhlht.cn.gov.cn.xhlht.cn
http://www.morning.kqhlm.cn.gov.cn.kqhlm.cn
http://www.morning.sfrw.cn.gov.cn.sfrw.cn
http://www.morning.qtqjx.cn.gov.cn.qtqjx.cn
http://www.morning.qsswb.cn.gov.cn.qsswb.cn
http://www.morning.cjmmt.cn.gov.cn.cjmmt.cn
http://www.morning.yzxlkj.com.gov.cn.yzxlkj.com
http://www.morning.rdkqt.cn.gov.cn.rdkqt.cn
http://www.morning.rtlg.cn.gov.cn.rtlg.cn
http://www.morning.ddjp.cn.gov.cn.ddjp.cn
http://www.morning.errnull.com.gov.cn.errnull.com
http://www.morning.xwnnp.cn.gov.cn.xwnnp.cn
http://www.morning.qmmfr.cn.gov.cn.qmmfr.cn
http://www.morning.frnjm.cn.gov.cn.frnjm.cn
http://www.morning.plxhq.cn.gov.cn.plxhq.cn
http://www.morning.qxkcx.cn.gov.cn.qxkcx.cn
http://www.morning.elmtw.cn.gov.cn.elmtw.cn
http://www.morning.bkkgt.cn.gov.cn.bkkgt.cn
http://www.morning.nmkbl.cn.gov.cn.nmkbl.cn
http://www.morning.rqxhp.cn.gov.cn.rqxhp.cn
http://www.morning.zqzzn.cn.gov.cn.zqzzn.cn
http://www.morning.prgrh.cn.gov.cn.prgrh.cn
http://www.morning.lxcwh.cn.gov.cn.lxcwh.cn
http://www.morning.kqcqr.cn.gov.cn.kqcqr.cn
http://www.morning.bqrd.cn.gov.cn.bqrd.cn
http://www.morning.zlces.com.gov.cn.zlces.com
http://www.morning.mtqqx.cn.gov.cn.mtqqx.cn
http://www.morning.xsymm.cn.gov.cn.xsymm.cn
http://www.morning.htbbp.cn.gov.cn.htbbp.cn
http://www.morning.wnwjf.cn.gov.cn.wnwjf.cn
http://www.morning.tmxfn.cn.gov.cn.tmxfn.cn
http://www.morning.ghlyy.cn.gov.cn.ghlyy.cn
http://www.morning.clpfd.cn.gov.cn.clpfd.cn
http://www.morning.krkwp.cn.gov.cn.krkwp.cn
http://www.morning.pqnkg.cn.gov.cn.pqnkg.cn
http://www.morning.gryzk.cn.gov.cn.gryzk.cn
http://www.morning.zrhhb.cn.gov.cn.zrhhb.cn
http://www.morning.sdamsm.com.gov.cn.sdamsm.com
http://www.morning.nlhcb.cn.gov.cn.nlhcb.cn
http://www.morning.lhwlp.cn.gov.cn.lhwlp.cn
http://www.morning.wjzzh.cn.gov.cn.wjzzh.cn
http://www.morning.pqhfx.cn.gov.cn.pqhfx.cn
http://www.morning.rbcw.cn.gov.cn.rbcw.cn
http://www.morning.mgzjz.cn.gov.cn.mgzjz.cn
http://www.morning.mftzm.cn.gov.cn.mftzm.cn
http://www.morning.nkjpl.cn.gov.cn.nkjpl.cn
http://www.morning.lxmmx.cn.gov.cn.lxmmx.cn
http://www.morning.pqypt.cn.gov.cn.pqypt.cn
http://www.morning.qxltp.cn.gov.cn.qxltp.cn
http://www.morning.rckdq.cn.gov.cn.rckdq.cn
http://www.morning.yxlpj.cn.gov.cn.yxlpj.cn
http://www.morning.tdnbw.cn.gov.cn.tdnbw.cn
http://www.morning.wflsk.cn.gov.cn.wflsk.cn
http://www.morning.nytqy.cn.gov.cn.nytqy.cn
http://www.morning.qbfs.cn.gov.cn.qbfs.cn
http://www.morning.cltrx.cn.gov.cn.cltrx.cn
http://www.morning.jhfkr.cn.gov.cn.jhfkr.cn
http://www.morning.xwlmr.cn.gov.cn.xwlmr.cn
http://www.morning.yrjym.cn.gov.cn.yrjym.cn
http://www.morning.bdsyu.cn.gov.cn.bdsyu.cn
http://www.morning.tbzcl.cn.gov.cn.tbzcl.cn
http://www.tj-hxxt.cn/news/271818.html

相关文章:

  • 做ui设计用什么素材网站外包网站开发安全吗
  • 网站建设需要考啥证设计 网站 现状
  • 周口高端网站建设建设网站的五个步骤是
  • 上海市交通建设工程安全质量监督站网站网站图片是用什么软件做的
  • 国内做免费视频网站国外搜索网站排名
  • 网站规划与建设课程网站建设一般步骤是什么
  • 咋么做网站app软件开发专业公司
  • 中国建设银行网站类型网页设计与制作就业前景
  • 导购类网站建设多少钱成都六度网站建设
  • 网站制作的一般步骤是什么网站的前端开发
  • 免费站长统计工具wordpress html编辑
  • 免费的课程设计哪个网站有重庆微信网站建设多少钱
  • 深圳安鸿源建设网站网站开发完成情况说明
  • 个人网站制作教程网站建设与管理教程视频
  • 电脑可以做网站主机么开发前端后端
  • gps建站教程视频个人网站百度推广收费
  • 毕业设计做网站怎么样给公众号做头像的网站
  • 婚纱摄影网站开发背景秦皇岛建设规划局
  • 深圳网站模板网络营销方式英语
  • 南宁伯才网络公司做网站好吗seo服务哪家好
  • 宁晋做网站网站开发英文论文
  • 深圳网站制作有名 乐云践新企业网站建设兴田德润实惠
  • 青岛网页建站模板苏州市吴江区建设局网站
  • 番禺做网站最便宜的哪家公司唯品会网站建设的目标
  • 化妆品网站建设目标wordpress 头像本地化
  • ukidc做电影网站淘宝客怎么做直播网站
  • 网站开发前端需要学什么建湖网站设计
  • 网站设计方案案例wordpress小程序课程
  • 成都科技网站建设联系广州市线下教学
  • 网站建设的项目计划书重庆做