IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> SQLite数据库入门笔记 -> 正文阅读

[大数据]SQLite数据库入门笔记

Linux下SQLite数据库的安装

方法一:
SQLite官网下载。从源代码区下载 sqlite-autoconf-*.tar.gz
安装方法:

$ tar xvzf sqlite-autoconf-3071502.tar.gz
$ cd sqlite-autoconf-3071502
$ ./configure --prefix=/usr/local
$ make
$ make install

方法二:
在线安装

$ sudo apt-get install sqlite3

命令行输入sqlite3出现,以下即为安装成功
sqlite3安装成功

SQLite3基本命令

1.系统命令——以“."开头的命令
.help:查看帮助
.quit:退出
.exit:退出
.schema:查看当前表的结构
.databases:查看数据库文件的详细信息
.table:查看当前数据库下的表格

2.sql命令——不以“."开头,但要以“;”结尾的命令
创建一张数据库表stu
create table stu(id Integer, name char, score Integer);

插入一条记录
insert into stu values(1001, 'zhangsan', 80);//全部字段插入
insert into stu (id, name)values(1003, 'wangwu'); //部分字段插入

查询表的记录
select * from stu; //查看表的全部字段记录
select name , score from stu; //查看表的部分字段记录
select * from stu where score=80;
select * from stu where score=80 and name='zhangsan';
select * from stu where score=80 or name='zhangsan';

删除一条记录
delete from stu ; //删除整张表
delete from stu where id=1001; //删除id=1001的记录

更新一条记录
update stu set name='wangwu' , score=88 where id=1003;
//把id=1003的记录的name改为wangwu,score改为88

插入一列
alter table stu add column address char;

删除若干列
sqlite3不支持删除列,要间接删除列
步骤1:创建一张新的表
create table stu1 as select id ,name, score from stu;
步骤2:删除原先的表
drop table stu;
步骤3:将新表的名字改成旧表的名字
alter table stu1 rename to stu;

SQLite3 C语言编程接口

1、打开数据库
int sqlite3_open(const char *filename, sqlite3 **ppDb);
filename:数据库文件路径名
ppDb :sqlite操作句柄(指针)
返回值:成功返回SQLITE_OK,失败返回错误码

2、关闭数据库
int sqlite3_close(sqlite3* db);
db:sqlite操作句柄(指针)
返回值:成功返回SQLITE_OK,失败返回错误码

3、得到数据库操作的错误信息
const char *sqlite3_errmsg(sqlite3* db);
返回值:错误信息的首地址

4、执行一条sql语句(使用回调函数)

int sqlite3_exec(sqlite3 *db, const char *sql, int (*callback) (void*,int,char**,char**), void *arg, char **errmsg );
db:数据库操作句柄
sql:一条sql语句
callback:回调函数,只有sql语句为查询语句时,才会执行此语句
arg:给回调函数传参
errmsg:错误信息
int (callback)(void,int,char**,char**):查询到结果,是一个函数指针,传函数名即可
返回值:成功SQLITE_OK

callback回调函数
typedef int (*sqlite3_callback) (void *para, int f_num, char **f_value, cahr **f_name);
功能:每找到一条记录自动执行一次回调函数
para:传递给回调函数的参数
f_num:记录中包含的字段数目
f_value:包含每个字段的指针数组
f_name:包含每个字段名称的指针数组
返回值:成功返回0,失败返回-1

5、执行一条sql语句(不使用回调函数)
ps:官网不推荐
int sqlite3_get_table(sqlite3 *db, const char *sql, char ***resultp, int *nrow, int *ncolumn, char **errmsg);
db:数据库句柄
sql:一条SQL语句
resultp:查询结果结果的指针
nrow:结果行数
ncolumn:结果列数
errmsg:错误信息的指针的地址
返回值:成功返回0,失败返回错误码

C语言实现sqlite数据库的增删改查

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

#define DATEBASE "stu.db"

int do_insert(sqlite3 *db);  //增
int do_delete(sqlite3 *db);  //删
int do_query(sqlite3 *db);   //查(使用回调函数)
int do_query1(sqlite3 *db);  //查(不使用回调函数)
int do_update(sqlite3 *db);  //改

