基本语法:
CREATE TABLE database_name.table_name(
column1 datatype PRIMARY KEY(one or more columns),
column2 datatype,
column3 datatype,
.....
columnN datatype,
);
DROP TABLE database_name.table_name;
sudo apt-get install sqlite3
查看数据库信息
sqlite>.database
查看所有表
.table
查看所有表的创建语句
sqlite>.schema
查看某个表的创建语句
.schema table_name
退出命令
.quit
SQLite - C的API接口
打开数据库
sqlite3_open(const char filename, sqlite3 *ppDb)
功能:打开数据库
参数:
filename:数据库文件名,若文件名包含 ASCII 码表范围的之外的字符,则其必需是(UTF-8)编码。
ppDb:数据库标识,此结构体为数据库操作句柄。通过此句柄可对数据库文件进行相应操作。
返回值:成功返回 SQLITE_OK,失败返回非 SQLITE_OK。
关闭数据库
sqlite3_close(sqlite3 *ppDb)
功能:关闭数据库、释放打开数据库时申请的资源。
参数:ppDb是数据库的标识。
返回值:成功返回 SQLITE_OK。失败返回非 SQLITE_OK。
数据库回调方法
sqlite3_exec(sqlite3 qqDb, const char sql, exechandler_t callback, void data, char *errmsg)
功能:执行 sql 指向的 SQL 语句,若结果集不为空,函数会调用函数指针 callback 所指向的函数。
参数:
qqDb:数据库的标识。
sql:SQL 语句(一条或多条),以’;’结尾。
callback:是回调函数指针,当这条语句执行之后,sqlite3 会去调用你提供的这个函数。
arg:当执行 sqlite3_exec 的时候传递给回调函数的参数。
errmsg:存放错误信息的地址,执行失败后可以查阅这个指针。
回调函数指针
让我们先了解下回调函数的一些细节,这将在我们的实例使用到。这个回调提供了一个从 SELECT 语句获得结果的方式。它声明如下:
typedef int (*sqlite3_callback)(
void, / sqlite3_exec()的第4个参数提供的数据 */
int, / 行中的列数/
char*, / 表示行中字段的字符串数组*/
char* /表示列名的字符串数组*/
);
连接数据库
下面的 C 代码段显示了如何连接到一个现有的数据库。如果数据库不存在,那么它就会被创建,最后将返回一个数据库对象。
include <stdio.h>
include "sqlite3.h"
define STU_DB "./stu_info.db"
int main(int argc, char const *argv[])
{
sqlite3 *db;
int ret = 0;
if ((ret = sqlite3_open(STU_DB,&db)) != SQLITE_OK)
{
printf("open error!\n");
return -1;
}
else
{
printf("open database successfully\n");
}
sqlite3_close(db);
return 0;}
从官网下载sqlite3文件,然后在当前程序目录下放sqlite3.c和sqlite3.h文件。
创建数据库表
下面的 C 代码段将用于在先前创建的数据库中创建一个表:
include <stdio.h>
include "sqlite3.h"
define STU_DB "./sql_form.db"
static int callback(void * para, int n_column,
char column_value, char column_name)
{
int i = 0;
printf("para= %d\n",*((int *)para)); //sqlite3_exec 传给此函数的参数
for (i = 0; i < n_column; i++) //结果集的列数
{
printf("column_value = %s \t column_name = %s \n",column_value[i],column_name[i]);
}
printf("\n");
return 0;
}
int main(int argc, char const *argv[])
{
sqlite3 *db;
int ret = 0;
char *sql;
char *zErrMsg = 0;
if ((ret = sqlite3_open(STU_DB,&db)) != SQLITE_OK) //打开数据库
{
printf("open error!\n");
return -1;
}
else
{
printf("open database successfully\n");
}
//公司人员信息表
sql = "CREATE TABLE COMPANY(" \
"ID INT PRIMARY KEY NOT NULL," \
"NAME TEXT NOT NULL," \
"AGE INT NOT NULL," \
"ADDRESS CHAR(50)," \
"SALARY REAL );";
if ((ret = sqlite3_exec(db,sql,callback,0,&zErrMsg)) != SQLITE_OK )
{
printf("Sql error is =%s \n",zErrMsg);
return 0;
}
else
{
printf("Table create successfully\n");
}
sqlite3_close(db);
return 0;}
INSERT 操作
在原先的数据库上插入数据。
include <stdio.h>
include "sqlite3.h"
define STU_DB "./sql_form.db"
static int callback(void * para, int n_column,
char column_value, char column_name)
{
int i = 0;
for (i = 0; i < n_column; i++) //结果集的列数
{
printf("column_value = %s \t column_name = %s \n",column_value[i],column_name[i]);
}
printf("\n");
return 0;
}
int main(int argc, char const *argv[])
{
sqlite3 *db;
int ret = 0;
char *sql;
char *zErrMsg = 0;
if ((ret = sqlite3_open(STU_DB,&db)) != SQLITE_OK) //打开数据库
{
printf("open error!\n");
return -1;
}
else
{
printf("open database successfully\n");
}
//公司人员信息表,插入数据
sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \
"VALUES (1, 'Paul', 111, 'California', 20000.00 ); " \
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \
"VALUES (2, 'Allen', 222, 'Texas', 15000.00 ); " \
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \
"VALUES (3, 'Teddy', 333, 'Norway', 20000.00 );" \
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \
"VALUES (4, 'Mark', 444, 'Rich-Mond ', 65000.00 );";
if ((ret = sqlite3_exec(db,sql,callback,0,&zErrMsg)) != SQLITE_OK )
{
printf("Sql error is =%s \n",zErrMsg);
return 0;
}
else
{
printf("Table create successfully\n");
}
sqlite3_close(db);
return 0;}
插入数据如下图:
SELECT 操作
下面的 C 代码段显示了如何从前面创建的 COMPANY 表中获取并显示记录
include <stdio.h>
include "sqlite3.h"
define STU_DB "./sql_form.db"
static int callback(void * para, int n_column,
char column_value, char column_name)
{
int i = 0;
printf("para= %s\n",(const char *)para); //sqlite3_exec 传给此函数的参数
for (i = 0; i < n_column; i++) //结果集的列数
{
printf("column_value = %s \t column_name = %s \n",column_value[i],column_name[i]);
}
printf("\n");
return 0;
}
int main(int argc, char const *argv[])
{
sqlite3 *db;
int ret = 0;
char *sql;
char *zErrMsg = 0;
const char *test = "Sqlite3 database learning";
if ((ret = sqlite3_open(STU_DB,&db)) != SQLITE_OK) //打开数据库
{
printf("open error!\n");
return -1;
}
else
{
printf("open database successfully\n");
}
//公司人员信息表,插入数据
sql = "SELECT * from COMPANY";
if ((ret = sqlite3_exec(db,sql,callback,(void*)test,&zErrMsg)) != SQLITE_OK )
{
printf("Sql error is =%s \n",zErrMsg);
return 0;
}
else
{
printf("Table create successfully\n");
}
sqlite3_close(db);
return 0;}
输出结果:
UPDATE 操作
下面的 C 代码段显示了如何从前面创建的 COMPANY 表中更新并显示记录:
include <stdio.h>
include "sqlite3.h"
define STU_DB "./sql_form.db"
static int callback(void * para, int n_column,
char column_value, char column_name)
{
int i = 0;
printf("para= %s\n",(const char *)para); //sqlite3_exec 传给此函数的参数
for (i = 0; i < n_column; i++) //结果集的列数
{
printf("column_value = %s \t column_name = %s \n",column_value[i],column_name[i]);
}
printf("\n");
return 0;
}
int main(int argc, char const *argv[])
{
sqlite3 *db;
int ret = 0;
char *sql;
char *zErrMsg = 0;
const char *test = "Sqlite3 database learning";
if ((ret = sqlite3_open(STU_DB,&db)) != SQLITE_OK) //打开数据库
{
printf("open error!\n");
return -1;
}
else
{
printf("open database successfully\n");
}
//公司人员信息表,更新ID为2的数据
sql = "UPDATE COMPANY set SALARY = 25000.00 where ID=2; " \
"SELECT * from COMPANY";
if ((ret = sqlite3_exec(db,sql,callback,(void*)test,&zErrMsg)) != SQLITE_OK )
{
printf("Sql error is =%s \n",zErrMsg);
return 0;
}
else
{
printf("Table create successfully\n");
}
sqlite3_close(db);
return 0;}
输出结果:
输出结果可以看出,值已经改变,再看看数据库是否真的改变呢!
DELETE 操作
下面的 C 代码段显示了如何使用 DELETE 语句删除任何记录,然后从 COMPANY 表中获取并显示剩余的记录:
include <stdio.h>
include "sqlite3.h"
define STU_DB "./sql_form.db"
static int callback(void * para, int n_column,
char column_value, char column_name)
{
int i = 0;
printf("para= %s\n",(const char *)para); //sqlite3_exec 传给此函数的参数
for (i = 0; i < n_column; i++) //结果集的列数
{
printf("column_value = %s \t column_name = %s \n",column_value[i],column_name[i]);
}
printf("\n");
return 0;
}
int main(int argc, char const *argv[])
{
sqlite3 *db;
int ret = 0;
char *sql;
char *zErrMsg = 0;
const char *test = "Sqlite3 database learning";
if ((ret = sqlite3_open(STU_DB,&db)) != SQLITE_OK) //打开数据库
{
printf("open error!\n");
return -1;
}
else
{
printf("open database successfully\n");
}
//公司人员信息表,更新ID为2的数据
sql = "DELETE from COMPANY where ID=2; " \
"SELECT * from COMPANY";
if ((ret = sqlite3_exec(db,sql,callback,(void*)test,&zErrMsg)) != SQLITE_OK )
{
printf("Sql error is =%s \n",zErrMsg);
return 0;
}
else
{
printf("Table create successfully\n");
}
sqlite3_close(db);
return 0;}