存档

2009年39月 的存档

漫画

2009年39月17日 frankyue 2 条评论

       终于发现坐着不动是这么的冷,下午在学习的时候真的快冻死了,为了暖身子喝了好多开水,后来在无意中想起以前(高一的时候吧应该是)画的漫画就去翻出来看看,呵呵有些东西现在看看也不错。当时水平不低啊!所以用手机拍了下来。传上来看看。

阅读全文…

分类: 随笔 标签:

太夸张了!

2009年18月13日 frankyue 2 条评论

昨天去网上搜一下外置刻录机的价格(自己的坏了),然后就来到了淘宝看看价格,在逛的时候不小心弄了个价格由高到低(这个排序个人以为很傻,呵呵买东西从最贵的看起!),竟然出现这个画面恐怖吧!!!

分类: 未分类 标签:

关于SQLITE

2009年10月12日 frankyue 没有评论

今天在学习QT的时候,无意中见到了SQLITE这个超小型的数据库,非常迷你,3万行代码不到,很酷哦,搞嵌入式的好帮手!后来和TX说了下,他一个朋友刚好讲了关于SQLITE的一些介绍,给自己多挤点时间就借用李兄的博文一用,以下为转载

来源:http://li2z.cn/2009/01/11/sqlite/

SQLite简介

SQLite大致就是”SQL lite”,也就是一个微型的SQL解释器.它的赞助商和使用者包括mozilla,adobe,symbian等软件巨头,也算是来头不小了.
说它微型,那么它到底有多微型呢?我们可以看看它的可执行文件的大小,linux版本的打包文件是203.93 KiB,解压以后是350.88 KiB,是不是很微型呢?
除了微型之外,SQLite主要还要以下特点:

  • 无须配置: SQLite不需要安装,直接解压可执行文件即可运行.
  • 没有服务进程: SQLite无须通过TCP/IP等通信协议提交SQL到服务端,处理后再返回结果.
  • 单个数据文件: SQLite将用户数据存于单个普通文件里面.也就是说用户只要有数据文件的读权限,就可以读取所有数据;有写权限也能改变数据.
  • 数据文件可跨平台迁移: SQLite本身是跨平台的,它的数据文件同样也是跨平台的.数据文件和平台的字节序无关,也和CPU的位数无关.直接复制数据文件就可以实现数据迁移.
  • 紧凑: 如上所述,SQLite的运行环境非常小,如果在编译的时候去掉不需要的功能,可以减小至170KiB,用于嵌入式环境也是没问题的.
  • 松散数据类型: 不同于其他数据库的严格的数据类型检查,SQLite在尝试类型转换失败以后,允许在任何表的任何列里面插入任何类型的数据(一个例外是:整型的主键列里面只能存整型数据)
  • 变长的数据记录: 任何文本都是VARCHAR
  • 可读性很高的源码: 普通的程序员都能读懂,关键的变量和函数都有详细的注释.
  • SQL语句编译成虚拟机器语言: SQLite把SQL语句预编译成一种类似机器预言的代码,程序员可以方便得打印出代码及代码的执行结果,这样对debug很有好处.
  • 完全的公开: SQLite的源码可以任意下载使用,没有任何约束和版权(一些文档和测试代码是受开源license保护的).
  • SQL语言扩展: SQLite可以模块化地添加扩展,以增强其功能

说了这么多特点,那么,SQLite究竟怎么使用呢?
在一般的linux发行版下,安装 sqlite 这个包以后,就可以使用 sqlite3 这个命令来创建和处理数据库文件了.windows/DOS则下载这个文件解压到系统目录,mac则是下载这个文件.
安装完毕以后,就可以用

sqlite3 test.db

这个命令来创建一个空的数据库文件了.
然后,你可以用以下命令来建立一个含有两个列的表:

sqlite3 test.db "create table memos(text, priority INTEGER);"
sqlite3 test.db "insert into memos values('deliver project description', 10);"
sqlite3 test.db "insert into memos values('lunch with Christine', 100);"

然后可以这样查询出需要的数据:

sqlite3 test.db "select * from memos where priority>20;"
lunch with Christine|100

很简单吧~
下面展示一下,SQLite在C语言下的用法,同样用的是上面那个test.db,我们建立一个test.c,内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <sqlite3.h>

static int callback(void *NotUsed, int argc, char **argv, char **azColName){
  int i;
  for(i=0; i<argc; i++){
    printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
  }
  printf("\n");
  return 0;
}

int main(int argc, char **argv){
  sqlite3 *db;
  char *zErrMsg = 0;
  char SQLbuffer[1024];
  int rc;

  if( argc!=2 ){
    fprintf(stderr, "Usage: %s num\n", argv[0]);
    return 1;
  }
  rc = sqlite3_open("test.db", &db);
  if( rc ){
    fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
    sqlite3_close(db);
    return 1;
  }
  sprintf(SQLbuffer, "select * from memos where priority > %s;", argv[1]);
  rc = sqlite3_exec(db, SQLbuffer, callback, 0, &zErrMsg);
  if( rc!=SQLITE_OK ){
    fprintf(stderr, "SQL error: %s\n", zErrMsg);
    sqlite3_free(zErrMsg);
  }
  sqlite3_close(db);
  return 0;
}

gcc -lsqlite3 test.c

进行编译,完成之后,执行

./a.out 30
text = lunch with Christine
priority = 100

怎么样,相当简单吧~

注: 文中部分内容翻译和参考自官方文档和man页.

分类: 未分类 标签:

C++中的一点遗漏

2009年19月8日 frankyue 没有评论

在学习QT的时候看到一个很常用的用法就是,FUCTIONG::FUCTION(QWidget *parent):QWidget(parent),自己学过C++,但是一直搞不清楚这QT里定义函数时为什么后面加个“:”然后加个语句,翻书后发现在书里一个小小的篇章里写着,C++还提供一种变量初始化方式就是在函数后面加,冒号:变量名(初始化的值)!我咋一点都不知道类!!!

分类: C++ 标签: