SQlite3基本语法及常用方法API

一、序


SQlite数据库只用简单的几个文件就可以实现数据库操作,避免了其他繁琐的设置,小巧方便,所以是一个非常不错的嵌入式数据库。同时SQlite数据库在简单的C++/MFC程序中应用起来也比较方便。


本文介绍了SQlite3数据库的基本命令,包括数据库的创建、表的创建、字段的定义及其属性设置、记录的插入、记录的修改、记录的删除以及记录的查询等,基本覆盖了数据库常用的一些操作。然后,介绍SQlite3的常用函数借口API,用于执行数据库命令。

SQlite3库及头文件可以在本人的资源中下载,地址:http://download.csdn.net/detail/qingyang8513/9445022(直接给出需要的结果文件,无需自己生成,测试通过)


SQlite3数据库在VS2010环境下的编程示例可以参考本人微博【MFC-9】VS2010/MFC基于对话框的SQlite3数据库编程(http://www.jb51.cc/article/p-wwmijxge-yz.html


下面依次介绍SQlite3的基本语法和常用命令。


二、SQlite3的基本语法


1、创建数据库:参考如下

int rc = sqlite3_open("Database\\GoodsInformation.db",&m_sql_database);// 打开数据库,不存在时创建
if (rc)   
{
	sqlite3_close(m_sql_database);  //打开失败! 
	MessageBox(_T("数据库打开失败,请检查后再操作!"),NULL,MB_ICONSTOP);
	return FALSE;
}


2、新建表及字段设置:create table table_name(field1 type1,field2 type1,...);(大小写均可)
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:默认值,列数据中的值基本都是一样的,这样的字段列可设为默认值。


3、插入新记录:insert into table_name(field1,field2,...) values(val1,val2,...);
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.CStringToChar(inputGoodTemp->goods.ID),inputGoodTemp->goods.CStringToChar(inputGoodTemp->goods.Name),inputGoodTemp->goods.CStringToChar(inputGoodTemp->goods.Brand),inputGoodTemp->goods.CStringToChar(inputGoodTemp->goods.Color),inputGoodTemp->goods.CStringToChar(inputGoodTemp->goods.Price),inputGoodTemp->goods.CStringToChar(inputGoodTemp->goods.Price_In),inputGoodTemp->goods.CStringToChar(inputGoodTemp->goods.GoodsNum),inputGoodTemp->goods.CStringToChar(inputGoodTemp->goods.Unit),inputGoodTemp->goods.CStringToChar(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.CStringToChar(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,数据库句柄,跟文件句柄FILE很类似;

2)sqlite3_stmt *stmt,这个相当于ODBC的Command对象,用于保存编译好的SQL语句;

3)sqlite3_open(),打开数据库,没有数据库时创建;

4)sqlite3_exec(),执行非查询的sql语句;

5)Sqlite3_step(),在调用sqlite3_prepare后,使用这个函数在记录集中移动;

6)Sqlite3_close(),关闭数据库文件;

还有一系列的函数,用于从记录集字段中获取数据,如

7)sqlite3_column_text(),取text类型的数据;

8)sqlite3_column_blob(),取blob类型的数据;

9)sqlite3_column_int(),取int类型的数据;


示例:

1、创建数据库句柄:

sqlite3* m_sql_database;


2、打开与关闭数据库:

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("操作失败,数据库链表生成错误!"),MB_ICONSTOP);
	return; 
}
//搜索数据库中的用户名和密码,然后进行校验
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:用于保存错误信息的指针



具体使用方法可以直接搜索响应的函数,即可得到详细的解释,这里不再介绍。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


SQLite架构简单,又有Json计算能力,有时会承担Json文件/RESTful的计算功能,但SQLite不能直接解析Json文件/RESTful,需要用Java代码硬写,或借助第三方类库,最后再拼成insert语句插入数据表,代码非常繁琐,这里就不展示了。参考前面的代码可知,入库的过程比较麻烦,不能只用SQL,还要借助Java或命令行。SPL是现代的数据计算语言,属于简化的面向对象的语言风格,有对象的概念,可以用点号访问属性并进行多步骤计算,但没有继承重载这些内容,不算彻底的面向对象语言。...
使用Python操作内置数据库SQLite以及MySQL数据库。
破解微信数据库密码,用python导出微信聊天记录
(Unity)SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不受版权限制。本教程将告诉您如何使用 SQLite 编程,并让你迅速上手。.................................
安卓开发,利用SQLite实现登陆注册功能
相比大多数数据库而言,具有等优势,广泛应用于、等领域。
有时候,一个项目只有一个数据库,比如只有SQLite,或者MySQL数据库,那么我们只需要使用一个固定的数据库即可。但是一个项目如果写好了,有多个用户使用,但是多个用户使用不同的数据库,这个时候,我们就需要把软件设计成可以连接多个数据库的模式,用什么数据库,就配置什么数据库即可。4.Users实体类,这个实体类要和数据库一样的,形成一一对应的关系。11.Sqlite数据库,需要在代码里面创建数据库,建立表,再建立数据。8.我们开启MySQL数据库,然后进行调试,看程序的结果。2.安装SqlSugar。
基于Android的背单词软件,功能强大完整。
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统。说白了就是使用起来轻便简单,
Android的简单购物车案例
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库...
Qt设计较为美观好看的登录注册界面(包含SQLite数据库以及TCP通信的应用)
SQLite是用C语言开发的跨平台小型数据库,可嵌入其他开发语言,也可在单机执行。SPL是用Java开发的跨平台的数据计算语言,可嵌入Java,可在单机执行,可以数据计算服务的形式被远程调用。两者的代码都是解释执行的。...
新建库.openDATA_BASE;新建表createtableLIST_NAME(DATA);语法:NAME关键字...<用逗号分割>删除表droptableNAME;查看表.schema查看表信息新建数据insertintoLIST_NAMEvalues();语法:CLASS,PARAMETER...,CLASS是类别,PARAMETER是参数<用逗号分割新建的
importsqlite3classDemo01:def__init__(self):self.conn=sqlite3.connect("sql_demo_001.db")self.cursor1=self.conn.cursor()self.cursor1.execute("select*fromtable_001wherename=?andid=?",('ssss&#0
 在客户端配置文件<configuration>节点下,添加:<connectionStrings>      <add name="localdb" connectionString="Data Source=config/local.db;Version=3;UseUTF16Encoding=True;" providerName="System.Data.SQLite.SQLiteFactory"/&g
提到锁就不得不说到死锁的问题,而SQLite也可能出现死锁。下面举个例子:连接1:BEGIN(UNLOCKED)连接1:SELECT...(SHARED)连接1:INSERT...(RESERVED)连接2:BEGIN(UNLOCKED)连接2:SELECT...(SHARED)连接1:COMMIT(PENDING,尝试获取EXCLUSIVE锁,但还有SHARED锁未释放,返回SQLITE_BUSY)连接2:INSERT...
SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。在使用SQLite前,我们先要搞清楚几个概念:表
设计思想————首先要确定有几个页面、和每个页面的大致布局由于是入门,我也是学习了不是很长的时间,所以项目比较low。。。。第一个页面,也就是打开APP的首页面:今天这个博客,先实现添加功能!:首先对主界面进行布局:其中activity_main.xml的代码为<?xmlversion="1.0"encoding="