c++操作sqllite

项目中需要使用的sqllite,有想过使用内存的结果,好像都不大使用,最接近的算是vector了,但是查询方式不大好,而且数据有好几个字段,所以考虑了数据库

sqllite目前已经到了3了,好快,好像这个数据库也不弱!就先用着吧!

==================================================================

其实挺简单的,主要也就是一个class

main函数里面有对应的测试函数

暂时没有发现bug,如果出现,请务必提醒本人!谢啦!

详情请看main函数

测试项目的链接:

http://download.csdn.net/detail/zengraoli/7457843

sql_lite_helper.h:

#ifndef  __INCLUDE_SQL_LITE_HELPER_H__
#define  __INCLUDE_SQL_LITE_HELPER_H__

#include "sqlite3.h"

#pragma comment(lib, "sqlite3.lib")

class SQLiteHelper
{
public:
	SQLiteHelper() { }
	virtual ~SQLiteHelper() { CloseDB(); }

	// 打开数据库
	int OpenDB(const char *path);
	// 关闭数据库
	int CloseDB();
	// 创建一张表
	int CreateTable(const char *create_table_state);
	// 删除一张表
	int DropTable(const char *table_name);
	// 查询操作
	int Select(const char *select_state);
	// 插入操作
	int Insert(const char *insert_state);
	// 删除操作
	int Delete(const char *delete_state);
	// 更新操作
	int Update(const char *update_state);

private:
	sqlite3 *sqlite_db_;// 数据库的指针
	char* err_msg_;		// 错误信息
	bool is_close_;		// 关闭数据的标识

	// 主要用在selece操作中的显示数据元素
	static int CallBackFunc(void *NotUsed, int argc, char **argv, char **azColName);
	// 执行sql语句
	int SqlStateExec(const char *sql_state);
};

#endif

sql_lite_helper.cpp:

#include "iostream"
using namespace std;

#include "sql_lite_helper.h"

int SQLiteHelper::OpenDB(const char *path)
{
	int res = sqlite3_open(path, &sqlite_db_);
	if(res)
	{
		cout << "can't open database: " << sqlite3_errmsg(sqlite_db_);
		sqlite3_close(sqlite_db_);
		return -1;
	}

	is_close_ = false;

	return 0;
}

int SQLiteHelper::CloseDB()
{
	if (!is_close_)
	{
		int res = sqlite3_close(sqlite_db_);
		if(res)
		{
			cout << "can't close database: " << sqlite3_errmsg(sqlite_db_);
			return -1;
		}
	}

	return 0;
}

int SQLiteHelper::CreateTable(const char *table_name_and_field)
{
	string create_table_state = "create table ";
	create_table_state += table_name_and_field;
	create_table_state += ";";
	int res = SqlStateExec(create_table_state.c_str());
	if (res != SQLITE_OK)
	{
		cout << "create table failed." << err_msg_ << endl;
		return -1;
	}
	else
	{
		cout << "create table successed." << endl;
	}

	return 0;
}

int SQLiteHelper::DropTable(const char *table_name)
{
	string sql_state = "drop table ";
	sql_state += table_name;
	sql_state += ";";
	int res = SqlStateExec(sql_state.c_str());
	if (res != SQLITE_OK)
	{
		cout << "drop table failed." << err_msg_ << endl;
		return -1;
	}
	else
	{
		cout << "drop table successed." << endl;
	}

	return 0;
}

int SQLiteHelper::Select(const char *select_state)
{
	int res = SqlStateExec(select_state);
	if (res != SQLITE_OK)
	{
		cout << "select operate failed." << err_msg_ << endl;
		return -1;
	}
	else
	{
		cout << "select operate successed." << endl;
	}

	return 0;
}

int SQLiteHelper::Insert(const char *insert_state)
{
	int res = sqlite3_exec(sqlite_db_, "begin transaction;", CallBackFunc, 0, &err_msg_);
	res = SqlStateExec(insert_state);
	if (res != SQLITE_OK)
	{
		cout << "insert operate failed." << err_msg_ << endl;
		return -1;
	} 

	res = sqlite3_exec(sqlite_db_, "commit transaction;", 0, 0, &err_msg_);

	cout << "insert operate successed." << endl;

	return 0;
}

int SQLiteHelper::Delete(const char *delete_state)
{
	int res = SqlStateExec(delete_state);
	if (res != SQLITE_OK)
	{
		cout << "delete operate failed." << err_msg_ << endl;
		return -1;
	}
	else
	{
		cout << "delete operate successed." << endl;
	}

	return 0;
}

int SQLiteHelper::Update(const char *update_state)
{
	int res = SqlStateExec(update_state);
	if (res != SQLITE_OK)
	{
		cout << "update operate failed." << err_msg_ << endl;
		return -1;
	}
	else
	{
		cout << "update operate successed." << endl;
	}

	return 0;
}

int SQLiteHelper::CallBackFunc(void *not_used, int element_count, char **element, char **col_name)
{
	for(int index = 0 ; index < element_count ; index++)
	{
		cout << col_name[index] << " = " << (element[index] ? element[index] : "NULL") << ", ";
	}

	cout << "\n";

	return 0;
}

