华清实训 DAY6-7

第六天 +  第七天

 进程与线程

fork()
返回值为0就是子进程,不为0就是父进程   
在 Linux 上安装 SQLite
目前,几乎所有版本的 Linux 操作系统都附带 SQLite。所以,只要使用下面的命令来检查您的机器上是否已经安装了 SQLite。
$ sqlite3
SQLite version 3.7.15.2 2013-01-09 11:53:05Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>
如果没有看到上面的结果,那么就意味着没有在 Linux 机器上安装 SQLite。因此,让我们按照下面的步骤安装 SQLite:
  • 请访问  SQLite 下载页面 ,从源代码区下载  sqlite-autoconf-*.tar.gz
  • 步骤如下:
$ tar xvzf sqlite-autoconf-3071502.tar.gz
$ cd sqlite-autoconf-3071502
$ ./configure --prefix=/usr/local
$ make
$ make install
上述步骤将在 Linux 机器上安装 SQLite,您可以按照上述讲解的进行验证。
sqlite3
sqlite命令
1、exit 退出 sqlite 数据库
2、 .table        查询表
3、 create table 表名(索引1,索引2,.........);                  创建表
4、insert into 表名 values("数据1","数据2",........);       增
5、delete from 表名;                                                    删
      delete from 表名  where 索引名="数据";                  删除指定元素
        where 后面的条件可以用and 或者or连接
6、update 表名 set  索引名="数据";                            改
7、select  索引名    from  表名;                                   查
        索引名处写* 表示查找表中·所有元素       
作业:创建一个表,在表中设置两个索引id,password;注册两个账号。xxx(123)  yyy(abc),修改xxx的密码为csswdhde999 ,注销yyy的账号
//创建表accounts(账户)
creat table accounts (
    id integer primary key,                                   //设置id
    password next
);
creat index id_index on accounts (id);
creat index password_index on accounts (password);
//创建账号并插入
inset into accounts (id, password) values (1, '123');
inset into accounts (id, password) values (2, 'abc');
//修改账号密码
update accounts set password = 'csswdhde999' where id = 1;
//注销账号
delete from accounts where id = 2;
2、sqlite3 接口函数
gcc sqlite3.c - l sqlite3
编译时需要链接到sqlite3库
int sqlite3_open(const char *pathname,sqlite3 **db);
i nt sqlite3_close(sqlite3*);
int sqlite3_exec(sqlite3 * db,const char *sql,sqlite_callback,void char**);
db :打开的.db文件的句柄
sql  :需要执行的sqlite3命令语句
callback  :回调函数,当执行的语句有输出时,才需要用
arg :传入callback的参数
errmsg  :存放错误信息
int sqlite3_open(const char*, sqlite3**);
函数用于打开/创建一个函数库
const char* 指定文件名,
sqlite3** 指定数据库句柄,用户通过数据库句柄操作数据库
返回一个整数错误代码,=0 表示成功码,> 0都是错误
int sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void*, char**);
  函数用于执行一条或多条SQL语句,SQL语句之间用“;”隔开
 sqlite3*指定已打开的数据库句柄,const char *sql   指定SQL指令,sqlite_callback  在回调函数中可以获得SQL执行的结果,void*  指定传给回调函数的数据 , char**   指定命令执行失败的详细错误信息
返回0表示sql指令执行完毕,否则说明这次执行没有成功
int callback(void *arg,int a,char **b,char **c)
arg:exec函数的第四个参数   /* 由 sqlite3_exec() 的第四个参数传递而来 */
a:索引数                  /* 表的列数 */
b:查询到的结果       /* 指向查询结果的指针数组, 可以由 sqlite3_column_text() 得到 */
c:索引名                 /* 指向表头名的指针数组, 可以由 sqlite3_column_name() 得到 */
返回值:1 中断查找,0 继续列举查询到的数据
int sqlite3_close(sqlite3*);
关闭数据库文件,参数是数据库句柄
课堂代码:
#include <stdio.h>
#include <sqlite3.h>

