Sqlite3插入数据和查找数据

本文介绍了如何使用SQLite3在MFC应用程序中进行数据插入和查询操作,包括基本的SQL语句和相关API调用,帮助开发者理解SQLite3在实际项目中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.

//表单:Record(USN+有线MAC地址+无线MAC地址)
//查询
#define QUERY_SQL_SN "SELECT * FROM Record WHERE USN = '%s'"
#define QUERY_SQL_MAC "SELECT * FROM Record WHERE MAC = '%s'"
#define QUERY_SQL_WMAC "SELECT * FROM Record WHERE W_MAC = '%s'"
//插入
//#define INSERT_SQL_SN_MAC "INSERT INTO Record (USN, MAC, W_MAC, TIME) VALUES ('%s','%s','%s','%s');"
#define INSERT_SQL_SN_MAC "INSERT OR REPLACE INTO Record (USN, MAC, W_MAC, TIME) VALUES ('%s','%s','%s','%s');"
#define INSERT_SQL_SN_MAC_OLD "INSERT  INTO RepeatRecord (USN, MAC, W_MAC, TIME) VALUES ('%s','%s','%s','%s');" 
//insert or replace:如果不存在就插入,存在就更新
//insert or ignore:如果不存在就插入,存在就忽略

2.

   //NOT NULL - 非空
	//UNIQUE - 唯一
	//PRIMARY KEY - 主键
	//FOREIGN KEY - 外键
	//CHECK - 条件检查
	//DEFAULT - 默认
static const char* create_sql =	"CREATE TABLE  Record("\
								"USN  CHAR(20) PRIMARY KEY UNIQUE NOT NULL,"\
								"MAC  CHAR(20) UNIQUE,"\
								"W_MAC  CHAR(20) UNIQUE,"\
								"TIME  CHAR(20)) ;";

static const char* create_EntrySql =  "CREATE TABLE  RepeatRecord("\
	                                  "USN  CHAR(20) ,"\
	                                  "MAC  CHAR(20) ,"\
	                                  "W_MAC  CHAR(20) ,"\
	                                  "TIME  CHAR(20)) ;";
DB::DB(void):m_pDB(NULL)
{
}

DB::~DB(void)
{
	if (m_pDB)
	{
		sqlite3_close(m_pDB);
		m_pDB = NULL;
	}
}

bool DB::OpenDB(const char* name, sqlite3 **ppDB)
{
	int ret = sqlite3_open(name, &m_pDB);
	if (SQLITE_OK != ret)
	{
		AfxMessageBox(_T("打开数据库失败"));
		return false;
	}
	return true;
}

bool DB::CreateTable(const char* sql)
{
	if (!m_pDB || !sql) return false;
	char *errMsg = NULL;
	int ret = sqlite3_exec(m_pDB, sql, 0, 0, &errMsg);
	if (SQLITE_OK != ret)
	{
		CSt
### SQLite3 数据限制方法 在 SQLite3 中,可以通过多种方式对数据进行限制。主要的方法包括使用 `WHERE` 子句、`LIMIT` `OFFSET` 关键字以及定义结构设置约束。 #### 使用 `WHERE` 子句过滤数据 `WHERE` 子句用于指定查询条件,从而筛选符合条件的记录。这使得可以从数据库中检索特定的数据集[^5]。 ```sql SELECT * FROM my_table WHERE some_column = 'some_value'; ``` 此 SQL 语句会返回 `my_table` 中 `some_column` 列等于 `'some_value'` 的所有行。 #### 应用 `LIMIT` `OFFSET` 控制结果数量 为了限制查询返回的结果数目,可以使用 `LIMIT` 来限定最大返回行数;如果还需要跳过某些初始行,则可配合 `OFFSET` 使用。 ```sql SELECT * FROM my_table LIMIT 10 OFFSET 5; ``` 上述命令示从第 6 行开始取回最多 10 行记录(因为偏移量是从零算起)。 #### 定义结构加入约束 当创建新或修改现有,在字段声明部分添加适当约束能有效防止非法数据进入数据库。常见的约束有: - **NOT NULL**: 确保该列不允许为空值。 - **UNIQUE**: 同一列内的任何两行都不能拥有相同的非空值。 - **CHECK**: 对插入或更新操作施加逻辑达式的检验规则。 - **PRIMARY KEY**: 组合唯一性非空性的双重保障,并自动建立索引提高查找效率。 - **FOREIGN KEY**: 实现跨参照完整性检查[^4]。 例如,下面是一个带有多个约束的新定义例子: ```sql CREATE TABLE employees ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, age INT CHECK (age >= 18), department_id INTEGER REFERENCES departments(id) ); ``` 这段代码建立了名为 `employees` 的格,其中规定了员工编号 (`id`) 必须是唯一的且不为空;姓名 (`name`) 不得为空字符串;年龄 (`age`) 至少要达到法定工作年限;部门关联外键指向另一个叫作 `departments` 的里的主键 `id`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值