int main(int argc, char **argv)
{
	sqlite3 *db;
	char *errmsg;
	int cmd = 0;

	//1.open a sqlite
	if(sqlite3_open(DATEBASE , &db) != SQLITE_OK){
		printf("error:%s\n", sqlite3_errmsg(db));
	}
	else{
		printf("open sqlite3 success.\n");
	}

	//2.create a new datebase table
	if(sqlite3_exec(db, "create table stu(id Integer, name char, score Integer);", NULL, NULL, &errmsg) != SQLITE_OK){
		printf("error:%s\n", errmsg);
	}
	else{
		printf("create sqlite3 success.\n");
	}
	
	while(1){
		printf("***********************************************\n");
		printf("1.insert 2.delete 3.query 4.update 5.quit\n");
		printf("***********************************************\n");
		printf("please input a number:");
		scanf("%d", &cmd);
		getchar();
		
		switch(cmd){
			case 1:    //增
				do_insert(db);
				break;
			case 2:    //删
				do_delete(db);
				break;
			case 3:    //查
				//do_query(db);
				do_query1(db);
				break;
			case 4:    //改
				do_update(db);
				break;
			case 5:    //退
				sqlite3_close(db);
				exit(1);
				break;
			default:
				printf("cmd error\n");
				break;
		}
	}
	return 0;
}

int do_insert(sqlite3 *db)
{
	int id;
	char name[32];
	int score;
	char sql[128] = {};
	char *errmsg;

	printf("please input a id:");
	scanf("%d", &id);
	getchar();

	printf("please input a name:");
	scanf("%s", name);
	getchar();

	printf("please input a score:");
	scanf("%d", &score);
	getchar();

	sprintf(sql, "insert into stu values(%d, '%s', %d);", id, name, score);

	if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK){
		printf("insert error:%s\n", errmsg);
	}
	else{
		printf("insert success.\n");
	}
	return 0;
}

int do_delete(sqlite3 *db)
{
	int id;
	char name[32];
	int score;
	char sql[128] = {};
	char *errmsg;

	printf("please input a id:");
	scanf("%d", &id);
	getchar();

	sprintf(sql, "delete from stu where id=%d;", id);

	if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK){
		printf("delete error:%s\n", errmsg);
	}
	else{
		printf("delete success.\n");
	}
	return 0;
}

int callback(void *para, int f_num, char **f_value, char **f_name)
{
	int i = 0;
	for(i = 0; i < f_num; i++){
		printf("%-11s", f_value[i]);
	}
	putchar(10);

	return 0;
}

int do_query(sqlite3* db)
{
	char sql[128] = {};
	char *errmsg;

	sprintf(sql, "select * from stu;");

	if(sqlite3_exec(db, sql, callback, NULL, &errmsg) != SQLITE_OK){
		printf("query error:%s\n", errmsg);
	}
	else{
		printf("query success.\n");
	}
	return 0;
}

int do_query1(sqlite3* db)
{
	char sql[128] = {};
	char *errmsg;
	char **resultp;
	int nrow;
	int ncolumn;
	int i, j;
	int index;

	sprintf(sql, "select * from stu;");

	if(sqlite3_get_table(db, sql, &resultp, &nrow, &ncolumn, &errmsg) != SQLITE_OK){
		printf("query error:%s\n", errmsg);
	}
	else{
		printf("query success.\n");
	}

	for(i=0; i<ncolumn; i++){  //打印抬头
		printf("%-11s", resultp[i]);
	}
	putchar(10);
	
	index = ncolumn;
	for(i=0; i<nrow; i++){
		for(j=0; j<ncolumn; j++){
			printf("%-11s", resultp[index++]);
		}
		putchar(10);
	}
	return 0;
}

int do_update(sqlite3 *db)
{
	int id;
	char name[32];
	int score;
	char sql[128] = {};
	char *errmsg;

	printf("please input a id that you want to update:");
	scanf("%d", &id);
	getchar();

	printf("update score:");
	scanf("%d", &score);

	sprintf(sql, "update stu set score=%d where id=%d;", score, id);

	if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK){
		printf("update error:%s\n", errmsg);
	}
	else{
		printf("update success.\n");
	}
	return 0;
}
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-18 17:27:40  更:2021-10-18 17:27:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:02:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码