int main()
{
    sqlite3 *db;
    if(SULITE_OK != sqlite3_open ("stu.db",&db))
    {
    printf("open error!\n");
        return -1;
    }
    
    printf("open sqlite3 success.........\n");
    
     char* errmsg =NULL;
    char name[20] = {0};
    char age[20] = {0};
    char sex[20] = {0};

    scanf("%s%*c%s%*c%s",name,age,sex);

    char sql{200} ={0};
    sprintf(sql,"insert into tb1 values(\"%s\",\"%s\",\"%S\");",name,age,sex);
    sqlite3_exec(db,sql,NULL,NULL,&errmsg);
     
    sqlite3_close(db);
    return 0;
}
课堂作业:创建一个具有注册登录检验功能的程序(使用sqlite3)
 
hqyj@ubuntu:~/Desktop/a$ cat -n b.c
     1    #include<stdio.h>
     2    #include<stdlib.h>
     3    #include<sqlite3.h>
     4    #include<string.h>
     5    
     6    //回调函数,用于从查询结果中获取数据
     7    static int callback(void* data,int argc,char** argv,char** az)
     8    { 
     9     int i;
    10        for(i=0;i<argc;i++)
    11        {
    12              printf("%s = %s\n",az[i],argv[i]?argv[i] : "NULL");
    13        }
    14        printf("\n");
    15        return 0;
    16    }
    17        
    18    int main(int argc,char* argv[])
    19    {
    20        sqlite3* db;
    21        char* errmsg = 0;
    22        int rc;
    23        //打开数据库
    24        rc = sqlite3_open("user.db",&db);
    25        if(rc)
    26        {
    27        fprintf(stderr,"无法打开数据库:%s\n",sqlite3_errmsg(db));
    28        sqlite3_close(db);
    29        return(1);
    30        }
    31        
    32       /* //创建用户表
    33        rc = sqlite3_exec(db,"CREATE TABLE user (ID INT PRIMARY KEY NOT NULL, USERNAME TEXT NOT NULL, PASSWORD TEXT NOT NULL);",callback,0,&errmsg);
    34        if(rc != SQLITE_OK)
    35        {
    36        fprintf(stderr,"表创建出错:%s\n",errmsg);
    37        sqlite3_free(errmsg);
    38        }
    39        else
    40        {
    41        fprintf(stdout,"表创建成功\n");  
    42        }
    43        //插入用户数据
    44        rc = sqlite3_exec(db,"INSERT INTO user (ID , USERNAME, PASSWORD)VALUES(1,'user1','password1');",callback,0,&errmsg);
    45        if(rc != SQLITE_OK)
    46        {
    47        fprintf(stderr,"插入数据,SQL出错:%s\n",errmsg);
    48        sqlite3_free(errmsg);
    49        }
    50        else
    51        {
    52         fprintf(stdout,"记录创建成功\n");
    53        }
    54        */
    55        //查询用户数据
    56        rc = sqlite3_exec(db,"SELECT *FROM user;",callback,0,&errmsg);
    57        if(rc != SQLITE_OK)
    58        {
    59        fprintf(stderr,"查询失败,SQL出错:%s\n",errmsg);
    60        sqlite3_free(errmsg);
    61        }
    62    
    63        //登录验证
    64        char username[20];
    65        char password[20];
    66        strcpy(username,"user1");
    67        strcpy(password,"password1");
    68        sqlite3_stmt* stmt;
    69        rc = sqlite3_prepare_v2(db,"SELECT * FROM user WHERE USERNAME =? AND PASSWORD =?;",20,&stmt,NULL);
    70        if(rc != SQLITE_OK)
    71        {
    72        fprintf(stderr,"登录失败:%s\n",sqlite3_errmsg(db));
    73        return 1;
    74        }
    75        sqlite3_bind_text(stmt,1,username,-1,SQLITE_STATIC);
    76        sqlite3_bind_text(stmt,2,password,-1,SQLITE_STATIC);
    77        rc =sqlite3_step(stmt);
    78        if(rc == SQLITE_ROW)
    79        {
    80        printf("加载成功.....\n");
    81        }
    82        else {
    83        printf("加载失败......\n");
    84        }
    85        sqlite3_finalize(stmt);
    86        sqlite3_close(db);
    87        return 0;
    88    }
    89    
 
代码运行结果:
hqyj@ubuntu:~/Desktop/a$ ./bo
表创建成功
记录创建成功             //插入数据记录
ID = 1
USERNAME = user1
PASSWORD = password1
加载成功........
注意:这个代码仅用一次,第二次可将表格创建以及数据插入部分注释(如上)编译
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值