摘要: 官方网站:http://www.flyui.nethttp://mini.flyui.netFly mini Tree 1.0 代码大小仅15KB,独立运行,不依赖任何第三方库,GZIP压缩后仅7KB左右,跟一个小图标差不多大,真正的迷你UI。完美兼容所有主流浏览器:IE,Firefox,Chrome,Safari,Opera等,和其它第三方前端框架,如jQuery,ExtJS,Dojo,Mootools,Prototype没有任何冲突,可以在一个页面创建多个FlyTree实例。所有外观,包含节点图标都可以用CSS控制;每一个动作都有相对应的事件成员,方便对每一个动作执行自定义操作;完全面向对阅读全文
posted @ 2011-12-02 19:26 吾跃乾坤 阅读(19) 评论(0) 编辑
   今天群里的一个朋友问了个问题:如何把数据库里所有表的记录数都统计出来?
   由于以前我曾经试着写过一个存储过程,作用就是删除所有表的内容,思路是这样的:
   首先通过sysobjects表构造一个sql语句字符串'DELETE 表名',其中表名就是sysobjects中的name列,把这些DELETE语句字符串连接起来的方法一是通过游标,二则是直接利用如下语句:
   select @sql = @sql + 'DELETE ' + name from sysobjects where xtype='U';
   这是一个很有用的技巧,在合适的地方用会很大程度的优化语句运行速度.
   然后就是通过exec(@sql)执行该字符串.
   而把数据库所有表的记录数统计出来和这个思路几乎完全一样,不同的就是把'DELETE 表名' 改为'SELECT 表名,COUNT(1) FROM 表名',主要这点不同而已,如果构造完字符串并执行完毕,可以把结果输出到一个临时表,那么再统计所有记录数就轻而易举了.
    下面就是我写的一个语句:

 

declare @sql varchar(8000),@count int,@step int

set nocount on

--@step越大运行速度越快,但如果太大会造成生成的sql字符串超出限制导致语句不完整出错

--建议为50

set @step = 50

