网络编程day6 - sql数据库的初步学习

1、安装、编译

安装sqlite3数据库管理系统:

sudo apt-get install sqlite3
sudo apt-get install libsqlite3-dev

安装可视化:

sudo apt-get install sqlitebrowser 
sqlitebrowser test.db

编译:

gcc test.c  -lsqlite3

db释意:

data base 数据库的意思

2、sql基本shell操作

1 - 创建表:
    create table (name1 type,name2 type......);


    type:字段类型
          integer ->int 
          text/char ->字符串类型
          rear      ->浮点型

2 - 删除表:
    drop table ;

3 - 打开表

sqlite3 test.db

3 - 数据的增删改查、新增字段

1 - 增:
        insert into values(data1,data2....);
        insert into stu (id,name) values(1003,'wangwu'); //部分字段插入操作
2 - 删:
        delete from where =;

                //小问题:如果有两组一样的数据,想要删除其中一组,该怎么删?

3 - 改:
    update set = where = and ...;
4 - 查:
    select * from ;

    select * from where = and/or...;

5 - 新增字段:
        alter table  add column ;
eg:数据表最好拿第一列存放序号
sqlite> alter table books add column id int;
sqlite> update books set id=1 where bookname="golden styles";      
sqlite> update books set id=2 where bookname="living";
sqlite> update books set id=3 where bookname="blade point";
sqlite> update books set id=4 where bookname="the seventh day";
sqlite> select * from books;
golden styles|wanger|1995|1
living|yuhua|1989|2
blade point|Maugham|2000|3
the seventh day|yuhua|2009|4
sqlite> select * from books where id=3;
blade point|Maugham|2000|3
sqlite> insert into books (bookname,auther)values("100 years of solitude","marquez");
sqlite> insert into books (bookname,auther)values("100 years of solitude","marquez");
sqlite> select * from books where auther="marquez";
100 years of solitude|marquez||
100 years of solitude|marquez||
sqlite> delete from books where bookname="100 years of solitude";
sqlite> select * from books;
golden styles|wanger|1995|1
living|yuhua|1989|2
blade point|Maugham|2000|3
the seventh day|yuhua|2009|4

3、sqlite3函数库操作数据库文件

#include

1 - 打开 int   sqlite3_open(char  *path,   sqlite3 **db);

功能:

    打开数据库文件,不存在则创建

参数:
    path:数据库文件路径+文件名
    db  :保存打开的数据文件的地址

返回值:
    成功:返回0
    失败:非0

#include
int  main(){
   sqlite3 *db = NULL;
   if(sqlite3_open("test.db",&db) != 0){
    printf("%s\n",sqlite3_errmsg(db));
}
   return 0;
}

2 - 关闭 int   sqlite3_close(sqlite3 *db);

返回值:

        成功返回0,失败返回错误码

3 - 打印错误信息const  char  *sqlite3_errmsg(sqlite3 *db);

返回值:

        返回错误信息 (%s)

4 - 执行int   sqlite3_exec(sqlite3 *db, const  char  *sql,  sqlite3_callback callback, void *para,  char **errmsg);

        功能:执行SQL操作
         db:数据库文件地址
         sql:SQL语句
         callback:回调函数
         arg:传递给回调函数的参数
         errmsg:错误信息指针的地址
         返回值:成功返回0,失败返回错误码
 注意!!!!!:当需要sqlite3_exec去执行select操作时需要封装callback区处理查询到记录。

#include 
#include 
int main(){
    //sqlite3_open
    sqlite3 * db = NULL;
    if (sqlite3_open("test.db",&db)){
        printf("错误提示--%s\n",sqlite3_errmsg(db));
        return -1;
}
    //sqlite3_exec -- create table
    if (sqlite3_exec(db,"create table books(id char,bookname char);",NULL,NULL,NULL) != 0){
        perror("sqlite3_exec -- create table");
        return -1;
}
    //name passwd
    printf("请输入序号 书名\n");
    char id[32] = {0};
    char bookname[32] = {0};
    char sql[256] = {0}; 
    scanf ("%d%s",id,bookname);
    sprintf(sql,"insert into books values('%d','%s');",id,bookname);
    //sqlite3_exec -- insert
    if (sqlite3_exec(db,sql,NULL,NULL,NULL) != 0){
        perror("sqlite3_exec -- insert");
        return -1;
}
    return 0;
}

5 - 回调函数int sqlite3_callback(void *para, int f_num, char **f_value, char **f_name);

如何理解函数原型?:typedef  int (*sqlite3_callback)(void *arg, int,char **, char **);

如何理解callback中的num?

如何理解参数para?

还需加强函数的相关练习(看懂函数原型、形参实参的调用、函数指针等)

//sqlite3_exec函数在执行查询操作时,需要封装回调函数callback处理查询到的记录
#include 
#include 

int callback(void *para, int num, char ** f_value, char ** f_name)
{
    static int count = 0;
    for (int i=0;i

4、问题

如果有两组一样的数据,想要删除其中一组,该怎么删?

        百度

如何理解callback函数?(参数太多,而且不知道具体怎么实现查找功能的,比如num不是根本每定义吗)

        第一个参数需要就传,后面的参数直接使用

你可能感兴趣的:(数据库,sql,学习,c#)