重置SQLite中的自动编号列

8年前

目前流行的数据库都提供了自动编号类型,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 清空就可以了:

DELETE FROM sqlite_sequence
3409次阅读,0条评论

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

8年前

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

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

 UserName
1User1

执行下面的SQL语句:

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

结果是没有找到任何记录。明显地,SQLite在进行字符串比较的时候,默认对大小写是敏感的。这会对应用程序造成不良的影响。比如,用户在输入用户名的时候必须严格按照大小写输入,这是一种很不好的用户体验;用户表中可能同时存在 user 和 USER 两个用户,容易造成混淆。

由于SQLite是近年来才兴起的数据库,中文资料少得很。Google了一些英文资料,终于找到了三种解决方案:

3071次阅读,0条评论

学习ASP的理由

8年前

众所周知,ASP已经被微软淘汰了,跟着,又被许多的开发者抛弃了。然而,我仍然认为ASP无论是作为入门的技术还是开发平台,都很值得我们继续去使用。在Google上搜一下,可以发现一大堆对ASP不好的评价,什么运行速度慢、异常处理机制不好、缺乏面向对象机制、开发效率低、漏洞多等等。为了让大家对ASP有个正确的认识,我先为它正名。

一、ASP不慢,慢的是数据库

几年前,我用动网论坛程序架了一个BBS,这套程序就是当时经典的ASP+Access架构。我也遇到了某些人所说的论坛慢,有时候卡死不动的问题。然而,自从我换上SQL Server数据库以后问题就解决了。所以罪魁祸首乃Access。程序执行所需的时间是毫秒级别的,在这个级别内,无论是10毫秒还是100毫秒,实在是感觉不出来,但是Access的并发性差,阻塞了部分程序执行,导致页面卡死。

二、异常处理机制很好,只是很多人不知道

以前,很多人包括我在内都用VBScript来编写ASP程序,VBScript的异常处理机制的确是糟透了。然而,JScript则很好,因为它支持包括C#、Java都有的try…catch语句,足以处理所有异常。

963次阅读,11条评论

从交换两个变量的值想到的

8年前

以C语言为例,一般来说,交换两个变量的值需要用到一个中间变量:

int a, b;
a = 10;
b = 11;
int c; // 中间变量
c = a;
a = b;
b = c;

但也可以省掉这个中间变量,只是运算的次数增多了:

int a, b;
a = 10;
b = 11;
b = a + b; // 得出两数字的和
a = a - b; // a减去两数字的和就得出原来的b的负值
a = -a;
b = b - a; // 两数字的和减去原来b的值,就得出原来a的值

这是一个典型的时空问题:如果想省掉一个变量(节省内存),就需要多几次运算(运算时间更长)。在目前内存价格低廉的情况下,当然会选择用空间交换时间。

451次阅读,0条评论