sqlite3数据库常用的操作,基于ububtu16.04

 记录sqlite3数据库常用函数接口的使用,.数据库的操作不区分大小:

int sqlite3_open(const char*, sqlite3**);  //打开一个数据库

int sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void*, char**);可以执行任何SQL语句,比如创表、更新、插入和删除操作。但是一般不用它执行查询语句,因为它不会返回查询到的数据。

int sqlite3_close(sqlite3*); //关闭操作完成的数据库

 int sqlite3_prepare_v2(sqlite3 *db, const char *zSql, int nByte,sqlite3_stmt **ppStmt,  const char **pzTail);//这个函数将sql文本转换成一个准备语句(prepared statement)对象,同时返回这个对象的指针。这个接口需要一个数据库连接指针以及一个要准备的包含SQL语句的文本。它实际上并不执行(evaluate)这个SQL语句,它仅仅为执行准备这个sql语句

int sqlite3_step(sqlite3_stmt*); //这个语句执行到结果的第一行可用的位置。继续前进到结果的第二行的话,只需再次调用sqlite3_setp()。继续调用sqlite3_setp()知道这个语句完成,那些不返回结果的语句(如:INSERT,UPDATE,或DELETE),sqlite3_step()只执行一次就返回

int sqlite3_column_int(sqlite3_stmt*, int iCol);//int sqlite3_column系列函数,和sqlite3_prepare_v2函数搭配使用,用来获取一行的数据,第二个参数为数据库一行中的列下标。从第一个不为NULL的开始。

四种类型:

integer(整型)、real(浮点型)、text(文本字符串)、blob(二进制数据)。

关键字:select、insert、update、delete、from、creat、where、desc、order、by、group、table、alter、view、index等,数据库中不能使用关键字命名表和字段。

语法:不区分大小写,每条语句后加";"结尾。编译时没有错误但是执行没有得到正确结果,要检查语法是否正确

环境:ubuntu16.04

安装:

                (1) tar -zxvf sqlite-autoconf-3070500.tar.gz

    (2) cd  sqlite-autoconf-3070500

    (3)  ./configure --prefix=/xx/xxxx(/xx/xxxx表示文件生成目录)

    (4)  make & make install (成功后在/xx/xxxx目录下生成(bin include lib share 4个目录))

        其中bin放置可执行文件sqlite3,./sqlite3 可进入sqlite命令行界面

注意:如果执行./sqlite3没有看到版本号,执行sudo apt-get install sqlite3即可

编译:gcc sqlite3.c -o sqlite3 -lsqlite3


 
#include <stdio.h>
#include <stdlib.h>
#include "sqlite3.h"

									
sqlite3 *db = NULL;
char *errmsg = NULL;
char **result =NULL;
int num_row = 0;
int num_column = 0;
int i = 0;
sqlite3_stmt *stmt = NULL;


