1. 文件操作
1.1 打开文件
在C++中打开文件需要使用标准库中的fstream头文件,该头文件提供了三个类:ifstream、ofstream和fstream。其中,ifstream用于从文件中读取数据,ofstream用于向文件中写入数据,fstream可用于读写文件。
#include<fstream>
using namespace std;
int main()
{
ifstream infile;
infile.open("example.txt");
if(!infile)
{
cerr << "Can't open the file." << endl;
exit(1);
}
// do something
infile.close();
return 0;
}
上述代码中,首先使用ifstream类的实例infile来打开文件"example.txt",如果打开失败,则输出错误信息并退出程序。如果打开成功,则进行文件操作的一系列处理。最后使用close()函数关闭文件。
1.2 读取文件
在打开文件并且没有出现错误的前提下,就可以进行文件的读取操作。使用getline()函数可以逐行读取文件。
#include<fstream>
#include<iostream>
using namespace std;
int main()
{
string line;
ifstream infile;
infile.open("example.txt");
if(!infile)
{
cerr << "Can't open the file." << endl;
exit(1);
}
while(getline(infile, line))
{
cout << line << endl;
}
infile.close();
return 0;
}
上述代码中,使用getline()函数逐行读取文件中的内容并输出到控制台中。该函数返回的每一行的内容存储在line中,通过循环不断的读取文件中的每一行,并将其输出到控制台。
1.3 写入文件
与读取文件类似,可以使用ofstream类进行文件的写入操作。
#include<fstream>
#include<iostream>
using namespace std;
int main()
{
ofstream outfile;
outfile.open("example.txt");
if(!outfile)
{
cerr << "Can't open the file." << endl;
exit(1);
}
outfile << "Hello, world!" << endl;
outfile.close();
return 0;
}
上述代码中,使用ofstream类打开文件"example.txt",如果打开失败,则输出错误信息并退出程序。如果打开成功,则向该文件中写入"Hello, world!"字符串,并且通过操作符<<将其输出到文件中。最后使用close()函数关闭文件。
2. 数据库操作
2.1 连接数据库
在C++中连接数据库需要使用第三方库,例如MySQL Connector/C++或者ODBC等。这里以MySQL Connector/C++为例,首先需要下载并安装该库。
#include <mysqlx/xdevapi.h>
using namespace std;
using namespace mysqlx;
int main()
{
Session sess("localhost", 33060, "user", "password");
cout << "Connected successfully." << endl;
return 0;
}
上述代码中,使用Session类的实例sess连接到主机名为"localhost"、端口为33060、用户名为"user"和密码是"password"的MySQL服务器。如果连接成功,则通过输出Connected successfully.验证连接是否成功。
2.2 创建数据库和表
在连接数据库后,可以进行数据库和表的创建操作。使用Schema类可以创建数据库,使用Table类可以创建表。
#include <mysqlx/xdevapi.h>
using namespace std;
using namespace mysqlx;
int main()
{
Session sess("localhost", 33060, "user", "password");
cout << "Connected successfully." << endl;
Schema myDb = sess.createSchema("my db");
Table myTable = myDb.createTable("my table");
myTable.addColumn("id", DataType::INT);
myTable.addColumn("name", DataType::VARCHAR);
myTable.addColumn("age", DataType::INT);
myTable.createIndex("id");
return 0;
}
上述代码中,首先创建名为"my db"的数据库,然后创建名为"my table"的表,在该表中分别创建三个列"int"、"name"和"age",数据类型分别为int、varchar和int。接着创建名为"id"的索引。通过该段代码创建的数据库和表都是属于MySQL服务器的。
2.3 插入数据
在创建好数据库和表之后,就可以向表中插入数据了。使用Table类的insert()函数可以插入数据。
#include <mysqlx/xdevapi.h>
using namespace std;
using namespace mysqlx;
int main()
{
Session sess("localhost", 33060, "user", "password");
cout << "Connected successfully." << endl;
Schema myDb = sess.getSchema("my db");
Table myTable = myDb.getTable("my table");
Row row = myTable.newRow();
row << 1 << "Tom" << 18;
myTable.insert(row);
return 0;
}
上述代码中,首先获取名为"my db"的数据库和名为"my table"的表。然后创建一个新的行并向该行中插入三条数据。最后通过insert()函数将该行插入到表中。
2.4 查询数据
在插入数据之后,可以使用Table类的select()函数查询数据。
#include <mysqlx/xdevapi.h>
using namespace std;
using namespace mysqlx;
int main()
{
Session sess("localhost", 33060, "user", "password");
cout << "Connected successfully." << endl;
Schema myDb = sess.getSchema("my db");
Table myTable = myDb.getTable("my table");
Result result = myTable.select("name").where("age = :1").bind(18).execute();
cout << "Result:" << endl;
for(auto row: result)
{
cout << row << endl;
}
return 0;
}
上述代码中,首先获取名为"my db"的数据库和名为"my table"的表。然后在表中查询年龄为18的人的名字。查询结果以Result类的形式返回。通过遍历Result中的每一行,输出查询结果。
2.5 更新数据
使用Table类的update()函数可以更新数据。
#include <mysqlx/xdevapi.h>
using namespace std;
using namespace mysqlx;
int main()
{
Session sess("localhost", 33060, "user", "password");
cout << "Connected successfully." << endl;
Schema myDb = sess.getSchema("my db");
Table myTable = myDb.getTable("my table");
myTable.update().set("name", "Jack").where("age = :1").bind(18).execute();
return 0;
}
上述代码中,首先获取名为"my db"的数据库和名为"my table"的表。然后将年龄为18的人的名字由"Tom"更新为"Jack"。
2.6 删除数据
使用Table类的remove()函数可以删除数据。
#include <mysqlx/xdevapi.h>
using namespace std;
using namespace mysqlx;
int main()
{
Session sess("localhost", 33060, "user", "password");
cout << "Connected successfully." << endl;
Schema myDb = sess.getSchema("my db");
Table myTable = myDb.getTable("my table");
myTable.remove().where("age = :1").bind(18).execute();
return 0;
}
上述代码中,首先获取名为"my db"的数据库和名为"my table"的表。然后删除年龄为18的人的数据。