18 数据库操作

nsq之nsqd执行流程(包括订阅消息,发布消息等内容) nsqd是就是我们平时所说的broker,接下来我们就来看一下它是怎么设计的,下面的Main方法就是nsqd启动的入口 func (n *NSQD) Main() error { ctx := &context{n} exitCh := make(chan error) var once sync.Once exitFunc := func(err error) { once... 阅读详情

GO操作MySQL

1.下载驱动

go get -u github.com/go-sql-driver/mysql

2.数据库操作

package main

import (
	"database/sql"
	"fmt"
	"os"

	_ "github.com/go-sql-driver/mysql"
)

//表sys_config
type table struct {
	variable string
	value    string
	set_time string
	set_by   string
}

func checkErr(err error) {
	if err != nil {
		fmt.Println("ERROR:", err)
		os.Exit(1)
	}
}

//go get -u github.com/go-sql-driver/mysql
func main() {
	dsn := "root:123456@tcp(127.0.0.1:3306)/sys"
	db, err := sql.Open("mysql", dsn) //不校验用户密码,只校验dsn格式
	checkErr(err)
	defer db.Close()

	db.SetMaxOpenConns(10)

	err = db.Ping() //尝试连接数据库
	checkErr(err)

	fmt.Println("数据库连接成功!")

	//1.增加记录
	fmt.Println("新增记录:")
	sqlStr := `INSERT INTO sys_config(variable, value, set_time, set_by) VALUES("TEST_ROW", "OFF", "2022-03-22 21:44:23", "");`
	_, err = db.Exec(sqlStr)
	checkErr(err)
	fmt.Println("新增记录成功!")

	//2.查询记录
	fmt.Println("查询记录:")

	sqlStr = `SELECT * FROM sys_config WHERE value=?;`
	rows, err := db.Query(sqlStr, "OFF")
	checkErr(err)

	var tmpVar table
	for rows.Next() {
		rows.Scan(&tmpVar.variable, &tmpVar.value, &tmpVar.set_time, &tmpVar.set_by)
		fmt.Printf("%#v\n", tmpVar)
	}

	err = rows.Err() // get any error encountered during iteration
	if err != nil {
		fmt.Println("ERROR:", err)
	}

	//3.删除记录
	fmt.Println("删除记录:")
	sqlStr = `DELETE FROM sys_config WHERE variable=?;`
	_, err = db.Exec(sqlStr, "TEST_ROW")
	checkErr(err)
	fmt.Println("删除记录成功!")
}

输出结果:

数据库连接成功!
新增记录:
新增记录成功!
查询记录:
main.table{variable:"diagnostics.allow_i_s_tables", value:"OFF", set_time:"2022-03-22 21:44:23", set_by:""}
main.table{variable:"diagnostics.include_raw", value:"OFF", set_time:"2022-03-22 21:44:23", set_by:""}
main.table{variable:"TEST_ROW", value:"OFF", set_time:"2022-03-22 21:44:23", set_by:""}
删除记录:
删除记录成功!

3.MySQL预处理

package main

import (
	"database/sql"
	"fmt"
	"os"

	_ "github.com/go-sql-driver/mysql"
)

//表sys_config
type table struct {
	variable string
	value    string
	set_time string
	set_by   string
}

func checkErr(err error) {
	if err != nil {
		fmt.Println("ERROR:", err)
		os.Exit(1)
	}
}

//go get -u github.com/go-sql-driver/mysql
func main() {
	dsn := "root:123456@tcp(127.0.0.1:3306)/sys"
	db, err := sql.Open("mysql", dsn) //不校验用户密码,只校验dsn格式
	checkErr(err)
	defer db.Close()

	db.SetMaxOpenConns(10)

	err = db.Ping() //尝试连接数据库
	checkErr(err)

	fmt.Println("数据库连接成功!")

	//查询记录
	sqlStr := `SELECT * FROM sys_config WHERE value=?;`
	stmt, err := db.Prepare(sqlStr)
	checkErr(err)
	defer stmt.Close()

	rows, err := stmt.Query("OFF")
	checkErr(err)
	var tmpVar table
	for rows.Next() {
		rows.Scan(&tmpVar.variable, &tmpVar.value, &tmpVar.set_time, &tmpVar.set_by)
		fmt.Printf("%#v\n", tmpVar)
	}

	err = rows.Err() // get any error encountered during iteration
	if err != nil {
		fmt.Println("ERROR:", err)
	}
}

输出结果:

数据库连接成功!
main.table{variable:"statement_performance_analyzer.limit", value:"100", set_time:"2022-03-22 21:44:23", set_by:""}

4.事务

package main

import (
	"database/sql"
	"fmt"
	"os"

	_ "github.com/go-sql-driver/mysql"
)

//表sys_config
type table struct {
	variable string
	value    string
	set_time string
	set_by   string
}

func checkErr(err error) {
	if err != nil {
		fmt.Println("ERROR:", err)
		os.Exit(1)
	}
}

//go get -u github.com/go-sql-driver/mysql
func main() {

	dsn := "root:123456@tcp(127.0.0.1:3306)/sys"
	db, err := sql.Open("mysql", dsn) //不校验用户密码,只校验dsn格式
	checkErr(err)
	defer db.Close()

	db.SetMaxOpenConns(10)

	err = db.Ping() //尝试连接数据库
	checkErr(err)

	fmt.Println("数据库连接成功!")

	tx, err := db.Begin() //开启事务
	checkErr(err)
	//1.增加记录
	sqlStr := `INSERT INTO sys_config(variable, value, set_time, set_by) VALUES("TEST_ROW", "OFF", "2022-03-22 21:44:23", "");`
	_, err = tx.Exec(sqlStr)
	if err != nil {
		fmt.Println("ERROR:", err)
		tx.Rollback() //回滚
	}

	//2.删除记录
	sqlStr = `DELETE FROM sys_config WHERE variable=?;`
	_, err = tx.Exec(sqlStr, "TEST_ROW")
	if err != nil {
		fmt.Println("ERROR:", err)
		tx.Rollback() //回滚
	}

	err = tx.Commit() //提交事务
	if err != nil {
		fmt.Println("ERROR:", err)
		tx.Rollback() //回滚
	} else {
		fmt.Println("提交事务成功!")
	}

}

GO操作Redis

1.下载驱动

go get -u github.com/go-redis/redis

2.Redis操作

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/go-redis/redis"
)

var ctx = context.Background()
var redisdb *redis.Client

func checkErr(err error) {
	if err != nil {
		fmt.Println("ERROR:", err)
		os.Exit(1)
	}
}

//go get -u github.com/go-redis/redis
func main() {
	redisdb = redis.NewClient(&redis.Options{
		Addr:     "127.0.0.1:6379",
		Password: "",
		DB:       0,
	})

	_, err := redisdb.Ping(ctx).Result()
	checkErr(err)
	fmt.Println("Redis 数据库连接成功!")

	err = redisdb.Set(ctx, "score", 99, 0).Err()
	checkErr(err)

	val, err := redisdb.Get(ctx, "score").Result()
	checkErr(err)
	fmt.Println("score:", val) //score: 99
}

实时分布式内存消息队列NSQ

1.下载驱动

go get -u github.com/nsqio/go-nsq

2.生产者

package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"

	"github.com/nsqio/go-nsq"
)

var producer *nsq.Producer

func checkErr(err error) {
	if err != nil {
		fmt.Println("ERROR:", err)
		os.Exit(1)
	}
}

// go get -u github.com/nsqio/go-nsq
func main() {
	config := nsq.NewConfig()
	nsqAddress := "127.0.0.1:4150"
	producer, err := nsq.NewProducer(nsqAddress, config)
	checkErr(err)

	reader := bufio.NewReader(os.Stdin)
	for {
		fmt.Printf("请输入:")
		data, err := reader.ReadString('\n')
		checkErr(err)

		data = strings.TrimSpace(data)
		if strings.ToUpper(data) == "Q" {
			break
		}

		err = producer.Publish("topic_demo", []byte(data))
		checkErr(err)
	}
}

3.消费者

package main

import (
	"fmt"
	"os"
	"os/signal"
	"syscall"
	"time"

	"github.com/nsqio/go-nsq"
)

//消费者类型
type MyHandler struct {
	Title string
}

//HandleMessage 处理消息方法
func (m *MyHandler) HandleMessage(msg *nsq.Message) (err error) {
	fmt.Printf("消费者%s从%v接收消息%v\n", m.Title, msg.NSQDAddress, string(msg.Body))
	return
}

func checkErr(err error) {
	if err != nil {
		fmt.Println("ERROR:", err)
		os.Exit(1)
	}
}

