19.数据库的理解和使用

1.前言

本章并不会教你如何学会使用某一个具体的数据库。

如果需要可以参考本站的其它教程,对于仅仅只是应用来说,它并不复杂,只是有点繁琐而已,需要记忆的东西比较多。

本文的目的是尝试从比较宏观的角度来看待数据库,以及在不同的地方,使用合适的数据库。

2.理解数据库

首先我们还是要来理解一下数据库的本质。

看数据库这个名字,我们就能看出一二,数据库即数据的库存,用于数据的存储与取出,乃至一些更高级的操作。

我们最常见的数据库,可能就是我们windows电脑上自带的注册表了(不知道如何打开?浏览器搜一搜):

image-20231227193056097

注册表里面就存储了我们电脑所有的信息,在一些时候会进行写入,同时有些时候会进行读取操作,因为它是独立于各个应用程序的。

独立于应用程序,这一点很重要,即一个数据库,可以被不同程序访问,它并不属于某个应用程序。

比如我们常用的QQ,微信,为什么我们登录各种游戏,很多都可以用QQ、微信登录?

那就是因为它们可以向你申请权限来访问腾讯存储你信息的数据库,即它们也可以通过一些腾讯提供的接口,来访问腾讯的数据库。

3.配置文件

在真正使用数据库前,要搞懂自己是否需要数据库,因为即使是最简单的数据库,操作难度都比较高,且都需要一定的条件。

比如我们现在需要写一个应用程序,仅仅只是需要记录一下用户的设定。

这种很常见,比如程序启动时用什么主题、有没有声音、是否弹窗、上次用户的操作记录等等需要记录的信息。

那此时用数据库就大可不必了,因为你完全可以将这些信息写入一个文件,然后在下次程序启动时读出即可。

除了这种你自己设计格式来读取、写入的数据文件,windows其实有一种专门的配置文件用来记录信息,也许你见过:

image-20231227193342854

这种文件以.ini结尾,其格式十分简单:

image-20231227193402219

之所以它很常见,就是因为这是window自带的一种格式,有现成的函数可以让我们使用这种格式,所以下面我们首先就来使用一下这种格式文件。

随便建立一个控制台项目即可:

#include<iostream>
#include<Windows.h>
using namespace std;
int main() {
	WritePrivateProfileStringA("main", "test1", "www.kucoding.com", ".\\1.ini");
	WritePrivateProfileStringA("main", "test2", "hah", ".\\1.ini");
	WritePrivateProfileStringA("main", "test3", "rebr", ".\\1.ini");
	WritePrivateProfileStringA("second", "test4", "vferg", ".\\1.ini");
	WritePrivateProfileStringA("second", "test5", "we23v", ".\\1.ini");
	WritePrivateProfileStringA("second", "test6", "ntres", ".\\1.ini");
	WritePrivateProfileStringA("second", "test7", "cewef", ".\\1.ini");
}

对于写入配置文件,一般我们只需要调用WritePrivateProfileStringA这个函数:

BOOL WritePrivateProfileStringA(
  [in] LPCSTR lpAppName, //节名称
  [in] LPCSTR lpKeyName, //键名
  [in] LPCSTR lpString, //值名
  [in] LPCSTR lpFileName //进行写入的文件名(注意要写成相对路径或者绝对路径的格式,直接写文件名会失败)
);

上面代码的执行结果:

image-20231227193605166

节名称就是[main][second]这种,键名就是test1test2等等,值名就是键名后面等于号紧跟的内容。

这是存取数据的过程,非常简单,当然也还有读出数据的过程:

#include<iostream>
#include<Windows.h>
using namespace std;
int main() {
	char buf[0xFF];
	GetPrivateProfileStringA("main", "test1", "", buf, 0xFF, ".\\1.ini");
	cout << buf << endl;
	GetPrivateProfileStringA("main", "test2", "", buf, 0xFF, ".\\1.ini");
	cout << buf << endl;
	GetPrivateProfileStringA("main", "test3", "", buf, 0xFF, ".\\1.ini");
	cout << buf << endl;
	GetPrivateProfileStringA("second", "test4", "", buf, 0xFF, ".\\1.ini");
	cout << buf << endl;
	GetPrivateProfileStringA("second", "test5", "", buf, 0xFF, ".\\1.ini");
	cout << buf << endl;
	GetPrivateProfileStringA("second", "test6", "", buf, 0xFF, ".\\1.ini");
	cout << buf << endl;
作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux