22061
一、本周的学习和感受
本周的学习内容并不多,主要是SQLite3数据库的学习与使用,C++的基础知识和基础命令.
SQLite3的学习主要包括:
一、SQLite3的安装 ;
sudo apt-get install sqlite3 //数据库操作软件
sudo apt-get install libsqlite3-dev //数据库开发库
二、数据库的创建和打开 ;
sqlite3 sql_name.db
此时,如果数据库存在即可直接打开,如果不存在,则创建并打开数据库;
三、数据库的常见语句和命令 ;
常见命令如下:
sqlite> .help //显示帮助信息
sqlite> .quit //退出库
sqlite> .database //显示当前文件路径
sqlite> .tables //显示数据库所有表名
sqlite> .schema //查看表的结构
sqlite> .headers on //显示列的名字
sqlite> .mode column //按照列显示
常见语句如下:
1、表的创建:
sqlite> create table table_name(column1 type1 , column2 type2 , ... , columnN typeN);
// 创建表
// 其中 table_name 是要创建表的名字
// column 是字段名
// type是类型
// 类型包括
// NULL : 空值;
// REAL : 浮点值;
// INTEGER : 整数值;
// TEXT : 字符串;
// BLOB : 二进制数据;
// PRIMARY : 关键字,后接字段名不能重复;
// IF NOT EXISTS : 表示存在不创建;
2、数据的插入:
sqlite> insert into table_name values(value1 , value2 , ... , valueN);
// 插入数据
// table_name 是表名称 ;
// valueN 是插入数据 ;
3、数据的查询:
sqlite> select * from table_name;
sqlite> select column1 , column2 , ... , columnN from table_name;
sqlite> select * from tbale_name where [conditions];
// * 代表查询所有数据 ;
// table_name 表的名字,从哪里开始查 ;
// column 是指查询某个字段 ;
// where 后面接的是条件,代表筛选查询 ;
4、数据的更新:
sqlite> update table_name set column1 = value1 , ... , columnN = valueN where [condition];
// set 后面接需要修改的内容 ;
// where 后秒接该表的条件 ;
5、删除记录:
sqlite> delete from table_name where [condition];
// table_name 是删除内容表的名字 ;
// where 后面接条件 ;
6、删除表:
sqlite> drop table table_name;
// table_name 是需要删除表的名字 ;
四、SQLite3 API 编程 ;
//需要加上数据库头文件 ;
#include <sqlite3.h>
int main(int argc, const char *argv[])
{
//运行程序后面需要接数据库名称,否则报错;
if(argc != 2)
{
fprintf(stderr,"请输入:%s 数据库\n",argv[0]);
return -1;
}
int ret;
sqlite3 *db; // 定义数据库
ret = sqlite3_open(argv[1],&db); // 打开数据库
// 打开失败则判错
if(ret != SQLITE_OK)
{
fprintf(stderr,"sqlite3_open fail:%s\n",sqlite3_errmsg(db));
return -1;
}
char sql[32] = "执行语句";
int sqlite3_exec(sqlite3 *db,const char *sql,int(*callback)(void*,int,char**,char**),void *arg,char **errmsg); //执行语句
// int sqlite3_get_table(sqlite3 *db,const char *zSql,char ***pazResult,int *pnRow,int *pnColumn,char **pzErrmsg);
// 非回调的select查询语句
sqlite3_close(db); // 关闭数据库
return 0;
}
C++的基础命令则如下 :
#include <iostream>
namespace{
} // 命名空间 ;
using namespace std; //全局引用std命名空间 ;
cout << "hellow" << endl << "nihao" << endl;
// cout 输出 ;
// endl 换行 ;
cin >> i; // 输入 ;
二、遇到的困难和解决方案
本周主的困难是在写网络编程电子辞典时,所遇到的一些问题,比如 :
1、只需要用户名存在,密码胡乱填写也可以登录本辞典;
解决方法 :
在查询库并且对比用户名的同时,条件查询次用户名的密码,并且进行比对;
但是在比对的过程中,我又遇见了新的问题,调试过程中,输入的密码和比对结果完全一致,比对前把两个目标进行输出,确实毫无区别,但是就是无法比对成功;
后面发现字符串不能进行直接比对,也就是 == 无法比对字符串,需要应用strcmp来比对;
2、查询的过程对我来说,开始确实很难写,对于新手来说,编程思路很好找,但是代码设计却非常难;
解决方法 :
把思维简单化,代码不是越复杂越好,把复杂的程序用简单的代码表示出来,让人一目了然才是好代码;
于是我改变传输的参数,化繁为简,成功写出来电子辞典;
总结
对于这一周的学习,我认为还是有一点成果的。不仅了解了许多数据库相关的知识点,还加深了对网络编程的学习和使用;
电子词典的编写让我对自身水平又有了一定的了解;我知道自己的不足,也让我发现了自己的优势,学习是一个循序渐进的过程;
之后我要去做的就是加强自己的不足之处,保持自己的优势;
我发现了只有不断的尝试,从失败中提取经验和教训,我才会不断的进步;无论是思维上,还是实际中,动手才是检验成功的唯一方法;
但也不能盲目的乱尝试,这个课程需要动脑,必然是先去熟记下基础概念,再去锻炼编程思维,然后才能不断的变强!
在C++方面虽然我还没有入门,却也了解到了C++学习的重要之处,让我对次学习兴趣高涨;
相信在接下来的学习中,我还能保持一颗进步的心.