if object_id(N'tempdb.db.#temp'is not null

drop table #temp

create table #temp (name sysname,count numeric(18))

if object_id(N'tempdb.db.#temp1'is not null

drop table #temp1

create table #temp1 (id int identity(1,1),name sysname)

insert into #temp1(name)

select name from sysobjects where xtype = 'u';

set @count = @@rowcount while @count>0

begin

set @sql = ''

select @sql = @sql + ' select ''' + name + ''',count(1) from ' + name + ' union'

from #temp1 where id > @count - @step and id <= @count

set @sql = left(@sql,len(@sql- len('union'))

insert into #temp exec (@sql)

set @count = @count - @step

end

select count(count) 总表数,sum(count) 总记录数 from #temp

select * from #temp order by count,name

set nocount off

 

    经过测试,该方法可以通过,不过有时候@step的值需要手动设置一下,@step=50应该就可以满足大部分数据库的需要了.如果表名都比较短的话,可以设置@step=80或者100.

    后来我又去上网搜索其他统计数据库所有表记录数的语句,发现了下面的方法:

 

create table #(id int identity ,tblname varchar(50),num int)

declare @name varchar(30)

declare roy cursor for select name from sysobjects where xtype='U'

open roy

fetch next from roy into @name

while @@fetch_status=0

begin

declare @i int

declare @sql nvarchar(1000)

set @sql='select @n=count(1) from '+@name

exec sp_executesql @sql,N'@n int output',@i output

insert into # select @name,@I

fetch next from roy into @name

end

close roy

deallocate roy

select * from #

 

    该方法用到了游标,如果数据库表很多的话速度可能会比较慢,但是该表不受表名长短影响,对所有数据库都适用.

 

    第三种方法,利用系统的对象表和索引表:

set nocount on
if object_id(N'tempdb.db.#temp'is not null
  
drop table #temp
create table #temp (name sysname,count numeric(18))

insert into #temp
select o.name,i.rows
from sysobjects o,sysindexes i  
where o.id=i.id and o.Xtype='U' and i.indid<2

select count(count) 总表数,sum(count) 总记录数 from #temp
select * from #temp
set nocount off

 

    该方法执行速度绝对最快,但是结果好象并不是太准确,稍微有一些偏差.所以如果对数据量比较大而且对统计结果要求比较低的,该方法绝对是第一选择.如果要求统计绝对准确的记录数而且表的数量比较多的话,个人感觉第一个方法应该是个不错的选择.

    第三个方法主要是利用了系统索引表sysindexes中索引ID indid<1的行中的rows列存有该表的行数这一特点.

    最后一种方法是利用隐藏未公开的系统存储过程sp_MSforeachtable
CREATE TABLE #temp (TableName VARCHAR (255), RowCnt INT)
EXEC sp_MSforeachtable 'INSERT INTO #temp SELECT ''?'', COUNT(*) FROM ?'
SELECT TableName, RowCnt FROM #temp ORDER BY TableName
DROP TABLE #temp
       从mssql6.5开始,微软提供了两个不公开,非常有用的系统存储过程sp_MSforeachtablesp_MSforeachdb,用于遍历某个数据库的每个表和遍历DBMS管理下的每个数据库。
 
 
posted @ 2012-02-06 10:32 吾跃乾坤 阅读(8) 评论(0) 编辑
摘要: 现在流行的进程线程同步互斥的控制机制,其实是由最原始最基本的4种方法实现的。由这4种方法组合优化就有了.Net和Java下灵活多变的,编程简便的线程进程控制手段。   这4种方法具体定义如下 在《操作系统教程》ISBN 7-5053-6193-7 一书中可以找到更加详细的解释    1临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。    2互斥量:为协调共同对一个共享资源的单独访问而设计的。    3信号量:为控制一个具有有限数量用户资源而设计。    4事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。阅读全文
posted @ 2011-12-09 10:32 吾跃乾坤 阅读(46) 评论(0) 编辑
摘要: 复制/粘贴功能大大提高了工作效率。但Windows的剪贴板只能容纳一条记录,却限制了复制/剪贴功能的发挥。为此,出现了很多剪贴板增强工具。其中,xbeta在使用中认为,2种剪贴板增强软件是同类最好的,并推荐大家应用。即CLCL和ClipX。阅读全文
posted @ 2011-12-03 17:20 吾跃乾坤 阅读(42) 评论(0) 编辑

 

官方网站:

http://www.flyui.net

http://mini.flyui.net

 

Fly mini Tree 1.0 代码大小仅15KB,独立运行,不依赖任何第三方库,GZIP压缩后仅7KB左右,跟一个小图标差不多大,真正的迷你UI。

 

完美兼容所有主流浏览器:IE,Firefox,Chrome,Safari,Opera等,和其它第三方前端框架,如jQuery,ExtJS,Dojo,Mootools,Prototype没有任何冲突,可以在一个页面创建多个FlyTree实例。

 

所有外观,包含节点图标都可以用CSS控制;每一个动作都有相对应的事件成员,方便对每一个动作执行自定义操作;完全面向对象的开发模式,可以派生子类,在现有基础上进行灵活扩展。

 

 

 

真正小巧实用的javascript导航树控件

posted @ 2011-12-02 19:26 吾跃乾坤 阅读(19) 评论(0) 编辑
摘要: 只要身在北京最大的“村”里,你总能及时知道IT圈最in的创业时尚是什么?就跟到西直门“动批”淘宝的姑娘一样,每月拿的新货保准不同。比如前一阵,人人都在谈论Groupon(美国的一个团购网站)。自从我的朋友王兴第一个弄出了中国版的美团网之后,又出了米团F团酷团团宝等等四五十个团购站。而眼下,模仿Foursquare(一个基于地理位置信息的社交网站)又成了最新的时髦。   事实上,这种精明的实用主义做法在中关村已经流行多年。区别在于,以前柳传志等上一辈模仿的只是PC这样的产品,而新一代山寨则的是整套运作赚钱的方法,换个更蛊惑人心的词——这叫“商业模式”。阅读全文
posted @ 2011-11-23 19:27 吾跃乾坤 阅读(709) 评论(0) 编辑
摘要: 中国没有一个所谓“全民的互联网”,中国的互联网是人为割裂的。它既存在于精英的Think笔记本上,也存在于草根的MTK山寨机中。我们的精英也许和美国同步,草根却与越南同步。阅读全文
posted @ 2011-11-23 18:34 吾跃乾坤 阅读(655) 评论(1) 编辑
摘要: 偶是一个程序员。 偶的生活很简单.确切地,用两个词,来说,就像偶写的代码一样,单调且无聊。 早上七点被手机叫醒: 睁开眼,刷牙,洗脸,吃早饭 八点半到办公室是必须的,然后开始一天工作阅读全文
posted @ 2011-11-20 17:43 吾跃乾坤 阅读(135) 评论(6) 编辑
摘要: 新年送礼,送对联:上联:为系统而生,为框架而死,为debug奋斗一辈子下联:吃符号的亏,上大小写的当,最后死在需求上!横批:杯具程序员阅读全文
posted @ 2011-01-20 12:16 吾跃乾坤 阅读(161) 评论(0) 编辑
摘要: 写一个在JS中生成Guid的函数var emptyGuid='00000000-0000-0000-0000-000000000000'function newGuid() { return emptyGuid.replace(/0+/g, function (o) {return Math.random().toString(16).substr(2, o.length)})}让Guid中只包含10进制数字:var emptyGuid='00000000-0000-0000-0000-000000000000'function newGuid() { return emptyGuid.rep阅读全文
posted @ 2010-12-14 09:31 吾跃乾坤 阅读(147) 评论(5) 编辑
摘要: 看到 一同门的 blog中有人回复,很有意思:重构者的20种死法最近涉及重构话题的文章不少啊,其实我也一直在憧憬重构,重构很绿色,重构很河蟹,重构令人很激动,重构可能让人死得很惨。我在这里,就列举一下Refactorman的种种死法,以警后人:一、一边重构,一边要完成日常任务……1. 疲于奔命,过劳而死。2. 吃领导给的鸭梨太大被噎死。3. 满脑子都是代码,在上班路上不留神撞上了宝马。4. 冷落了女友,受失恋打击跳楼而死。5. 无暇社交,不懂人情世故,失意而死。6. 为了说服领导和同事,心力交瘁而死。二、重构过程中……7. 被以前的混账代码气死。8. 被混账代码搞得大脑程序溢出,彻底崩溃,神智阅读全文
posted @ 2010-12-14 09:27 吾跃乾坤 阅读(28) 评论(0) 编辑