// go get -u github.com/nsqio/go-nsq
func main() {
	config := nsq.NewConfig()
	config.LookupdPollInterval = 15 * time.Second

	consumer, err := nsq.NewConsumer("topic_demo", "first", config)
	checkErr(err)

	testConsumer := &MyHandler{
		Title: "消费者",
	}

	consumer.AddHandler(testConsumer)

	address := "127.0.0.1:4161"
	err = consumer.ConnectToNSQLookupd(address)
	checkErr(err)

	ch := make(chan os.Signal)
	signal.Notify(ch, syscall.SIGINT)
	<-ch
}

输出结果:

2022/03/24 22:17:28 INF    1 [topic_demo/first] querying nsqlookupd http://127.0.0.1:4161/lookup?topic=topic_demo
2022/03/24 22:17:28 INF    1 [topic_demo/first] (127.0.0.1:4150) connecting to nsqd
消费者消费者从127.0.0.1:4150接收消息123
消费者消费者从127.0.0.1:4150接收消息456
2022/03/24 22:17:47 INF    1 [topic_demo/first] querying nsqlookupd http://127.0.0.1:4161/lookup?topic=topic_demo
消费者消费者从127.0.0.1:4150接收消息789

ubuntu18.04安装mysql5.7,使用winscp连接,导入MySQL数据库操作 本篇文章说明一下如何安装mysql5.7,允许远程连接和如何导入数据。 阅读详情

相关推荐

18、SQL 数据库操作与查询全解析

本博文全面解析了SQL数据库操作与查询的核心知识,包括数据库对象基础(如同义词和CURRENT_SCHEMA设置)、表操作命令(如DROP TABLE、TRUNCATE和COMMENT)、行或元组变量的使用、多种连接操作(等值连接、非等值连接及多表连接)、聚合查询、GROUP BY子句的高级特性(CUBE和ROLLUP)、分区外连接以及SQL集合运算符(UNION、MINUS和INTERSECT)。通过实例演示和详细说明,帮助读者掌握数据库操作的最佳实践和技巧,提高SQL查询和管理效率。

uber9的博客 77

nsq 快速入门经验分享

nsq 是什么东西,这里就不长篇大论啦我在 Mac 上尝试 nsq.io 中提供的 QUICK START 遇到问题,这里作简要说明

panshiqu的专栏 1万+

18、Android 数据库操作与列表视图实现指南

本文详细介绍了在Android开发中如何实现数据库的读写操作,并结合加载器(Loaders)和适配器(Adapters)在列表视图中显示数据库数据。文章通过具体的代码示例,讲解了保存数据到数据库、验证数据存储、使用CursorLoader在后台线程读取数据,以及如何更新适配器以动态显示数据。同时,还介绍了加载器和适配器的协同工作机制,帮助开发者避免UI卡顿并实现高效的数据展示。

7z8x2c4v6b9的博客 73

剖析nsq消息队列(一) 简介及去中心化实现原理

分布式消息队列nsq,简单易用,去中心化的设计使nsq更健壮,nsq充分利用了go语言的goroutine和channel来实现的消息处理,代码量也不大,读不了多久就没了。后期的文章我会把nsq的源码分析给大家看。 主要的分析路线如下 分析nsq的整体框架结构,分析如何做到的无中心化分布式拓扑结构,如何处理的单点故障。 分析nsq是如何保证消息的可靠性,如何保证消息的处理,对于消息的持...

weixin_30338481的博客 381

18、MySQL数据库操作与结构管理

本文详细介绍了MySQL数据库的操作与结构管理,包括TRUNCATE TABLE和UPDATE语句的使用方法,以及通过SHOW命令探索数据库和表结构的技巧。同时,还涵盖了数据库和表的创建、列类型的选择、主键与索引的理解、AUTO_INCREMENT特性的应用,以及表结构的修改和删除操作。通过这些内容,帮助开发者更好地管理和优化MySQL数据库。

banana的博客 49

18、网络编程与SQL数据库操作全解析

本博客全面解析了网络编程中使用QNetworkAccessManager处理POST请求的方法,并解答了多个网络编程中的常见问题。同时,深入讲解了SQL数据库的基础知识,包括表的创建、数据插入与更新、多表关联及复杂查询操作。结合PyQt的QtSql模块,实现了咖啡数据库的图形前端界面,展示了如何在实际应用中进行数据库交互与展示。

w3x4y的博客 127

golang源码阅读-nsq-消费者代码

