在linux下我们首先要获取root权限
当然也可是使用 sudo命令
接着让我们来安装sqlite3吧!博主当然是已经安装好了!
别急,的确你是安装好了sqlite3但是有一点必须要记住,你还没有安装对应的api库,所谓的api库就是在你使用c接口编程时导致的各种没有定义和找不到!
于是我们接着安装好它的库,我的是已经安装好后的了!
OK,下面便到了我们理解SQL语言的步骤了!
-
sql功能
- 数据定义(DDL):用户定义、删除和修改数据模式
- 数据查询(DQL):用于查询数据
- 数据操纵(DML):用于增、删、改数据
- 数据控制(DCL):用于控制数据访问权限
其实它的语言非常像我们小学时代最喜欢在作文里出现的几个句子一样!
一个动词 (干什么) 对 ****(对象)where (条件);
记住:它跟咱们写代码一样都是以;号结尾的,我经常犯忘记写分号的错误!
它还有个非常不同于我们一般写代码的地方是:它不区分大小写的哟!
-
创建表
Create table[表明](创建的各个元素)
Create table student (id integer primary key ,name text);
-
改变表
ALTER TABLE table { RENAME TO name | ADD COLUMN column_def }
我们基本不会用到这个,我也没有去注意过它,等到大家真的去研究数据库再说吧
-
删除
Delete from [表名]where<条件>
Delete from student where id = 1;
-
查询
Select * from[表名]
其实查询用许许多多,后面在讲API调用的时候,我们细细讲来
API linux的大餐到了
1、打开数据库
- int sqlite3_open(const char* fileName, sqlite3** ppDB);
- 函数功能:打开一个数据库;若该数据库文件不存在,则自动创建。打开或者创建数据库的命令会被缓存,直到这个数据库真正被调用的时候才会被执行。
- 输入参数:fileName,待打开的数据库文件名称,包括路径,以'\0'结尾; 特别说明:SQLite 支持内存数据库,内存方式存储使用文件名":memory:"
- 输出参数:ppDB,返回打开的数据库句柄;
-
返回值:执行成功返回SQLITE_OK,否则返回其他值;
2、关闭数据库
- int sqlite3_close(sqlite3* pDB);
- 函数功能:关闭一个打开的数据库;
- 输入参数:pDB,打开的数据库句柄
- 输出参数: 无
-
返回值:执行成功返回SQLITE_OK,否则返回其他值
3、执行sql
- int sqlite3_exec(sqlite3* pDB, const char *sql, sqlite_callback callback, void*para, char** errMsg);
- 函数功能:编译和执行零个或多个SQL 语句,查询的结果返回给回调函数callback
- 输入参数:pDB,数据库句柄;sql,待执行的SQL 语句字符串,以'\0'结尾;callback,回调函数,用来处理查询结果,如果不需要回调(比如做insert 或者delete 操作时),可以输入NULL;para,用户传入的参数,可以为NULL,该参数指针最终会被传给回调函数callback,供用户在回调函数中使用;
- 输出参数:errMsg,返回错误信息,注意是指针的指针。
-
返回值:执行成功返回SQLITE_OK,否则返回其他值
还有一种是专门从数据库中取出来,然后读取出来的
- int sqlite3_prepare(sqlite3* pDB, const char* sql , int maxSqlLen,sqlite3_stmt** ppStmt, const char**pTail);
- 函数功能:将SQL 语句编译成SQLite 能够识别的二进制字节码(也即SQL声明,statement),结果保存在ppStat 中。注:输入的参数中只有第一个SQL语句会被编译。SQL 语句间通过分号';'分隔。
-
输入参数:pDB ,数据库句柄;sql ,待编译的SQL 语句字符串;
maxSqlLen,SQL 语句的最大长度,如果此值小于0,SQLite 会自动计算字符串长度;
- 输出参数:ppStmt,编译后SQL 语句存放位置;pTail,未编译的SQL 语句的起始位置,一般输入NULL 就可以了。
-
返回值:执行成功返回SQLITE_OK,否则返回其他值
以下是我写的例子:(数据库已经在前面打开了)
int rc;//只是说明rc的类型
sqlite3 * db;//只是说明db的类型 这个数据库指针绝对不是在这定义的!
int ncolumn
rc = sqlite3_prepare(db,"select * from test",-1,&stmt,0);
is_sqlite3_error(rc);//自己写的一个检验是否执行的函数
rc = sqlite3_step(stmt);
ncolumn = sqlite3_column_count(stmt);
while(rc == SQLITE_ROW)
{
for(i = 0; i < ncolumn; i++)
{
printf("%s|",sqlite3_column_text(stmt,i));
}
printf("\n");
rc = sqlite3_step(stmt);
}