操作系统与网络 2019-4-8

1.MySQL

1.1 存储过程

  • 1.存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它;
  • 2.创建一个存储过程
drop procedure if exists SLAMProced;
delimiter \\
create procedure SLAMProced(a int)
BEGIN
	if a = 1
		then select * from student;
	else
		select * from sc;
	end if;
END \\
delimiter ;
  • 3.调用存储过程
call SLAMProced(1);
call SLAMProced(2);

1.2 触发器

  • 1.触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。
  • 2.创建一个触发器
drop trigger if exists SLAMProcedDel;
delimiter \\
create trigger SLAMProcedDel
after delete on student for each row
BEGIN
	delete from sc where sc.snum = old.snum;
END \\
delimiter ;
  • 3.这个触发器是在我们删除student中的数据时触发的,比如说我们删除 student.snum=‘01’ 的数据,那么同时在sc里的 snum 为 01 的数据也会被删除;
delete from student where student.snum = '01';
  • 4.创建一个插入数据的触发器
drop trigger if exists SLAMProcedInsert;
delimiter \\
create trigger SLAMProcedInsert
after insert on student for each row
BEGIN
	insert into sc value(new.snum, null, null);
END \\
delimiter ;
  • 5.只有当我们在对 student 表进行数据插入时才会触发这个触发器;
insert into student value('01', 'SLAM', '19901030', '女');
  • 6.创建一个修改数据的触发器
drop trigger if exists SLAMProcedUpdate;
delimiter \\
create trigger SLAMProcedUpdate
after update on student for each row
BEGIN
	update sc set sc.snum = '20' where sc.snum = old.snum;
END \\ 
delimiter ;
  • 7.只有当我们修改student中的数据时才会触发这个触发器
update student set snum = '20' where snum = '02';

2.直播程序

2.1 新建一个基于对话框的MFC应用程序

2.2 新添加一个对话框,作为 登陆 的对话框

  • 1.添加两个 edit 控件和两个 button 控件;
  • 2.给新建的对话框添加类 CLoginDlg ,继承自 CDialogEx ;
  • 3.在 App 类中的初始化函数中创建非模态对话框来显示登录对话框;
BOOL CVideoApp::InitInstance()
{
	... ...

	// ==========================0408登陆对话框=============================
	CLoginDlg dlg_login;
	if(dlg_login.DoModal() == IDCANCEL)
	{
		if (pShellManager != NULL)
		{
			delete pShellManager;
		}
		return FALSE;
	}
	// ==========================0408登陆对话框=============================

	... ...
}

2.3 完成 登陆 按钮

  • 1.给两个 edit 控件添加变量,类型是 value CString ;
  • 2.使用测试数据来作为用户名和登陆密码;
void CLoginDlg::OnBnClickedButton2()
{
	// 获取用户名和密码
	UpdateData(TRUE);

	// ========================测试代码=============================
	if(m_str_passWord == "BBBB" && m_str_userName == "AAAA")
	{
		CDialog::OnOK();
	}
	else
	{
		MessageBox(_T("账号或密码错误!"));
	}
	// ========================测试代码=============================
}

2.4 在数据库中创建一个新表,一行名称为 username ,一行 password ,两行的数据类型都是VARCHAR(45);添加一个 AAAA 作为 username 的数据,一个 BBBB 作为 password 的数据;

2.5 将 MySQL.h 和 MySQL.cpp 作为现有项添加到当前项目中,运行的时候需要将 MySQL 的 include 的文件夹的路径作为默认路径添加到 附加包含目录 ;将 lib 文件夹添加到 库目录 ;根据安装的 MySQL 软件的位数来修改 解决方案平台(可以修改为x64或者x86) ;

2.6 在 App 类中定义数据库对象

  • 1.在登录界面上添加连接数据库的代码;
BOOL CVideoApp::InitInstance()
{
	... ...

	// ===========================0408连接数据库==============================
	if(my_sql.ConnectMySql("localhost", "root", "jinsuoxuan", "20180917") == false)		// 第一个参数:本地的IP地址	第二个参数:数据库的用户名	第三个参数:密码	第四个参数:那个库	第五个参数:端口号,默认值为3306
	{
		AfxMessageBox(_T("连接数据库失败!"));
		if (pShellManager != NULL)
		{
			delete pShellManager;
		}
		return FALSE;
	}
	// ===========================0408连接数据库==============================

	// ==========================0408登陆对话框=============================
	CLoginDlg dlg_login;
	if(dlg_login.DoModal() == IDCANCEL)
	{
		if (pShellManager != NULL)
		{
			delete pShellManager;
		}
		return FALSE;
	}
	// ==========================0408登陆对话框=============================

	... ...
}

2.7 修改测试代码,将从 edit 上获取到的 username 和 password 来和数据库中的进行匹配

  • 1.创建一个字符串数组来存储 SQL语句 :char sz_sql[100] = {0};
  • 2.使用 sprintf_s 函数来将 SQL语句 拷贝到 sz_sql 中;
  • 3.将项目从 宽字符集 转换为 多字节 ;
void CLoginDlg::OnBnClickedButton2()
{
	// 获取用户名和密码
	UpdateData(TRUE);

	// 在登陆时查询数据库中的用户名和密码
	// 将项目的字节改为多字节
	char sz_sql[100] = {0};
	sprintf_s(sz_sql, 100, "select pass_word from usernamepassword where user_name = '%s'", m_str_userName.GetBuffer());

	// 使用函数获取数据库中的数据
	list<string> lst;
	if(theApp.my_sql.SelectMySql(sz_sql, 1, lst) == false)	// 第一个参数:执行的语句	第二个参数:想获取几项	第三个参数:获取到的数据要存放的位置
	{
		MessageBox(_T("用户名或密码错误"));
	}
	else
	{
		// 查询成功进行密码的匹配
		if(lst.empty() == true)
		{
			// 没有获取到数据
			MessageBox(_T("查询数据库失败"));
		}
		else
		{
			// 判断密码
			string str = lst.front();
			lst.pop_front();
			if(strcmp(m_str_passWord.GetBuffer(), str.c_str()) == 0)
			{
				// 匹配成功,返回 IDOK
				CDialogEx::OnOK();
			}
			else
			{
				MessageBox(_T("账号或密码错误!"));
			}
		}
	}

	// ========================测试代码=============================
	//if(m_str_passWord == "BBBB" && m_str_userName == "AAAA")
	//{
	//	CDialog::OnOK();
	//}
	//else
	//{
	//	MessageBox(_T("账号或密码错误!"));
	//}
	// ========================测试代码=============================
}

2.8 注册账号(向数据库中添加数据)

  • 1.获取用户名和密码;
  • 2.将 SQL语句 拷贝到 sz_sql 中;
  • 3.调用 UpdateMySQL 函数来向数据库中添加数据;
void CLoginDlg::OnBnClickedButton1()
{
	// 注册账户
	// 获取用户名和密码
	UpdateData(TRUE);

	char sz_sql[100] = {0};
	sprintf_s(sz_sql, 100, "insert into usernamepassword value('%s', '%s')", m_str_userName.GetBuffer(), m_str_passWord.GetBuffer());

	if(theApp.my_sql.UpdateMySql(sz_sql) == false)
	{
		// 不成功
		MessageBox(_T("注册失败"));
	}
	else
	{
		MessageBox(_T("注册成功"));
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值