Heero's Blog

Heero's Blog » 数据库
Jun 24

SQLite Expert 3.0 & 个人免费版

  • 作者:heero
  • 时间:2010-6-24 20:25

自从用上SQLite数据库以来,就一直在用SQLite Expert作为图形化管理工具。这个工具的功能非常强大,但糟糕的是,它是一款收费软件,因此之前用的都是破解版。近来在忙前端的工作,好久没打开这个工具了。今天一开,提示版本更新了,而且最新的版本号是3.0.20,比我当前用的2.3.9要高出一个大版本号。

访问官网后发现,SQLite Expert已经分为个人版和专业版两个版本,个人版是免费的,专业版售价$59。下载了个人版并安装好后,立刻开始试用。3.x版本的图标变了:

SQLite Expert 3启动界面

但界面还是老样子,没有太大的区别:

May 3

使用参数化查询防止SQL注入漏洞

  • 作者:heero
  • 时间:2010-5-3 12:56

SQL注入漏洞曾经是Web应用程序的噩梦,CMS、BBS、Blog无一不曾受其害。

SQL注入的原理

以往在Web应用程序访问数据库时一般是采取拼接字符串的形式,比如登录的时候就是根据用户名和密码去查询:

string sql = "SELECT TOP 1 * FROM [User] WHERE UserName = '" + userName + "' AND Password = '" + password + "'";

其中userName和password两个变量的值是由用户输入的。在userName和password都合法的情况下,这自然没有问题,但是用户输入是不可信的,一些恶意用户只要用一些技巧,就可以绕过用户名、密码登录。

假设password的值是"1' or '1' = '1",userName的值随便取,比如是"abc",那变量sql的值就是:

"SELECT TOP 1 * FROM [Use

Jul 27

重置SQLite中的自动编号列

  • 作者:heero
  • 时间:2009-7-27 21:46

目前流行的数据库都提供了自动编号类型,SQLite也不例外。当数据库中包含自动编号的字段时,SQLite会自动建立一个名为 sqlite_sequence 的表。这个表包含两个字段:nameseq 。name字段记录了自动编号字段所在的表,seq字段记录了当前用到的序号(下一条记录的编号就是当前序号加1)。

在开发过程中,我们经常要把表重置。也就是说把表中的记录全部清空,并把自动编号归0。在SQLite中,只需要修改 sqlite_sequence 表就可以了:

UPDATE sqlite_sequence SET seq = 0 WHERE name = 'TableName'

也可以直接把该记录删掉:

DELETE FROM sqlite_sequence WHERE name = 'TableName'

要是想重置所有表,那直接把 sqlite_sequence

Jul 27

SQLite在字符串比较中的大小写问题

  • 作者:heero
  • 时间:2009-7-27 17:40

大部分数据库在进行字符串比较的时候,对大小写是不敏感的。但是,最近使用SQLite的时候,却发现它的情况恰好相反。

假设表User的结构和值如下:

UserName
1 User1

执行下面的SQL语句:

SELECT * FROM [User] WHERE UserName = 'user1'

结果是没有找到任何记录。明显地,SQLite在进行字符串比较的时候,默认对大小写是敏感的。这会对应用程序造成不良的影响。比如