int SQLiteHelper::SqlStateExec(const char *sql_state)
{
	return sqlite3_exec(sqlite_db_, sql_state, CallBackFunc, 0, &err_msg_);
}

main:

// test_use_sqlite.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "iostream"
#include "sstream"
using namespace std; 

#include "sql_lite_helper.h"

SQLiteHelper sql_lite_helper;

// Test:创建一个数据库表
int TestCreateTable()
{
	return sql_lite_helper.CreateTable("test_table (id int, name varchar, age int)");
}

// Test:测试插入数据
int TestInsert()
{
	for (int i= 1; i < 10; ++i)
	{
		std::stringstream str_sql;
		str_sql << "insert into test_table values(";
		str_sql << i << ","<< (i + 10) << "," << 23 << ");";
		std::string str = str_sql.str();
		sql_lite_helper.Insert(str.c_str());
	}

	return 0;
}

// Test:测试删除某个元素
int TestDelete()
{
	string str_sql= "delete from test_table where id=4;";

	return sql_lite_helper.Delete(str_sql.c_str());
}

// Test:测试更新某个元素
int TestUpdate()
{
	string str_sql= "update test_table set name='SQLite3' where name='17';";

	return sql_lite_helper.Update(str_sql.c_str());
}

// Test:测试查询
int TestSelect()
{
	string str_sql= "select * from test_table;";

	return sql_lite_helper.Select(str_sql.c_str());
}

// Test:测试删除表
int TestDropTable()
{
	return sql_lite_helper.DropTable("test_table");
}

int main()
{
	int res = sql_lite_helper.OpenDB("./Test.db3");

	res = TestCreateTable();
	if (res != 0)
	{
		return 0;
	}

	res = TestInsert();
	if (res != 0)
	{
		return 0;
	}

	TestSelect();

	res = TestDelete();
	if (res != 0)
	{
		return 0;
	}

	res = TestUpdate();
	if (res != 0)
	{
		return 0;
	}

	TestSelect();

	TestDropTable();

	TestSelect();

	return 0;
}

显示结果:

c++操作sqllite

时间: 2024-10-24 01:21:09

c++操作sqllite的相关文章

07_Android操作sqllite数据库(包括2中方式操作数据的方式),单元测试,BaseAdapter的使用,自定义view的综合使用案例

?? 1 目标从sqllite中读取数据并显示如下: MainActivity对应的界面 MainActivity2对应的界面 2  配置Android的清单文件 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itheima2

SQLLite 简介

[1] SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl.C#.PHP.Java等,还有ODBC接口,同样比起Mysql.PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快.SQLite第一个Alpha版本

微软connect教程系列&mdash;EntityFramework7(三)

  随着Asp.NET5的开源,以及跨平台,ORM框架EF7也与时俱进,支持asp.net core,也支持关系型数据库和非关系型数据库,以及在linux和mac上跨平台使用. 下面演示的即通过使用EF7 操作sqllite数据库 1.用vs2015新建winform项目,打开nuget,下载安装EntityFramework.SQLite 2.新建Game实体,代码如下 public class Game { [System.ComponentModel.DataAnnotations.Key

Python基础篇(九)

Key Words: 文件迭代器,标准输入,GUI工具包,数据库操作SQLlite, 文件迭代器 >>> f= open("some.txt","r+") >>> while True: ...    line = f.readline() ...    if not line : break ...    else : ...        print(line) ... 使用文件迭代器直接可以访问文件的每一行,而不必去使用re

开发人员必备技能:单元测试

说起软件测试四个字,想必大家脑海中浮现的有集成测试.系统测试.黑盒测试.白盒测试等,可能就是没想到会有单元测试. 对于大学是学习软件工程专业出身的同学来说可能会听过这四个字,对工作好几年的职场老鸟可能也听过但是没实际用过居多.绝大多数的开发人员都是忙于把手头的工作开发好,并不会把单元测试纳入工作范畴,他们会说,我连功能开发都忙不过来了,哪有时间去做单元测试,况且还要写测试代码,那不是重复写一篇代码功能吗?但,单元测试真的不值得花时间去做吗,那是因为可能你并不清楚单元测试的投入产出比有多高,下面就

sql详解

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl.C#.PHP.Java等,还有ODBC接口,同样比起Mysql.PostgreSQL这两款开源的世界著名数据库

Android 开源框架 ( 五 ) xUtils --- Android 里的 ORM IOC聚合型框架

xUtils同Afinal一样属于聚合型框架, 大而全,但是越容易牵一发而动全身.所以不推荐使用,只做了解即可.应付手头临时项目. Android 开源框架 ( 四 ) Afinal --- Android 里的 ORM IOC聚合型框架 一.Xutils 介绍 Xutils是基于afinal开发的,但是比afinal稳定性提高了不少.xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事

关于.Net中使用SQLite数据库的方法

参考: SQLite之C#连接SQLite https://www.cnblogs.com/icebutterfly/p/7850689.html 关于SQLite的库安装比较特殊: 下载地址:http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki --ok! https://www.sqlite.org/download.html.---用于安卓.Mac.Linux等平台的下载. 下载安装包: sqlite-n

SQLLite数据库操作

DBOpenHelper.java package com.example.sqllite.servise; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; /** *