//创建数据库
char * create_sqlite3(void)
{
	char *errmsg = NULL;
	int ret = -1;
	//打开数据库
	sqlite3_open("test_sql",&db);
	char *sql = "CREATE TABLE IF NOT EXISTS my_sql(id integer PRIMARY KEY,my_sql_id integer,my_sql_nu integer,my_sql_ip varchar(12),my_sql_cm text);";	

	//可以执行任何SQL语句,比如创表、更新、插入和删除操作。但是一般不用它执行查询语句,因为它不会返回查询到的数据。
	sqlite3_exec(db,sql,NULL,NULL,&errmsg); 
	//printf("ret = %d\n",ret);
		
	return sql;
}
//向数据库插入数据
void insert_data_2_sqlite3(void)
{
	char *errmsg = NULL;
	char *sql1 = "INSERT INTO 'my_sql'VALUES(NULL,12,500,192,'wanda');";
	sqlite3_exec(db,sql1,NULL,NULL,&errmsg);
	char *sql2 = "INSERT INTO 'my_sql'VALUES(NULL,56,501,193,'henda');";
	sqlite3_exec(db,sql2,NULL,NULL,&errmsg);
	char *sql3 = "INSERT INTO 'my_sql'VALUES(NULL,78,502,194,'biguiyuan');";
	sqlite3_exec(db,sql3,NULL,NULL,&errmsg);
	char *sql4 = "INSERT INTO 'my_sql'VALUES(NULL,10,503,195,'wanke');";
	sqlite3_exec(db,sql4,NULL,NULL,&errmsg);
	
}
//查询所有的数据库
void query_data_sqlite3(char * sql)
{
	//sql = "SELECT *FROM my_sql";
	sql="select *from my_sql where my_sql_nu = 502";
	//创建Table
	//sqlite3_prepare()将SQL语句编译为sqlite内部一个结构体(sqlite3_stmt)
	//该结构体中包含了将要执行的SQL语句的信息
	//第四个参数用来指向输入参数中下一个需要编译的SQL语句存放的 SQLite statement 对象的指针
	sqlite3_get_table(db,sql,&result,&num_row,&num_column,&errmsg);
	
	printf("the query result is:\n");
	printf("num_row=%d,num_column=%d\n",num_row,num_column);
	
	for(i=0;i<(num_row+1)*num_column;i++)
	{
		printf("result[%d]=%s\n",i,result[i]);
	}
	
}
//删除一行
void delete_row_sqlite3(char *sql)
{
	char *errmsg = NULL;
	char **result =NULL;
	int num_row = 0;
	int num_column = 0;
	int i = 0;
	
	
	sql="delete from my_sql where my_sql_nu = 501;""select *from my_sql";
	sqlite3_exec(db,sql,NULL,NULL,&errmsg); 
	sqlite3_get_table(db,sql,&result,&num_row,&num_column,&errmsg);

	printf("after delete one line:\n");
	printf("num_row=%d,num_column=%d\n",num_row,num_column);
	
	for(i=0;i<(num_row+1)*num_column;i++)
	{
		printf("result[%d]=%s\n",i,result[i]);
	}	
}
//增加一行
void add_row_sqlite3(char *sql)
{
	
	sql = "INSERT INTO my_sql VALUES(NULL,241,400,130,'wanda');""select *from my_sql";
	
	sqlite3_exec(db,sql,NULL,NULL,&errmsg); 
	sqlite3_get_table(db,sql,&result,&num_row,&num_column,&errmsg);

	printf("after add one line:\n");
	printf("num_row=%d,num_column=%d\n",num_row,num_column);
	
	for(i=0;i<(num_row+1)*num_column;i++)
	{
		printf("result[%d]=%s\n",i,result[i]);
	}	
}

//修改一行的数据
void updata_sqlite3(char *sql)
{
	
	sql = "UPDATE 'my_sql' SET my_sql_cm = 'baolishanzhuang' where my_sql_cm = 'henda'";
	sqlite3_exec(db,sql,NULL,NULL,&errmsg); 
	sql= "select *from my_sql where my_sql_cm = 'baolishanzhuang'";
	//查找,并取出修改后的数据
	if(sqlite3_prepare_v2(db,sql,-1,&stmt,NULL)==SQLITE_OK)
	{
		while(SQLITE_ROW==sqlite3_step(stmt))
		{
			printf("my_sql_id=%d,my_sql_nu=%d,my_sql_ip=%d,my_sql_cm =%s\n",sqlite3_column_int(stmt, 1)\
			,sqlite3_column_int(stmt, 2),sqlite3_column_int(stmt, 3),sqlite3_column_text(stmt, 4));
		}
	}
}

int main(void)
{
	char *errmsg = NULL;
	char *sql=create_sqlite3();
    insert_data_2_sqlite3();
	query_data_sqlite3(sql);
	delete_row_sqlite3(sql);
	add_row_sqlite3(sql);
	updata_sqlite3(sql);
	//关闭操作完的数据库
	sqlite3_close(db);
	return 0;
} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值