一、序
sqlite@R_301_457@只用简单的几个文件就可以实现@R_301_457@操作,避免了其他繁琐的设置,小巧方便,所以是一个非常不错的嵌入式@R_301_457@。同时sqlite@R_301_457@在简单的C++/MFC程序中应用起来也比较方便。
本文介绍了sqlite3@R_301_457@的基本命令,包括@R_301_457@的创建、表的创建、字段的定义及其属性设置、记录的插入、记录的修改、记录的删除以及记录的查询等,基本覆盖了@R_301_457@常用的一些操作。然后,介绍sqlite3的常用函数借口API,用于执行@R_301_457@命令。
sqlite3库及头文件可以在本人的资源中下载,地址:http://download.csdn.net/detail/qingyang8513/9445022(直接给出需要的结果文件,无需自己生成,测试通过)
sqlite3@R_301_457@在VS2010环境下的编程示例可以参考本人微博【MFC-9】VS2010/MFC基于对话框的sqlite3@R_301_457@编程(http://www.jb51.cc/article/p-wwmijxge-yz.html)
下面依次介绍sqlite3的基本语法和常用命令。
二、sqlite3的基本语法
1、创建@R_301_457@:参考如下
int rc = sqlite3_open("Database\\GoodsInformation.db",&m_sql_database);// 打开@R_301_457@,不存在时创建 if (rc) { sqlite3_close(m_sql_database); //打开失败! MessageBox(_T("@R_301_457@打开失败,请检查后再操作!"),NULL,MB_ICONSTOP); return FALSE; }
sql = "CREATE TABLE IF NOT EXISTS goods_table_one(Goods_Id varchar(20) PRIMARY KEY NOT NULL,Goods_Name varchar(20) NOT NULL,Goods_Brand varchar(10),Goods_Color varchar(10),Goods_Price varchar(20) NOT NULL,Goods_Price_In varchar(20) NOT NULL,Goods_Num varchar(20) NOT NULL,Goods_Unit varchar(10) NOT NULL,System_Note varchar(20))";// 创建一个表格
字段类型及常用属性:
1)NOT NULL / NULL:非空,约束列不能为空,否则报错;
2)PRIMAR KEY:主键,a)主键的值必须唯一,用于标识每一条记录,如学生的学号;b)主键同时也是一个索引,通过主键查找记录速度较快;c)主键如果是整数类型,该列的值可以自动增长;
3)UNIQUE:唯一,除主键外,约束其他列的数据的值唯一;
4)varchar / TEXT:字符串;
5)INTERGER / int:整型;
6)REAL:浮点型;
7)BLOB:二进制数/布尔型;
8)CHECK:条件检查,约束该列的值必须符合条件才可存入;
9)DEFAULT:默认值,列数据中的值基本都是一样的,这样的字段列可设为默认值。
sql = sqlite3_mprintf("INSERT INTO goods_table_one (Goods_Id,Goods_Name,Goods_Brand,Goods_Color,Goods_Price,Goods_Price_In,Goods_Num,Goods_Unit,System_Note) VALUES ('%s','%s','%s')",inputGoodTemp->goods.CString@R_301_294@ar(inputGoodTemp->goods.ID),inputGoodTemp->goods.CString@R_301_294@ar(inputGoodTemp->goods.Name),inputGoodTemp->goods.CString@R_301_294@ar(inputGoodTemp->goods.Brand),inputGoodTemp->goods.CString@R_301_294@ar(inputGoodTemp->goods.Color),inputGoodTemp->goods.CString@R_301_294@ar(inputGoodTemp->goods.Price),inputGoodTemp->goods.CString@R_301_294@ar(inputGoodTemp->goods.Price_In),inputGoodTemp->goods.CString@R_301_294@ar(inputGoodTemp->goods.GoodsNum),inputGoodTemp->goods.CString@R_301_294@ar(inputGoodTemp->goods.Unit),inputGoodTemp->goods.CString@R_301_294@ar(inputGoodTemp->goods.System_Note));
4、修改记录:update table_name set field1=val1,field2=val2 where expression;
5、删除记录:delete from table_name [where expression];
sql = sqlite3_mprintf("DELETE FROM goods_table_one WHERE Goods_Id='%s'",inputGoodTemp->goods.CString@R_301_294@ar(inputGoodTemp->goods.ID));
6、查询记录:select columns from table_name [where expression];
sql = sqlite3_mprintf("select %s from %s WHERE Name = '%s'","Password","user_database",szTemp);
1)查询输出所有数据记录
select * from table_name;
2)限制输出数据记录数量
select * from table_name limit val;
3)升序输出数据记录
select * from table_name order by field asc;
4)降序输出数据记录
select * from table_name order by field desc;
5)条件查询
select * from table_name where expression;
select * from table_name where field in ('val1','val2','val3');
select * from table_name where field between val1 and val2;
6)查询记录数目
select count (*) from table_name;
7)区分列数据
select distinct field from table_name;
有一些字段的值可能会重复出现,distinct去掉重复项,将列中各字段值单个列出。
7、建立索引:create index index_name on table_name(field);
当说数据表存在大量记录,索引有助于加快查找数据表速度。
8、删除索引:
1)drop table table_name;
2)drop index index_name;
三、sqlite3常用方法(API)
1)sqlite3 *db,@R_301_457@句柄,跟文件句柄FILE很类似;
2)sqlite3_stmt *stmt,这个相当于ODBC的Command对象,用于保存编译好的sql语句;
3)sqlite3_open(),打开@R_301_457@,没有@R_301_457@时创建;
5)sqlite3_step(),在调用sqlite3_prepare后,使用这个函数在记录集中移动;
6)sqlite3_close(),关闭@R_301_457@文件;
7)sqlite3_column_text(),取text类型的数据;
8)sqlite3_column_blob(),取blob类型的数据;
9)sqlite3_column_int(),取int类型的数据;
示例:
1、创建@R_301_457@句柄:
sqlite3* m_sql_database;
int rc = sqlite3_open("Database\\password.db",MB_ICONSTOP); return; }
3、执行sql语句:
char *sql = "CREATE TABLE IF NOT EXISTS user_database(Id int PRIMARY KEY NOT NULL,Name varchar(20) NOT NULL UNIQUE,Password varchar(20) NOT NULL)";// 创建一个表格 if (sqlite3_exec(m_sql_database,sql,&err_msg) != sqlITE_OK) { MessageBox(_T("操作失败,@R_301_457@链表生成错误!"),MB_ICONSTOP); return; } //搜索@R_301_457@中的用户名和密码,然后进行校验 sql = sqlite3_mprintf("select %s from %s WHERE Name = '%s'",szTemp); sqlite3_exec(m_sql_database,&sqlite_Callback_Query_Password,&m_QueryPassword,&err_msg);
其中,
1)sqlite_Callback_Query_Password为自定义回调函数,定义如下:
int sqlite_Callback_Query_Password(void * userData,int numCol,char ** colData,char ** colName)
2)char *err_msg:用于保存错误信息的指针
具体使用方法可以直接搜索响应的函数,即可得到详细的解释,这里不再介绍。