数据库编程

打印 上一主题 下一主题

主题 1015|帖子 1015|积分 3045

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
类型 

关系型数据库:Oracle/DB2/Mysql(开源)/Sqlserver/sqlite(小型数据库)
非关系型数据库:Redis
sqlite3下令

   

  • 创建(进入)数据库            sqlite3 <student>.db
  • .tables                    查看所有表名
  • .schema ?TABLE?   显示 CREATE 语句。如果指定了 TABLE 表,则只显示匹配 LIKE                                      模式的 TABLE 表。
  • .headers on               显示表头信息
  • .mode column            以左对齐的列显示信息
  • .quit                            退出
   
  SQL语句

   create table 
        创建表


     利用形式:
            create table 表名称(列1 数据类型, 列2 数据类型, ...);
      示例:
            create table student(姓名 text, 性别 text, 年龄 integer, 效果 double);
   insert into 
        插入表


   利用形式:
            insert into 表名称 values(值1, 值2, ...);
        示例:
            insert into student values("张三", "男", 19, 89.5);
            insert into student values("李四", NULL, NULL, 99.99);
            insert into student (姓名, 年龄) values ("王二", 18);
 
     select  
        查看表  


     利用形式: 
            select 列1,列2,... from 表名称 where 匹配条件 order by 列名称 asc/desc;
  

  • order by <列名称>asc按升序排列
  • order by <列名称>desc按降序排列
  示例: select * from 表名称;
                          查看该表所有信息
  select 姓名,效果 from student;
                          查看student的姓名和效果两列的所有信息
  select 姓名,效果 from student where 姓名 like "%张%";
                            查看student表中匹配姓名为某张某的姓名和效果
  select 姓名,效果 from student order by 效果 desc;
                            student表中的按效果升序排列的姓名和效果
  select 姓名 from student where 效果 > 85 order by 效果 desc;
                                  效果>85且按降序排列的学生姓名
    delete from 
        删除表


    利用形式:
            delete from student where 匹配条件; 
          示例:
          delete from student where 效果>85
                   删除效果大于85的学生信息
  

  • 只能按行删,不能按列删
    update 
        更新表


   利用形式:
            update 表名称 set 列1=值1,列2=值2 where 匹配条件;
        示例:
            update student set 性别="女", 效果=86.3 where 姓名="王二";
                          更新王二的性别和效果
      drop table
        删除表 


      利用形式:
            drop table 表名称;
   多表团结查询

