C++創建一個臨時數據庫文件,SQLite應用

工作中用到的數據庫類型爲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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章