sqllte3有五种基本类型,sqlite3会把其他数据类型转换成以下5类基本数据类型。
1.null,blob?转化为NULL类型。
2.integer类型转换为INTEGER类型。
3.real?double和float类型转换为REAL类型。
4.char,clob?test和varchar类型转换为TEXTl类型。
5.其余数据类型都转换为NUMERIC类型。
实例:
新建一个数据库:sqlite3 test.db
如果数据库test.db已经存在,则命令就会在当前目录下打开test.db,如果不存在,则创建。事实上,SQLite3并不会马上创建test.db,而是在等第一个表创建完成后才在物理上创建数据库。
创建一个表:create table test_table(name,sex,age);
由于SQLIte3能根据插入数据的实际类型动态改变列的类型,所以在create语句中并不要求给出列的类型。
创建索引:create index test_index on test_table(name);
操作数据:
插入:insert into test_table values('xiaoming','male',2);
更新:update test_table set age='19' where name = 'xiaoming‘;
删除:delete from test_table where name = 'xiaoming';
批量操作数据库:
sqlite>begin; //批量开始
sqlite>insert into test_table values ('xiaoming','male','18');
sqlite>insert into test_table values ('xiaopeng','male','18');
sqlite>commit; //批量结束
结束后才会把数据插入数据库。
数据库的导入导出
导出:sqlite3 test.db ".dump“>test.sql;
rm test.db;
导入:
sqlite3 test.db<test.sql;
SQLite编程接口:
数据库的打开:sqlite_open
int sqlite3_open(const char* dbname,sqlite3 **db)
dbname:数据库名称,db表示数据库的句柄;
返回值:0成功,1表示失败。
数据库的关闭;sqlite_colse
int sqlite_close(sqlite3 *db)
实例:
#include <stdio>
#incldue <sqlite3.h>
static sqlite3 *db =null;
int main()
{
int rc;
rc=sqlitee_open("test.db",&db);
if(rc)
{
printf("open error\n");
}
else
{
printf("open succese\n");
}
sqlite3_colse(db);
return 0;
}
gcc -o test test.c -l sqlite3
数据库的语句执行:
int sqlite3_exec(sqlite3 *db,const char *sql,int (*callback)(void*,int,char**,char **),void *,char **errmsg);
//db表示数据库,sql表示执行语句,callback表示回滚,errmsg表示错误信息。
回滚(Rollback)指的是程序或数据处理错误,将程序或数据恢复到上一次正确状态的行为。回滚包括程序回滚和数据回滚等类型。
实例:
rc =sqlite3_open("test.db",&db);
rc=sqlite3_exec(db,"insert into test_table values('daobao','male',24)",0,0,&errmsg);
数据库查询语句:
sqlite3_get_table函数:
int sqlite3_get_table(sqlite* db,const char *zSql,char ***pazResult,int *pnRow, int * pnColumn,char **pzErrmsg);
//db表示数据库,zSql表示SQL语句,pazResult,表示查询结构集,pnRow表示结果集的行数,pnColunm表示结果集的列数,errmsg表示错误信息。
sqlite3_free_table函数:
void sqlite3_free_table(char **result);
实例:
#include<stdio.h>
#include<sqlite3.h>
static sqlite3 *db =null;
static char** result =null;
statci char *errmsg =null;
int main()
{
int rc,i ,j;
int nrow;
int ncolumn;
rc=sqlite3_open("test.db",&db);
rc=sqlite3_get_table(db,"select * from test_table",&result,&nrow,&ncolumn,&errmsg);
if(rc)
{
printf("query fail!");
}
else
{
printf("query success!\n");
for(i =0;1<=nrow;i++)
{
for(j=0;j<ncolumn;j++)
{
printf("%s|",Result[i*ncolumn+j]");
}
printf("\n");
}
}
sqlite3_free_table(Result);
sqlte3_close(db);
return 0
}
sqlite3_prepare:把SQL语句编译成字节码,由后面的执行函数(sqlite3_step)函数执行。
int sqlite3_prepare(sqlite3* db,const char *zSql,int nByte,sqlite3_stmt,const char **pTail);
db:数据库指针
zSql:sql语句
nByte:如果nByte小于0,则函数取出zSql中从开始到第一个0终止符的内容;如果nByte不是负的,那么它就是这个函数能从zSql中读取的字节数的最大值。如果nBytes非负,zSql在第一次遇见’/000/或’u000’的时候终止
pzTail:上面提到zSql在遇见终止符或者是达到设定的nByte之后结束,假如zSql还有剩余的内容,那么这些剩余的内容被存放到pZTail中,不包括终止符
ppStmt:能够使用sqlite3_step()执行的编译好的准备语句的指针,如果错误发生,它被置为NULL,如假如输入的文本不包括sql语句。调用过程必须负责在编译好的sql语句完成使用后使用sqlite3_finalize()删除它。
sqlite3_step:执行SQL语句
int sqlite3_step(sqlite3_stmt*)
实例:
rc = sqlite3_open("test.db",&db);
rc=sqlite3_prepare(db,“select * from test_table",-1,&stmt,0);