cross join:
         交错连接 


   

  • 如果在连接两个表时未指定连接条件,则数据库体系会将第一个表的每一行与第二个表的每一行合并。这种连接称为交错连接或笛卡尔乘积

  • 示例:

    • select student.id as 学号, student.name as 姓名, lesson.subject as 课程 from student cross join lesson;


   inner join:
         内连接


    将表1和表2中所有同时满足条件的数据关联在一起
  

  组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部门
  

  • select student.id as 学号, student.name as 姓名, grade.score as 效果 from student inner join grade on student.id =grade.stuid;

  • select student.id as 学号, student.name as 姓名, lesson.subject as 课程,grade.score as 效果 from student inner join grade on student.id =grade.stuid inner join lesson on grade.lessonid = lesson.id;

  • select student.id as 学号, student.name as 姓名, lesson.subject as 课程,grade.score as 效果 from student inner join grade on student.id =grade.stuid inner join lesson on grade.lessonid = lesson.id where 课程 ='语文';

   outer join
          外连接


    左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
  

  

  • select grade.stuid as 学号,student.name as 姓名,lesson.subject as 课程,grade.score as 效果 from grade left outer join student on grade.stuid = student.id inner join lesson on lesson.id = grade.lessonid;



  • select grade.stuid as 学号,student.name as 姓名,student.sex as 年龄,student.age as 性别,lesson.subject as 课程,grade.score as 效果 from grade left outer join student on grade.stuid = student.id inner join lesson on lesson.id = grade.lessonid;



  函数接口

 sqlite3_open

   sqlite3_open 
        int sqlite3_open(
            const char *filename,   /* Database filename (UTF-8) */
            sqlite3 **ppDb          /* OUT: SQLite db handle */
        );
   功能:
            打开一个数据库文件
        参数:
            filename:数据库文件名称 
            ppDb:数据库句柄
        返回值:
            成功返回SQLITE_OK
            失败返回错误码
   sqlite3_errmsg 

    sqlite3_errmsg 
        const char *sqlite3_errmsg(sqlite3*);
        得到出错原因
   sqlite3_exec 

   sqlite3_exec 
          int sqlite3_exec(
            sqlite3*,                                  /* An open database */
            const char *sql,                           /* SQL to be evaluated */
            int (*callback)(void*,int,char**,char**),  /* Callback function */
            void *,                                    /* 1st argument to callback */
            char **errmsg                              /* Error msg written here */
          );
          功能:
            实验SQL语句
          参数:
            sqlite3*:数据库句柄
            sql:要实验的SQL语句字符串的首地点 
            callback:回调函数(只有在select语句时会利用,别的SQL语句只需传入NULL),对找到的数据要完成的操纵,回调函数必须有正确返回值0
            void *:给回调函数的参数 
            char **:存放错误信息空间首地点
  
  回调函数
  int callback(void *arg,int column,char **pcontent,char** ptitle){}
  arg:传入的参数
  column:表列数
  pcontent:查询到的数据
  ptitle:表头
          返回值:
            成功返回SQLITE_OK 
            失败返回错误码 
   sqlite3_close   

   sqlite3_close   
          int sqlite3_close(sqlite3*);
          功能:
            关闭sqlite3数据库  
  示例:

           创建student.db
           创建student表(学号,姓名,性别,年龄,效果)
           插入三名学生
           利用select打印三名学生信息
  1. #include <stdio.h>
  2. #include <sqlite3.h>
  3. typedef struct student
  4. {
  5.     char name[200];
  6.     char sex[100];
  7.     int age;
  8.     double score;
  9. }stu_t;
  10. int callback(void *arg,int column,char **pcontent,char** ptitle)
  11. {
  12.     int i=0;
  13.     for(i=0;i<column;i++)
  14.     {
  15.           printf("\t%s\t",ptitle[i]);
  16.     }
  17.     printf("\n");
  18.   
  19.     for(i=0;i<column;i++)
  20.     {
  21.         printf("\t%s\t",pcontent[i]);
  22.     }
  23.     printf("\n");
  24.     return 0;
  25. }
  26. int main()
  27. {
  28.     int i=0;
  29.     sqlite3 *pDb=NULL;
  30.     char cmdbuff[1000]={0};
  31.     char *perrmsg=NULL;
  32.     int ret=0;
  33.     stu_t s[3]={
  34.         {"张三","男",18,89},
  35.         {"李四","女",20,95},
  36.         {"王五","男",19,88},
  37.     };
  38.     //打开数据库
  39.     ret=sqlite3_open("student.db",&pDb);
  40.     if(ret!=SQLITE_OK)
  41.     {
  42.         fprintf(stderr,"splite3_open failed: %s\n",sqlite3_errmsg(pDb));//stderr不用缓存
  43.         return -1;
  44.     }
  45.     //创建表
  46.     sprintf(cmdbuff,"create table if not exists student(id integer primary key asc,name text,sex text,age integer,score double);");
  47.     ret=sqlite3_exec(pDb,cmdbuff,NULL,NULL,&perrmsg);
  48.     if(ret!=SQLITE_OK)
  49.     {
  50.         fprintf(stderr,"sqlite_exec failed:%s\n",perrmsg);
  51.         sqlite3_free(perrmsg);//执行sqlite_exec出错后要为perrmsg申请空间,所有需要释放
  52.         sqlite3_close(pDb);
  53.         return -1;
  54.     }
  55.     //插入数据
  56.     for(i=0;i<3;i++)
  57.     {
  58.         sprintf(cmdbuff,"insert into student values(NULL,"%s","%s","%d","%lf");",s[i].name,s[i].sex,s[i].age,s[i].score);
  59.         ret=sqlite3_exec(pDb,cmdbuff,NULL,NULL,&perrmsg);
  60.         if(ret!=SQLITE_OK)
  61.         {
  62.             fprintf(stderr,"sqlite_exec failed:%s\n",perrmsg);
  63.             sqlite3_free(perrmsg);
  64.             sqlite3_close(pDb);
  65.             return -1;
  66.         }
  67.     }
  68.     //  查询数据
  69.     sprintf(cmdbuff,"select * from student;");
  70.     ret=sqlite3_exec(pDb,cmdbuff,callback,NULL,&perrmsg);
  71.     if(ret!=SQLITE_OK)
  72.     {
  73.         fprintf(stderr,"sqlite_exec failed:%s\n",perrmsg);
  74.         sqlite3_free(perrmsg);
  75.         sqlite3_close(pDb);
  76.         return -1;
  77.     }   
  78.     //关闭数据库
  79.     sqlite3_close(pDb);
  80.     return 0;
  81.    
  82. }
复制代码
 编译时要价-lsqlite3


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表