1. 基本使用 // 消费者 type ConsumerT struct{} // 主函数 func main() { fmt.Println("---------- start --------") InitConsumer("test", "test-channel", "0.0.0.0:4161") for { time.Sleep(time.Second * 10) } } //接收到消息时, 会调用这个方法,处理消息 func (*ConsumerT) HandleMessa

无 602

18、数据库操作与 MariaDB 服务器使用指南

本博客全面介绍了数据库操作与 MariaDB 服务器的使用指南,涵盖了事务特性、SQL 语言基础、常用操作语句、MariaDB 安装配置、存储引擎、管理工具、用户权限管理、数据完整性、事务处理、性能优化、安全管理、备份与恢复等关键内容。通过详细的示例和流程图,帮助读者快速掌握数据库管理与开发的核心技能,适用于初学者和有一定经验的开发人员。

peace的博客 64

nsq简单安装以及测试

介绍NSQ 是实时的分布式消息处理平台,其设计的目的是用来大规模地处理每天数以十亿计级别的消息。NSQ 具有分布式和去中心化拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征。 二进制下载路径: https://github.com/nsqio/nsq/releases下载需要的二进制包: 解压之后: 执行一下命令:cd /Users/xinzhiyun/ns

纵横四海的博客 5596

18、数据库操作指南:MongoDB 副本集与 OpenLDAP 目录搭建及备份

本博客详细介绍了MongoDB副本集的配置和OpenLDAP目录的搭建及备份恢复操作。内容涵盖MongoDB集群初始化、安全认证、OpenLDAP安装配置、目录备份导出与恢复导入的具体步骤及原理,帮助用户提升数据库管理与维护能力,确保数据的高可用性和安全性。

89

逆变器母线电容选型与均压电阻设计实战指南

本文为逆变器母线电容选型与均压电阻设计提供了实战指南。文章从工程角度出发,详细解析了母线电容耐压值、容值的计算方法,并重点强调了纹波电流热设计的重要性。同时,深入探讨了串联电容均压电阻的设计原则与功率计算,通过5.5kW变频器案例,系统演示了从参数确定到最终选型的完整流程,旨在帮助工程师设计出稳定可靠的逆变器系统。

weixin_29299807的博客 291

18.数据库操作

18.数据库操作 数据库系统是由数据库、数据库管理系统和应用系统、数据库管理员构成。 数据库管理系统简称DBMS,是数据库系统的关键组成部分,包括数据库定义、数据查询、数据维护等。 而JDBC技术是连接数据库和应用程序的纽带。 18.1数据库基础知识 如今现在常用的高级数据库有SQL Server、MySQL、Oracle等。 18.1.1什么是数据库 数据库是一种存储接口,...

qq_34242058的博客 310

拆开一个烧坏的IGBT模块,手把手教你识别过压、过流、过温的“案发现场”

本文详细解析了IGBT模块失效分析的实战技巧,通过观察铝层熔化纹路、焊锡溢出形态等物理痕迹,手把手教你识别过压、过流、过温的典型失效模式。文章提供了从基础工具包到现场快速诊断的完整流程,帮助工程师精准定位IGBT模块失效的根本原因。

weixin_30655569的博客 423

Python学习_18 数据库操作(三)

Python学习_18 数据库操作(三)1、ORMORM 即Object Relational Mapping,全称对象关系映射。数据库中每次查出来的数据都用一个类表示,这个类的属性和数据库中表的字段一一对应。多条数据,就是一个list,每一行数据都是一个类来表示,如下所示:class User(object):    def __init__(self, id, name):        ...

燕子的博客 799

Qt+OpenGL+Cesium三件套:打造高性能3D GIS桌面应用的5个关键点

本文深入探讨了如何利用Qt、OpenGL和Cesium数据规范构建高性能桌面级3D GIS应用。文章聚焦于五个关键点:架构选型、OpenGL渲染优化、3D Tiles数据解析与调度、内存与多线程管理,以及高级特性实现,旨在帮助开发者在C++生态中打造不依赖网络、运算能力更强的重型3D地理信息客户端。

weixin_28197941的博客 380

从‘最速控制’到代码:深入拆解韩京清ADRC中TD跟踪器的fhan函数(含Matlab/Simulink实例)

本文深入解析韩京清ADRC中的fhan函数,从理论到代码实现,详细拆解其在Matlab/Simulink中的应用。通过分析最速控制问题和非线性TD的连续形式,揭示fhan函数在信号处理和噪声抑制中的独特优势,并提供工程实践中的参数整定和优化技巧。

