cpp: SQLite

 

 

 

lib /def:sqlite3.def /machine:ix86

 

 

 

 

 

 

 

 

 

 

 

如果程序文件编码是ANSI时还需要解决中文读写乱码问题

 

sqlite3* sql = NULL; // 一个打开的数据库实例
	const char* path = "geovindu";//某个sql文件的路径

	// 根据文件路径打开数据库连接。如果数据库不存在,则创建。
	// 数据库文件的路径必须以C字符串传入。
	int result = sqlite3_open_v2(path, &sql, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_NOMUTEX | SQLITE_OPEN_SHAREDCACHE, NULL);

	if (result == SQLITE_OK) {
		std::clog << "打开数据库连接成功\n";
	}
	else {
		std::clog << "打开数据库连接失败\n";
	}


	sqlite3_stmt* stmt = NULL;        //stmt语句句柄  和文件编码有关系
	//添加 插入中文时,需要转换
	/**/

	// insert_data(00010, "geovindu", const_cast<char *>(Unicode2Utf8(_T("测测测测测")).c_str()));
	//string name=Unicode2Utf8(_T("科学")).c_str();
	const char* sqlSentenceInsert = "INSERT INTO BookKindList(BookKindName,BookKindCode,BookKindParent) VALUES('涂聚文', 'C0012',1);";        //SQL语句
	

	//进行插入前的准备工作——检查语句合法性
	//-1代表系统会自动计算SQL语句的长度
	int resultInsert = sqlite3_prepare_v2(sql, sqlSentenceInsert, -1, &stmt, NULL);

	if (resultInsert == SQLITE_OK) {
		std::clog << "添加数据语句OK\n";
		//执行该语句
		sqlite3_step(stmt);
	}
	else {
		std::clog << "添加数据语句有问题\n";
	}
	//清理语句句柄,准备执行下一个语句
	sqlite3_finalize(stmt);
	

	//查询
	const char* sqlSentence = "SELECT BookKindID,BookKindName,BookKindCode,BookKindParent FROM BookKindList;";    //SQL语句
	//sqlite3_stmt* stmt = NULL;    // stmt语句句柄

	//进行查询前的准备工作——检查语句合法性
	//-1代表系统会自动计算SQL语句的长度
	int resultSelect = sqlite3_prepare_v2(sql, sqlSentence, -1, &stmt, NULL);
	if (resultSelect == SQLITE_OK) {
		std::clog << "查询语句OK\n";

		std::string BookKindName, BookKindCode;

		// 每调一次sqlite3_step()函数,stmt语句句柄就会指向下一条记录
		while (sqlite3_step(stmt) == SQLITE_ROW) {
			// 取出第0列字段的值
			int BookKindID = sqlite3_column_int(stmt, 0);
			
			// 取出第1列字段的值 const 
			//const unsigned char* BookKindName2 =sqlite3_column_text(stmt, 1);
			char* a = (char*)sqlite3_column_text(stmt, 1);//取出的数据
			//string bookname = string(BookKindName);
			//BookKindName.append(char*)sqlite3_column_blob(stmt, 1), sqlite3_column_bytes(stmt, 1));
			//2
			//const unsigned char* BookKindCode2 = sqlite3_column_text(stmt, 2);
			char* b = (char*)sqlite3_column_text(stmt,2);
			//BookKindCode.append((char*)sqlite3_column_blob(stmt, 2)	, sqlite3_column_bytes(stmt, 2));
		
			//char* du = Gb2Utf(a);

			string du = string(a);
			string du1 = string(b);
			//wstring reasltutf8 = UTF8ToUnicode(du); // 如果程序文件编码是ANSI 需要这样转换
			//wstring reasltutf9 = UTF8ToUnicode(du1);
			//wstring reasltutfname = UTF8ToUnicode(BookKindName);
			//wstring resaltutfcode = UTF8ToUnicode(BookKindCode);
			//locale loc("chs");
			//wcout.imbue(loc);

			//3
			int BookKindParent = sqlite3_column_int(stmt, 3);

			//wcout <<"du:"<< reasltutf8<<" ,Name:"<< reasltutfname << endl;

			//输出相关查询的数据
			//std::clog << "BookKindName = "<<UTF8ToUnicode(BookKindName) << ", BookKindID = " << BookKindID << ",BookKindCode=" << UTF8ToUnicode(BookKindCode) << ",BookKindParent="<< BookKindParent <<endl;
			std::cout << "BookKindName = " << du << ", BookKindID = " << BookKindID << ",BookKindCode=" << du1 << ",BookKindParent=" << BookKindParent << endl;

			//wcout.clear();
		}
	}
	else {
		std::clog << "查询语句有问题";
	}
	//清理语句句柄,准备执行下一个语句
	sqlite3_finalize(stmt);
	//




	//关闭数据库
	sqlite3_finalize(stmt);
	if (sql) {
		sqlite3_close_v2(sql);
		sql = nullptr;
	}

  

 

 

 

 

 

 

 

 vs 2022 管理权限执行程序设置

 

posted @ 2023-04-15 13:24  ®Geovin Du Dream Park™  阅读(43)  评论(0)    收藏  举报