工作中用到的數據庫類型爲Oracle和Sql Server.還有SqlLite這種輕型數據庫。
#include<iostream>
#include<boost/filesystem.hpp>//包含boost的nuget包
#include<SQLiteCpp/Database.h>//前提是含有sqlite相關的nuget包
#include<boost/uuids/random_generator.hpp>
class TempDBEnv
{
public:
TempDBEnv()
{
boost::uuids::random_generator uuid; //定義一個隨機數對象
//利用boost庫,創建臨時目錄,並補全path
m_tempPath = boost::filesystem::temp_directory_path()/boost::uuids::to_string(uuid());
boost::filesystem::create_directories(m_tempPath);
//構建全(滿)路徑,數據庫的入口爲temp.db。
boost::filesystem::path tempDBFullPath = m_tempPath/"temp.db";
//創建一個SQLite微型數據庫
m_tempDB = std::shared_ptr<SQLite::Database>(new SQLite::Database(tempDBFullPath.c_str()
, SQLite::OPEN_CREATE | SQLite::OPEN_READWRITE));
}
~TempDBEnv()
{
//析構時,數據庫指針置空,路徑移除。
m_tempDB = nullptr;
boost::filesystem::remove_all(m_tempPath);
}
getTempDB();
{
return m_tempDB;
}
private:
boost::filesystem::path m_tempPath;
std::shared_ptr<SQLite::Database> m_tempDB;
}
void createDBTable(std::shared<SQLite::Database> db)
{
//首先,寫一條創建名爲students表的語句。就兩列吧(學號,名字;char和varchar在這都可以)
std::string createStuTableSql =
"create table Students(StudentID varchar(36) primary key, StuName varchar(20))"
//執行sql語句,sql執行失敗時,會拋出SQLite::Exception 類型的異常,所以需要進行捕獲。
db->exce(createStuTableSql);
}
int main()
{
try
{
//構建一個臨時數據庫文件
TempDBEnv tempDB;
//在該數據庫中創建表單(所以參數一定是數據庫,所以TempDBEnv需要提供getDB的函數)
createDBTable(tempDB);
}
catch(const SQLite::Exception& e)
{
//輸出錯誤信息
std::cout << e.what() << std::endl;
}
return 0;
}