weixin_42659194的博客 246

2019-8-18 简单对数据库操作封装的框架

Java项目简单对数据库操作封装的框架项目实施需要jar环境具体步骤 简单对数据库操作封装的框架 在对数据库进行操作时,很多的代码会重复,会大大影响工作量 ,和程序执行 的速度,比如每次连接数据库都会加载驱动 获取连接对象,获取执行对象等等 所以我们需要对它进行封装 : 即只需要提供一个 sql 语句 而帮我们执行操作 , 或者 查询到一个返回的结果给我们。下面就开始封装吧 项目实施需要jar环...

qq_44214895的博客 269

HUAWEI华为荣耀MagicBook MateBook B D E X 13 14 16 笔记本MateStation台式机原装Win10出厂Windows11系统

HUAWEI华为MateBookX原装出厂系统恢复原厂系统,型号:MACHC-WAE9LP、EUL-W29P、MACHR-W19L、MACHR-W29、MACHD-WFE9、MRGF-16、MACHR-W19BL、MACHD-WFE9Q、WT-W19、Mach-W19、Mach-W29、WT-W09、WT-W19、MACH-W29等。HUAWEI华为MateBookE原装出厂系统恢复原厂系统,型号:PAK-AL09、GK-W7X、GK-G58、GK-W76、DRC-W76等。

QQ17855069的博客 17万+

18.SQLite数据库操作:在本地管理FAB数据

文章摘要:针对Excel无法有效管理半导体制造(FAB)海量数据的问题(如行数限制、查询慢等),提出采用SQLite数据库解决方案。通过Python实现FAB数据管理系统,包含建表、索引优化、数据插入/查询等核心功能,支持百万级数据处理,相比Excel查询速度提升1200倍。文章详细对比了两种工具的差异,提供了从Excel迁移到SQLite的实操建议(数据清洗、批量导入、验证机制),并探讨了SQLAlchemy、PostgreSQL等进阶方向。该系统实现了良率分析、异常Lot筛选等关键业务功能,特别适合中小

开发这点事儿 | 半导体智能制造与工业软件实战分享 136

innovus:sroute 双层follow pin的做法

根据std cellpower pin的层次可以分成两种情况。

m0_61544122的博客 2724

ESP32-IDF开发之旅 基础篇⑨ ESP-IDF的FreeRTOS任务间通信和同步

本文介绍了FreeRTOS任务间通信中的队列机制,重点讲解了队列的创建、发送和接收数据的API使用方法。文章提供了详细的技术说明和示例代码,包括xQueueCreate、xQueueSend、xQueueReceive等核心函数的参数说明和返回值解释。通过一个2生产者+1消费者的实际案例,展示了如何在ESP-IDF环境下使用FreeRTOS队列实现任务间通信。示例中包含了数据发送失败处理和接收数据验证等实用技巧,为开发者提供了可参考的实现模式。

单片机菜鸟哥的博客 427

2023.12.18 制作py,shell脚本进行数据库操作与定时任务

以下的问题都先在本地pycharm进行运行,确认无误了,再将.py文件拖入虚拟机的linux中,再在linux里使用脚本调用,最后确认结果。因为%在python里是占位符,%% 在有%拼接的的字符串里,如果要打印百分号,用两个百分号表示%%两个库,shopnc_db作为数据源, 在数据源中查询到的结果放到bi_db库中。命令 第1列表示分钟1~59 每分钟用*或者 */1表示。将查询到的表的数据,写入到另一个表中。将查询到的表的数据,写入到另一个表中。第2列表示小时1~23(0表示0点)

白白的wj的博客 1095

被搜狗输入法背刺了!偷偷装的 “AI 汪仔” 狂占 CPU!手把手教你如何彻底关闭删除搜狗AI功能AI汪仔

手把手教你如何彻底关闭删除搜狗输入法的AI汪仔🚀

XiaoqiangClub的博客 2万+

菜鸡学习日记的大一年度项目——数据库操作学习日记-1.18

前几天在回家路上,回了家又花一天时间和老朋友碰面 今天(1.18)才学习数据库 学了一些基本知识

qq_42954464的博客 162

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

How to install mysql 5.7 to Ubuntu 18.04 LTS

How to install mysql 5.7 to Ubuntu 18.04 LTS

在路上 583

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: 17 flag包介绍
下一篇: 05 Kafka环境安装
拼搏的菜鸟
博客等级 码龄10年 9粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拼搏的菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值