什么是数据库呢? 如果你去图书馆找相关书籍, 你会被弄晕的, 都是一些大头书, 讲了半天, 还不能让我实践操作。 我不明白, 为什么要那么去讲述一个东西?
我们要把复杂的东西搞简单, 再简单。
很久以前, 听人说, 这个字段是写入数据库的, 我当时就紧张了, 数据库是啥? 这个仓库在哪里? 我只自学过, 但怎么从来没有玩过啊? 后来才知道, 数据库就是一个文件, 别无其它。
我相信, 我讲出来的东西都是最简单最易懂的。 工作一年后, 自己也基本熟悉了自己的模块, 上次跟一个哥们闲聊, 我说: 我觉得任何初中毕业的学生都可以在一个月内把我一年所掌握的搞懂。 他说: 哥, 事实不是这样的, 事实是你已经精通了自己模块。 其实呢, 说精通, 我很惭愧, 但至少应该是熟悉了吧。
天下之事, 大道至简, 爱因斯坦把那么复杂的东西用E = mc^2来描述, 太伟大了。
闲扯就此打住, 下面我来学一个最简单的数据库程序, 为了简便起见, 我没有考虑异常情况, 直接上菜:
- #include <stdio.h>
- #include "sqlite3.h" //api接口
- #pragma comment(lib, "sqlite3.lib") //api实现
-
-
-
- // 先说明一下: 为了简便起见, 我没有考虑异常情况
-
-
- // 回调函数
- int sql_callBack(void *notused, int argc, char **argv, char **szColName)
- {
- int i = 0;
- for (i = 0; i < argc; i++)
- {
- printf( "%s = %s\n", szColName[i], argv[i]);
- }
-
- return 0;
- }
-
- int main()
- {
- const char *sSQL1 = "create table users(name PRIMARY KEY, age int, score int);";
- const char *sSQL2 = "insert into users values('taoge', 26, 100);";
- const char *sSQL3 = "insert into users values('cainiao', 5, 1);";
- const char *sSQL4 = "select * from users;";
-
- sqlite3 *pDb = NULL;
- char *pErrMsg = NULL;
-
- sqlite3_open("taoge.db", &pDb); // 打开数据库
-
- sqlite3_exec( pDb, sSQL1, NULL, NULL, &pErrMsg); // 创建基本信息格式
- sqlite3_exec( pDb, sSQL2, NULL, NULL, &pErrMsg); // 增加信息
- sqlite3_exec( pDb, sSQL3, NULL, NULL, &pErrMsg); // 增加信息
- sqlite3_exec( pDb, sSQL4, sql_callBack, 0, &pErrMsg); // 查询数据库
- sqlite3_close(pDb); // 关闭数据库
-
- return 0;
- }
我们看到, 在当前目录下, 生成了taoge.db, 3kB, 这就是数据库文件。 屏幕上是:
name = taoge
age = 26
score = 100
name = cainiao
age = 5
score = 1
注意: 如果你直接拷贝上面的程序, 在你的电脑上编译链接运行, 那是万万不行的,因为你缺少sqlite3敌营的接口和实现, 接口是sqlite3.h, 实现是sqlite3.lib和sqlite3.dll, 你可以在sqlite官网上找源码编译。 不过为了方便你, 我等下把这三个文件无私地给你。 在编译的时候, 你只需要把这三个文件放到当前目录中就行, 当然啦, .h文件是需要加入工程中的。
再来看看上面的程序, 不就是和文件操作几乎完全一致吗? 数据库就是文件, 只不过是一种特殊的文件而已。再来看看生成的taoge.db文件, 这里面有什么呢? 你双击它, 如果你能看到里面的有用信息, 那我算是服了you. 鉴于数据库是特殊的文件, 所以必须用特殊的工具打开。 上面屏幕中的结果, 就是我们用特殊方法(程序)来打开的。 那有没有现成的可视化的gui工具呢? 有的! 在网上下载个SQLiteSpy.exe, 然后利用它打开taoge.db, 得到如下的图:
开心了吧, 但是, 我们用程序制作了taoge.db, 也用程序读取了它, 也用工具读取了它, 貌似还差点什么? 对!命令行, 我们能用命令行读取吗? 可以滴, 下载sqlite3.exe, 然后进行如下操作, 你就可以看到结果了(注意要把sqlite3.exe和taoge.db放到了同一个目录下):
SQLite version 3.8.5 2014-06-04 14:06:34
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .open taoge.db
sqlite> select * from users
...> ;
taoge|26|100
cainiao|5|1
sqlite>
最后, 我奉上免费福利大餐--->打包好了的一切, 请到我的资源中去下载, 我马上上传。