Sqllite的一些基础操作

基本语法:
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;

}


扫描二维码,在手机上阅读!

发表评论

电子邮件地址不会被公开。 必填项已用*标注