<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>综合技术论坛最新讨论 - JavaEye</title>
    <description>数据库、算法、C/C++、Erlang/FP、PHP/Linux<br/>
圈子: 
<a href="http://cpp-circle.group.javaeye.com/" target="_blank">C++语言</a>
<a href="http://onlypython.group.javaeye.com/" target="_blank">Python</a>
<a href="http://dlang.group.javaeye.com/" target="_blank">D语言</a>
<a href="http://wfp.group.javaeye.com/" target="_blank">函数式编程</a>
<a href="http://phpers.group.javaeye.com/" target="_blank">PHP</a>
<a href="http://database.group.javaeye.com/" target="_blank">数据库</a> - Java编程，Ruby编程，微软.net，AJAX，敏捷软件开发，综合软件技术</description>
    <link>http://www.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
          <item>
        <title>精妙Sql语句</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hua6884858.javaeye.com">hua6884858</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/192857" style="color:red;">http://www.javaeye.com/topic/192857</a>&nbsp;
          发表时间: 2008年05月14日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          精妙Sql语句<br /><br />DDL—数据定义语言(CREATE，ALTER，DROP，DECLARE) <br />DML—数据操纵语言(SELECT，DELETE，UPDATE，INSERT) <br />DCL—数据控制语言(GRANT，REVOKE，COMMIT，ROLLBACK)<br /><br />首先,简要介绍基础语句：<br />1、说明：创建数据库<br />CREATE DATABASE database-name <br />2、说明：删除数据库<br />drop database dbname<br />3、说明：备份sql server<br />--- 创建 备份数据的 device<br />USE master<br />EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'<br />--- 开始 备份<br />BACKUP DATABASE pubs TO testBack <br />4、说明：创建新表<br />create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)<br />根据已有的表创建新表： <br />A：create table tab_new like tab_old (使用旧表创建新表)<br />B：create table tab_new as select col1,col2… from tab_old definition only<br />5、说明：删除新表drop table tabname <br />6、说明：增加一个列<br />Alter table tabname add column col type<br />注：列增加后将不能删除。DB2中列加上后数据类型也不能改变，唯一能改变的是增加varchar类型的长度。<br />7、说明：添加主键： Alter table tabname add primary key(col) <br />说明：删除主键： Alter table tabname drop primary key(col) <br />8、说明：创建索引：create [unique] index idxname on tabname(col….) <br />删除索引：drop index idxname<br />注：索引是不可更改的，想更改必须删除重新建。<br />9、说明：创建视图：create view viewname as select statement <br />删除视图：drop view viewname<br />10、说明：几个简单的基本的sql语句<br />选择：select * from table1 where 范围<br />插入：insert into table1(field1,field2) values(value1,value2)<br />删除：delete from table1 where 范围<br />更新：update table1 set field1=value1 where 范围<br />查找：select * from table1 where field1 like ’%value1%’ ---like的语法很精妙，查资料!<br />排序：select * from table1 order by field1,field2 [desc]<br />总数：select count * as totalcount from table1<br />求和：select sum(field1) as sumvalue from table1<br />平均：select avg(field1) as avgvalue from table1<br />最大：select max(field1) as maxvalue from table1<br />最小：select min(field1) as minvalue from table1<br />11、说明：几个高级查询运算词<br />A： UNION 运算符 <br />UNION 运算符通过组合其他两个结果表（例如 TABLE1 和 TABLE2）并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时（即 UNION ALL），不消除重复行。两种情况下，派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 <br />B： EXCEPT 运算符 <br />EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL)，不消除重复行。 <br />C： INTERSECT 运算符<br />INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL)，不消除重复行。 <br />注：使用运算词的几个查询结果行必须是一致的。 <br />12、说明：使用外连接 <br />A、left outer join： <br />左外连接（左连接）：结果集几包括连接表的匹配行，也包括左连接表的所有行。 <br />SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c<br />B：right outer join: <br />右外连接(右连接)：结果集既包括连接表的匹配连接行，也包括右连接表的所有行。 <br />C：full outer join： <br />全外连接：不仅包括符号连接表的匹配行，还包括两个连接表中的所有记录。<br /><br />其次，大家来看一些不错的sql语句<br />1、说明：复制表(只复制结构,源表名：a 新表名：b) (Access可用)<br />法一：select * into b from a where 1&lt;>1<br />法二：select top 0 * into b from a<br /><br />2、说明：拷贝表(拷贝数据,源表名：a 目标表名：b) (Access可用)<br />insert into b(a, b, c) select d,e,f from b;<br /><br />3、说明：跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)<br />insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件<br />例子：..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..<br /><br />4、说明：子查询(表名1：a 表名2：b)<br />select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)<br /><br />5、说明：显示文章、提交人和最后回复时间<br />select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b<br /><br />6、说明：外连接查询(表名1：a 表名2：b)<br />select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c<br /><br />7、说明：在线视图查询(表名1：a )<br />select * from (SELECT a,b,c FROM a) T where t.a > 1;<br /><br />8、说明：between的用法,between限制查询数据范围时包括了边界值,not between不包括<br />select * from table1 where time between time1 and time2<br />select a,b,c, from table1 where a not between 数值1 and 数值2<br /><br />9、说明：in 的使用方法<br />select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)<br /><br />10、说明：两张关联表，删除主表中已经在副表中没有的信息 <br />delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )<br /><br />11、说明：四表联查问题：<br />select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....<br /><br />12、说明：日程安排提前五分钟提醒 <br />SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5<br /><br />13、说明：一条sql 语句搞定数据库分页<br />select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段<br /><br />14、说明：前10条记录<br />select top 10 * form table1 where 范围<br /><br />15、说明：选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)<br />select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)<br /><br />16、说明：包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表<br />(select a from tableA ) except (select a from tableB) except (select a from tableC)<br /><br />17、说明：随机取出10条数据<br />select top 10 * from tablename order by newid()<br /><br />18、说明：随机选择记录<br />select newid()<br /><br />19、说明：删除重复记录<br />Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)<br /><br />20、说明：列出数据库里所有的表名<br />select name from sysobjects where type='U' <br /><br />21、说明：列出表里的所有的<br />select name from syscolumns where TableName')<br /><br />22、说明：列示type、vender、pcs字段，以type字段排列，case可以方便地实现多重选择，类似select 中的case。<br />select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type<br />显示结果：<br />type vender pcs<br />电脑 A 1<br />电脑 A 1<br />光盘 B 2<br />光盘 A 2<br />手机 B 3<br />手机 C 3<br /><br />23、说明：初始化表table1<br />TRUNCATE TABLE table1<br /><br />24、说明：选择从10到15的记录<br />select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc<br />　　<br />随机选择数据库记录的方法（使用Randomize函数，通过SQL语句实现）<br />　　对存储在数据库中的数据来说，随机数特性能给出上面的效果，但它们可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见的解决方案是建立如下所示的循环： <br />Randomize <br />RNumber = Int(Rnd*499) +1 <br />　<br />While Not objRec.EOF <br />If objRec("ID") = RNumber THEN <br />... 这里是执行脚本 ... <br />end if <br />objRec.MoveNext <br />Wend <br />　<br />　　这很容易理解。首先，你取出1到500范围之内的一个随机数（假设500就是数据库内记录的总数）。然后，你遍历每一记录来测试ID 的值、检查其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber 等于495，那么要循环一遍数据库花的时间可就长了。虽然500这个数字看起来大了些，但相比更为稳固的企业解决方案这还是个小型数据库了，后者通常在一个数据库内就包含了成千上万条记录。这时候不就死定了？ <br />　　采用SQL，你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset，如下所示： <br />Randomize <br />RNumber = Int(Rnd*499) + 1 <br />　<br />SQL = "SELECT * FROM Customers WHERE & RNumber <br />　<br />set objRec = ObjConn.Execute(SQL) <br />Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email") <br />　<br />　　不必写出RNumber 和ID，你只需要检查匹配情况即可。只要你对以上代码的工作满意，你自可按需操作“随机”记录。Recordset没有包含其他内容，因此你很快就能找到你需要的记录这样就大大降低了处理时间。 <br />再谈随机数 <br />　　现在你下定决心要榨干Random 函数的最后一滴油，那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random 示例扩展一下就可以用SQL应对上面两种情况了。 <br />　　为了取出几条随机选择的记录并存放在同一recordset内，你可以存储三个随机数，然后查询数据库获得匹配这些数字的记录： <br />SQL = "SELECT * FROM Customers WHERE & RNumber & " OR & RNumber2 & " OR & RNumber3 <br />　<br />　　假如你想选出10条记录（也许是每次页面装载时的10条链接的列表），你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成，但是 SELECT 语句只显示一种可能（这里的ID 是自动生成的号码）： <br />SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9" <br /><br />　　注意：以上代码的执行目的不是检查数据库内是否有9条并发记录。<br /><br />　<br />随机读取若干条记录，测试过<br />Access语法：SELECT top 10 * From 表名 ORDER BY Rnd(id)<br />Sql server:select top n * from 表名 order by newid()<br />mysql:select * From 表名 Order By rand() Limit n<br />Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试, 现在记下以备后查)<br />语法:select table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...<br />使用SQL语句 用...代替过长的字符串显示<br />语法：<br />SQL数据库：select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename<br />Access数据库：SELECT iif(len(field)>2,left(field,2)+'...',field) FROM tablename; <br />　<br />Conn.Execute说明<br />Execute方法<br />　　该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集，该方法的使用格式分为以下两种：<br />　　　　1．执行SQL查询语句时，将返回查询得到的记录集。用法为：<br />　　　　Set 对象变量名=连接对象.Execute("SQL 查询语言")<br />　　　Execute方法调用后，会自动创建记录集对象，并将查询结果存储在该记录对象中，通过Set方法，将记录集赋给指定的对象保存，以后对象变量就代表了该记录集对象。<br /><br />　　　　2．执行SQL的操作性语言时，没有记录集的返回。此时用法为：<br />　　　　连接对象.Execute "SQL 操作性语句" [, RecordAffected][, Option]<br />　　　　　　·RecordAffected 为可选项，此出可放置一个变量，SQL语句执行后，所生效的记录数会自动保存到该变量中。通过访问该变量，就可知道SQL语句队多少条记录进行了操作。<br />　　　　　　·Option 可选项，该参数的取值通常为adCMDText，它用于告诉ADO，应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数，可使执行更高效。<br /><br />·BeginTrans、RollbackTrans、CommitTrans方法<br />　　这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开始一个事物；RollbackTrans用于回滚事务；CommitTrans用于提交所有的事务处理结果，即确认事务的处理。<br />　　事务处理可以将一组操作视为一个整体，只有全部语句都成功执行后，事务处理才算成功；若其中有一个语句执行失败，则整个处理就算失败，并恢复到处里前的状态。<br />　　BeginTrans和CommitTrans用于标记事务的开始和结束，在这两个之间的语句，就是作为事务处理的语句。判断事务处理是否成功，可通过连接对象的Error集合来实现，若Error集合的成员个数不为0，则说明有错误发生，事务处理失败。Error集合中的每一个Error对象，代表一个错误信息。
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/192857#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 14 May 2008 10:52:09 +0800</pubDate>
        <link>http://www.javaeye.com/topic/192857</link>
        <guid>http://www.javaeye.com/topic/192857</guid>
      </item>
          <item>
        <title>终于搞定VIM C开发环境</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://run-xiao.javaeye.com">run_xiao</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/192646" style="color:red;">http://www.javaeye.com/topic/192646</a>&nbsp;
          发表时间: 2008年05月13日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          花了两天时间终于把VIM写C的环境搞起来了，功能之强大，绝不逊色于任何一个IDE。终于不用再自己在Vi中跳来跳去。小show一下：<br /><img src="http://www.javaeye.com/upload/picture/pic/14295/4699bf3f-c30c-349f-b3f6-01641b8cb7d9.png?1210668554" /><br />非常感谢CSDN上Easwy的文章：<br />http://blog.csdn.net/easwy/category/234641.aspx
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/192646#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 13 May 2008 16:54:25 +0800</pubDate>
        <link>http://www.javaeye.com/topic/192646</link>
        <guid>http://www.javaeye.com/topic/192646</guid>
      </item>
          <item>
        <title>想知道大家都用到了哪些数据库技术</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ozzzzzz.javaeye.com">ozzzzzz</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/192262" style="color:red;">http://www.javaeye.com/topic/192262</a>&nbsp;
          发表时间: 2008年05月12日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          虚拟表<br />视图<br />触发器<br />存储过程<br />游标<br />临时表<br />内键<br />外键<br />这些技术并不是所有的数据库都支持。而普遍的即便支持，在大规模企业和关键应用中，对这些东西也有有所限制。比如对外键的使用。当然如果回忆以前，还可以发现有些手段已经不在被提起了。而最近社区里面讨论数据库相关的内容多起来，我想也应该把这些技术综合起来考虑一下。
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/192262#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 12 May 2008 15:42:32 +0800</pubDate>
        <link>http://www.javaeye.com/topic/192262</link>
        <guid>http://www.javaeye.com/topic/192262</guid>
      </item>
          <item>
        <title>oracle rowid真是怪呀</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zb1015.javaeye.com">zb1015</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/192465" style="color:red;">http://www.javaeye.com/topic/192465</a>&nbsp;
          发表时间: 2008年05月13日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          在官方查了一下,rowid不重复,也不能重用<br /><br />但我后进数据库的rowid怎么会比先进的小呢?
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/192465#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 13 May 2008 09:28:48 +0800</pubDate>
        <link>http://www.javaeye.com/topic/192465</link>
        <guid>http://www.javaeye.com/topic/192465</guid>
      </item>
          <item>
        <title>传一个数组的引用</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://draculaw.javaeye.com">DraculaW</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/192396" style="color:red;">http://www.javaeye.com/topic/192396</a>&nbsp;
          发表时间: 2008年05月12日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          <p>我们知道&nbsp;给一个函数传入一个数组的时候需要传入一个附加的参数&nbsp;用来标示数组的大小</p>
<p>&nbsp;</p>
<pre name="code" class="java">void print(const unsigned short * const p, const size_t n) {     cout &lt;&lt; "sizeof(p): " &lt;&lt; sizeof(p) &lt;&lt; endl;      for (size_t i = 0; i &lt; n; ++i) {         cout &lt;&lt; p[i] &lt;&lt; endl;     } }  int main() {     const unsigned short a[] = { 11, 22, 33, 44, 55 };      cout &lt;&lt; "sizeof(a): " &lt;&lt; sizeof(a) &lt;&lt; endl;     cout &lt;&lt; "sizeof(a[0]): " &lt;&lt; sizeof(a[0]) &lt;&lt; endl;      print(a, sizeof(a) / sizeof(a[0])); } </pre>
<p>&nbsp;</p>
<p>有没有什么办法不传入这个，&nbsp;对了&nbsp;就是数组的引用</p>
<p>&nbsp;</p>
<p>&nbsp;
<pre name="code" class="java">void print(const unsigned short (&amp; r)[5]) {
    cout &lt;&lt; "sizeof(r): " &lt;&lt; sizeof(r) &lt;&lt; endl;

    for (size_t i = 0; i &lt; sizeof(r) / sizeof(r[0]); ++i) {
        cout &lt;&lt; r[i] &lt;&lt; endl;
    }
}

int main() {
    const unsigned short a[] = { 11, 22, 33, 44, 55 };

    print(a);
}
</pre>
</p>
<p>&nbsp;讲引用传入之后 也就讲数组的所有信息传入了， 可以用这样的方法把数组的大小来传入，</p>
<p>可是这样子还是很不好办，因为要是为每个长度的数组都写一个这样的函数，那我们就累都累死了..</p>
<p>该怎么办呢，&nbsp;对了&nbsp;我们想到了一个好的方法&nbsp;模板</p>
<p>
<pre name="code" class="cpp">template &lt;typename T, size_t N&gt; void print(const T (&amp; r)[N]) {
    for (size_t i = 0; i &lt; N; ++i) {
        cout &lt;&lt; r[i] &lt;&lt; endl;
    }
}

int main() {
    const int c[] = { 1, 2, 4, 8 };

    print(c);

    const double d[] = { 3.14159, 2.71828, .57722 };

    print(d);
}
</pre>
</p>
<p>好的， 这样子看起来问题已经得到了很好的解决</p>
<p>可是熟悉模板的人一看就看出来问题了：如果这个函数的长度比较大，那么我们还是会在编译的时候为每个长度的数组创建一个函数，生成文件的大小还是会比较大，这么该怎么办呢？联想到了type_trails, 我们也可以做一个差不多的东西</p>
<p>
<pre name="code" class="cpp">template &lt;typename T, size_t N&gt; size_t length(const T (&amp;)[N]) {
    return N;
}
</pre>
&nbsp;</p>
<p>&nbsp;代码简单，尽量减少了需要的大小，应该来说是最好的解决方案了。为什么要说应该来说呢吗因为我们没用到STL 如果用到STL 中的Vector, 那么这么多事情我们也就不用来了。 呵呵</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/192396#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 12 May 2008 22:23:54 +0800</pubDate>
        <link>http://www.javaeye.com/topic/192396</link>
        <guid>http://www.javaeye.com/topic/192396</guid>
      </item>
          <item>
        <title>nginx 0.6.31       release</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://titanfoot.javaeye.com">titanfoot</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/192317" style="color:red;">http://www.javaeye.com/topic/192317</a>&nbsp;
          发表时间: 2008年05月12日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          <p>Changes with nginx 0.6.31 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;12 May 2008<br />
<br />
 &nbsp; &nbsp;*) Bugfix: nginx did not process FastCGI response if header was at the<br />
 &nbsp; &nbsp; &nbsp; end of FastCGI record; bug appeared in <a href="http://0.6.2./" target="_blank">0.6.2.</a>
<br />
 &nbsp; &nbsp; &nbsp; Thanks to Sergey Serov.<br />
<br />
 &nbsp; &nbsp;*) Bugfix: a segmentation fault might occur in worker process if a file<br />
 &nbsp; &nbsp; &nbsp; was deleted and the &quot;open_file_cache_errors&quot; directive was off.</p>
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/192317#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 12 May 2008 18:00:52 +0800</pubDate>
        <link>http://www.javaeye.com/topic/192317</link>
        <guid>http://www.javaeye.com/topic/192317</guid>
      </item>
          <item>
        <title>sql server中一个跨表查询的问题</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://renavatio.javaeye.com">renavatio</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/191980" style="color:red;">http://www.javaeye.com/topic/191980</a>&nbsp;
          发表时间: 2008年05月11日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          最近在项目中碰到一个问题，相同的数据分别放在三个表中（表结构如图所示），现在要从三个表中分别抽取出时间，站点，温度三类数据，以如下格式显示：<br />时间   0001  0002  0003 ....(对应表中的stationID)<br />0     22    21    23       （温度）<br />1     24    24<br />2<br />...                        (表示时间，一直到23点)<br /><br />三个表中的数据如何抽取？如果用连接的话，只能连接2个表，三个表是不能连接的，在VS05中如何以这种形式显示？
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/191980#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 11 May 2008 19:54:52 +0800</pubDate>
        <link>http://www.javaeye.com/topic/191980</link>
        <guid>http://www.javaeye.com/topic/191980</guid>
      </item>
          <item>
        <title>使用CVSACL进行CVS权限访问控制 for Linux</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sussi.javaeye.com">sovolee</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/191883" style="color:red;">http://www.javaeye.com/topic/191883</a>&nbsp;
          发表时间: 2008年05月11日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          <p style="text-align: center;"><strong><span style="font-size: small;">使用CVSACL进行CVS权限访问控制（for Linux）</span></strong> </p>
<p style="text-align: left;"><br />&nbsp;&nbsp;&nbsp; CVS是一个很成熟的版本控制系统，它是开源世界的杰作，并且已经成为开源组织使用的标准版本控制系统，在几乎所有的开源项目中得到应用。</p>
<p>&nbsp;&nbsp;&nbsp; 也正是由于CVS产生和应用于开源世界，使得它在代码的访问控制方面存在先天性的不足，在应用于大中型的商业项目的代码管理中收到一定的限制。因为这类型的项目通常都需要比较细致的分工，不同的小组分别负责不同模块的开发，代码需要比较严格的访问控制，不同的开发人员只能访问授权的代码。</p>
<p>&nbsp;&nbsp;&nbsp; 幸运的是，CVS是一个开源的软件，我们有什么需要的话可以通过修改它的源代码来实现。CVSACL就是实现访问控制的CVS补丁。它本身也是一个开源的项目，项目主页是<a href="http://cvsacl.sourceforge.net/index.html">http://cvsacl.sourceforge.net/index.html</a> 。它提供了对CVS的模块，目录和文件以及分支和tag的高级访问控制。CVSACL定义了8级不同的访问权限,分别是:</p>
<p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="center">权限</p>
</td>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="center">关键字</p>
</td>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="center">说明</p>
</td>
</tr>
<tr>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="left">没有权限</p>
</td>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="center">n</p>
</td>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="left">用户不能做任何cvs操作</p>
</td>
</tr>
<tr>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="left">读权限</p>
</td>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="center">r</p>
</td>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="left">可以执行annotate, checkout, diff, export, log, rannotate, rdiff, rlog, status命令</p>
</td>
</tr>
<tr>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="left">写权限</p>
</td>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="center">w</p>
</td>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="left">可以执行commit/checkin命令</p>
</td>
</tr>
<tr>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="left">tag</p>
</td>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="center">t</p>
</td>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="left">可以执行tag/rtag命令,依赖读权限 </p>
</td>
</tr>
<tr>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="left">创建</p>
</td>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="center">c</p>
</td>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="left">可以执行add import 命令</p>
</td>
</tr>
<tr>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="left">删除</p>
</td>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="center">d</p>
</td>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="left">可以执行rm命令</p>
</td>
</tr>
<tr>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="left">全部权限</p>
</td>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="center">a</p>
</td>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="left">可以执行所有cvs命令处理cvsacl管理命令</p>
</td>
</tr>
<tr>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="left">管理权限</p>
</td>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="center">p</p>
</td>
<td style="font-size: 10pt; color: #000000;">
<p style="font-size: 10pt; color: #000000;" align="left">可以执行所有命令</p>
</td>
</tr>
</tbody>
</table>
</p>
<p>1．&nbsp; 下载CVSACL：</p>
<p>通过如下网址可以下载到CVSACL相关程序，目前最新版本是cvsacl-1.2.5：</p>
<p><a href="https://sourceforge.net/project/showfiles.php?group_id=75057&amp;package_id=77484&amp;release_id=423655">https://sourceforge.net/project/showfiles.php?group_id=75057&amp;package_id=77484&amp;release_id=423655</a> </p>
<p>cvsacl-1.2.5-for-cvs-1.11.22.tar.gz</p>
<p>cvs-1.11.22-cvsacl-1.2.5-patched.tar.gz</p>
<p>2．&nbsp; 安装CVSACL：</p>
<p>安装方法：cvs-1.11.22-cvsacl-1.2.5-patched.tar.gz</p>
<p>[root@localhost setup_cvs]# tar -zxvf cvs-1.11.22-cvsacl-1.2.5-patched.tar.gz</p>
<p>//解压缩cvs-1.11.22-cvsacl-1.2.5-patched.tar.gz</p>
<p>[root@localhost setup_cvs]# mv cvs-1.11.22-cvsacl-1.2.5-patched cvs-1.11.22</p>
<p>//修改cvs-1.11.22-cvsacl-1.2.5-patched目录名称为 cvs-1.11.22</p>
<p>[root@localhost setup_cvs]# cd cvs-1.11.22&nbsp;&nbsp;&nbsp; //进入cvs-1.11.22</p>
<p>[root@localhost cvs-1.11.22]# ./configure&nbsp;&nbsp;&nbsp; //编译安装</p>
<p>[root@localhost cvs-1.11.22]# make</p>
<p>[root@localhost cvs-1.11.22]# make install</p>
<p>[root@localhost setup_cvs]# cvs &ndash;version&nbsp;&nbsp;&nbsp; //查看cvs版本</p>
<p>Concurrent Versions System (CVS) 1.11.22 (client/server)</p>
<p>with CVSACL Patch 1.2.5 (cvsacl.sourceforge.net)</p>
<p>注：不需要特意删除旧版本的CVS。</p>
<p>3．&nbsp; CVS服务器的配置：</p>
<p>（1） 修改配置文件：</p>
<p>[root@localhost /]# vi /etc/services</p>
<p>查看是否有：</p>
<p>cvspserver 2401/tcp #CVS client/server operations<br />cvspserver 2401/udp #CVS client/server operations</p>
<p>注：系统自带了CVS时，这2行也已经有了，只需要确认一下。如果没有，请自己加上去。 </p>
<p>（2） 创建CVS启动脚本：</p>
<p>[root@localhost /]# vi /etc/xinetd.d/cvspserver</p>
<p>内容如下：</p>
<p>service cvspserver<br />{<br />disable = no<br />flags = REUSE<br />socket_type = stream<br />wait = no<br />user = root<br />server = /usr/bin/cvs<br />server_args = -f --allow-root=/home/cvsroot pserver<br />log_on_success += USERID<br />log_on_failure += USERID<br />}</p>
<p>注：其中，server指定CVS可执行文件路径，默认安装就是/usr/bin/cvs，server_args指定源代码库路径及认证方式等，例子中把源代码存放在cvsroot的主目录中，也可以另外指定路径，但必须注意权限设置，pserver是密码认证方式，这种方式的安全性要差一些，但操作起来比较简单。请注意每行等号左右都有一个空格，否则无法启动服务。</p>
<p>（3） 重新启动xinetd服务：</p>
<p>[root@localhost /]# service xinetd restart</p>
<p>查看是否启动：[root@localhost /]# netstat -l | grep cvspserver</p>
<p>屏幕显示：tcp 0 0 *:cvspserver *:* LISTEN</p>
<p>说明已经正常启动，如果没有请做如下检查：</p>
<p>&lt;1&gt;请检查vi /etc/xinetd.d/cvspserver文件中的server = /usr/bin/cvs路径和实际执行文件所在位置是否一致；(一般这步骤即可解决该问题)</p>
<p>&lt;2&gt;请重新检查配置过程是否有错误或者遗漏；</p>
<p>&lt;3&gt;最后还必须检查防火墙的设置，把2401端口打开。</p>
<p>4．&nbsp; CVSACL权限设置：</p>
<p>（1） 创建用于CVS的专用系统组和用户：</p>
<p>[root@localhost /]# groupadd cvsroot</p>
<p>[root@localhost /]# useradd &ndash;g cvsroot cvsadmin</p>
<p>（2） 初始化cvs服务器环境：</p>
<p>[root@localhost /]# cvs -d /cvstest init</p>
<p>（3） 设置CVS配置库归属及权限：</p>
<p>[root@localhost /]# chown &ndash;R cvsadmin.cvsroot /cvstest</p>
<p>[root@localhost /]# chmod &ndash;R 770 /cvsroot</p>
<p>（4） 修改CVSROOT/CVSROOT/aclconfig配置文件：</p>
<p>[root@localhost /]# vi /cvstest/CVSROOT/aclconfig</p>
<p>UseSystemGroups=yes 行首添加&ldquo;#&rdquo;，表示注释掉。</p>
<p>UseCVSGroup=yes 去除行首的&ldquo;#&rdquo;，表示启用此句。</p>
<p>（5） 创建CVS用户及组：</p>
<p>[root@localhost /]# cd /cvstest/CVSROOT</p>
<p>[root@localhost /]# htpasswd &ndash;c passwd yueyx</p>
<p>[root@localhost /]# vi passwd</p>
<p>yueyx:*******:cvsadmin</p>
<p>将passwd文件中的所有cvs用户映射到同一个系统用户cvsadmin上。</p>
<p>[root@localhost /]# vi group</p>
<p>文件格式：</p>
<p>group1:x:1:yueyx,test1</p>
<p>用户之间用 &ldquo;,&rdquo;分割。</p>
<p>注：cvsacl有个bug，必须在组用户最前边添加一个不存在的cvs用户，group文件才会生效。原因不明，但此方法确实管用。</p>
<p>（6） 使用cvsacl细化权限：</p>
<p>[root@localhost /]# cvs -d /cvstest racl yueyx:wcd &ndash;R Project/doc</p>
<p>说明：/cvstest：配置库路径 yueyx：用户 wcd：参见本文&ldquo;CVSACL定义了8级不同的访问权限&rdquo;表格。 Project ：配置库中的Module(模块)，doc：Module(模块)下的目录</p>
<p><br />格式：cvs &ndash;d 配置库位置 racl [用户||组:权限] [-Rl] [-r tag] [模块&hellip;] [文件&hellip;]</p>
<p>- R 进行目录递归</p>
<p>- r rev 设定版本/标签</p>
<p>- l列出已定义的ACLs权限</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/191883#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 11 May 2008 09:13:10 +0800</pubDate>
        <link>http://www.javaeye.com/topic/191883</link>
        <guid>http://www.javaeye.com/topic/191883</guid>
      </item>
          <item>
        <title>mysql select into outfile</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hama.javaeye.com">hama</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/191439" style="color:red;">http://www.javaeye.com/topic/191439</a>&nbsp;
          发表时间: 2008年05月09日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          <p>虽然我一直用EMS</p>
<p>不过这一句还是要知道的：</p>
<p>select * from someTable into outfile 'D:\\aaa.txt';&nbsp;</p>
<p>还有以下option：</p>
<p><br />&nbsp;FIELDS TERMINATED BY ',' ENCLOSED BY '"';<br />&nbsp;<br />&nbsp;LINES TERMINATED BY '\n';</p>
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/191439#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 09 May 2008 14:44:22 +0800</pubDate>
        <link>http://www.javaeye.com/topic/191439</link>
        <guid>http://www.javaeye.com/topic/191439</guid>
      </item>
          <item>
        <title>Using USB in Ubuntu 8.04 Server Running on VMWare6</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bruce-lu.javaeye.com">bruce.lu</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/191239" style="color:red;">http://www.javaeye.com/topic/191239</a>&nbsp;
          发表时间: 2008年05月08日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          <p>====ENV: </p>
<p>Windows XP SP2; VMWare 6.0; Ubuntu 8.04 Server installed in VMWare</p>
<p>====Steps:</p>
<p>1. Enable USB service in VMWare;</p>
<p>2. Start Ubuntu 8.04 Server and "sudo modprobe usb-storage" to make sure the usb is enabled in Ubuntu 8.04&nbsp;Server;</p>
<p>3. Insert USB mobile disk. VMware will discover it and then prompt you to install the driver. Just go ahead and install it. After your finishing drivering, Ubuntu 8.04 Server will discover the mobile disk;</p>
<p>4. Ok, now we will mount our mobile disk. sudo mount -t vfat /dev/sdb1 /mnt. Attention pls: sdb1 will be variable. Please check your own /dev.</p>
<p>5. cd /mnt; ls; Enjoy!!</p>
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/191239#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 08 May 2008 22:47:46 +0800</pubDate>
        <link>http://www.javaeye.com/topic/191239</link>
        <guid>http://www.javaeye.com/topic/191239</guid>
      </item>
          <item>
        <title>无意中网上看到一篇关于gedit的文章，原来gnome自带的gedit是个宝啊</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://harry.javaeye.com">harry</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/190727" style="color:red;">http://www.javaeye.com/topic/190727</a>&nbsp;
          发表时间: 2008年05月07日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          无意中网上看到一篇关于gedit的文章，发现原来gedit是个宝啊。<br />装上插件后就可以像textmate一样好用<br />http://grigio.org/textmate_gedit_few_steps<br />http://www.youtube.com/watch?v=yuAR6NxiEgQ<br />http://grigio.org/pimp_my_gedit_was_textmate_linux<br />经过使用，我推荐snap open，Class Browser，Snippets，eddt，Session Saver这几个插件
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/190727#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 07 May 2008 22:04:32 +0800</pubDate>
        <link>http://www.javaeye.com/topic/190727</link>
        <guid>http://www.javaeye.com/topic/190727</guid>
      </item>
          <item>
        <title>heartbeat V2在CentOS4.6上简要安装、配置笔记</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sorphi.javaeye.com">sorphi</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/191076" style="color:red;">http://www.javaeye.com/topic/191076</a>&nbsp;
          发表时间: 2008年05月08日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          <p>heartbeat V2在CentOS4.6上简要安装、配置笔记</p>
<p>（shell行命令用粗体表示）</p>
<h4>一、准备工作</h4>
<p>1、环境<br />
两台CentOS4.6，各一个网卡，IP地址分别为192.168.0.1和192.168.0.2<br />
<br />
<strong>uname -n</strong>
<br />
分别显示node1和node2<br />
<br />
<strong>cat /etc/hosts</strong>
<br />
均显示<br />
127.0.0.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localhost.localdomain&nbsp;&nbsp; localhost<br />
192.168.0.1 node1<br />
192.168.0.2 node2<br />
<br />
<br />
2、两个node分别安装libnet<br />
hearbeat默认编译选项需要e2fsprogs/libnet库，CentOS4.6默认安装了e2fsprogs，所以这里先安装libnet<br />
<br />
<strong>cd /usr/local/src<br />
wget http://www.packetfactory.net/libnet/dist/libnet.tar.gz<br />
tar zxvf libnet.tar.gz<br />
cd libnet<br />
./configure<br />
make &amp;&amp; make install</strong>
<br />
<br />
3、两个node分别创建heartbeat相关的用户和组<br />
<strong>groupadd haclient<br />
useradd -g haclient hacluster</strong>
<br />
<br />
4、关闭两个node上的防火墙（如SELINUX），或者设置为信任eth0，使得能相互听见对方心跳。否则两个node都认为对方的状态为dead。（我在这个问题上折腾了一会。其他如采用双绞线通过串口进行心跳监控之类的方案也必须检查双绞线是否正常，保证线路通畅。）<br />
<br /></p>
<h4>二、两个node分别下载、编译、安装heartbeat</h4>
<p><strong>cd /usr/local/src<br />
wget http://linux-ha.org/download/heartbeat-2.1.3.tar.gz<br />
tar zxvf heartbeat-2.1.3.tar.gz<br />
cd heartbeat-2.1.3<br />
./ConfigureMe configure</strong>
<br />
<br />
大致看看编译统计信息后安装<br />
<br />
<strong>make &amp;&amp; make install</strong>
<br />
<br /></p>
<h4>三、在node1上的简易配置</h4>
<p>将配置文件模板拷贝到默认配置目录（可选，也可手工创建。模板文件中的注释可帮助你理解各配置选项的含义）<br />
<br />
<strong>cp doc/authkeys /etc/ha.d/<br />
cp doc/ha.cf /etc/ha.d/<br />
<br />
<br />
cd /etc/ha.d/</strong>
<br />
<br />
开始编辑配置文件（两台机器上都需要安装和配置）<br />
1、编辑/etc/ha.d/authkeys，使用的是第1种认证方式(crc)，接着把文件的权限改为600：<br />
<strong>cat /etc/ha.d/authkeys</strong>
<br />
显示<br />
auth 1<br />
1 crc<br />
<br />
更改文件权限<br />
<strong>chmod 600 /etc/ha.d/authkeys</strong>
<br />
<br />
关于<a href="http://linux-ha.org/authkeys" target="_blank">Configuring authkeys</a>
<br />
<br />
2、编辑/etc/ha.d/ha.cf：<br />
<strong>cat /etc/ha.d/ha.cf | grep -v '#'</strong>
<br />
文件显示如下<br />
keepalive 10<br />
deadtime 60<br />
warntime 20<br />
initdead 60<br />
udpport 694<br />
mcast eth0 225.0.0.1 694 1 0<br />
watchdog /dev/watchdog<br />
node node1 node2<br />
ping 192.168.0.254<br />
use_logd yes<br />
compression&nbsp;&nbsp;&nbsp;&nbsp; zlib<br />
traditional_compression false<br />
crm on<br />
autojoin any<br />
<br />
关于<a href="http://linux-ha.org/ha.cf" target="_blank">ha.cf的指令说明</a>
<br />
<br />
注意：<br />
ping 192.168.0.254<br />
ping网关，使得每个节点得知自己是否已经离线。我尝试去掉该选项的结果是：当node1拔掉网线之后，node2接管了资源。再插上node1的网线，node2的日志中会不停的出现&ldquo;WARN: crmd_ha_msg_callback&rdquo;信息（不信可以试试）。<br />
<br />
<a href="http://linux-ha.org/GettingStartedV2#head-d974b71a398e73a8cc9a31de39000fb0213449f0" target="_blank">Additional Options</a>
 应该是V2中用来监控Heartbeat运行时对cib.xml的修改。除调试外感觉没啥用，日志中新增了一堆diff信息。<br />
# apiauth cibmon&nbsp;&nbsp; uid=hacluster<br />
# respawn hacluster /usr/lib/heartbeat/cibmon -d<br />
<br />
<br />
3、资源文件配置。这里以<a href="http://linux-ha.org/GettingStartedV2/TwoApaches" target="_blank">Two Apache Web Servers in an Active/Active Configuration</a>
的更改版(Two Nginx Web Servers in an Active/Active Configuration)来举例。编辑/etc/ha.d/haresources（V1）或者/var/lib/heartbeat/crm/cib.xml（V2）<br />
cib.xml对于初学者来说很难编写，官方的例子中不能简单的拷贝过来，贸然运行heartbeat会导致node重启，我猜测的原因是官方的示例并未遵循<a href="http://hg.clusterlabs.org/pacemaker/dev/file/tip/xml/crm-1.0.dtd" target="_blank">其DTD</a>
。<br />
<br />
简单的方法是采用hearbeat提供的工具将V1方式的资源配置文件转换为V2 style的。比如：<br />
<br />
<strong>cat /tmp/haresources</strong>
<br />
文件内容显示为：<br />
node1 192.168.0.3 nginx<br />
node2 192.168.0.4 nginx<br />
<br />
意思是，优先在node1上绑定192.168.0.3这个虚拟IP，并管理(start/stop/status)本机上的nginx。优先在node2上绑定192.168.0.4这个虚拟IP，并管理本机上的nginx。<br />
<br />
这里nginx是一个LSB style脚本，位于/etc/init.d/nginx，示例可见<a href="190257" target="_blank">这里</a>
。先保证nginx已经安装到两个node上了。<br />
<br />
转换命令<br />
<strong>/usr/lib/heartbeat/haresources2cib.py --stout -c /etc/ha.d/ha.cf /tmp/haresources</strong>
<br />
<br />
运行转换命令之后，/var/lib/heartbeat/crm/cib.xml自动产生。（请在熟悉了hearbeat之后再去尝试修改该文件。）<br />
<br /></p>
<h4>四、将node1上的heartbeat相关的配置文件拷贝到node2</h4>
<p><strong>scp /etc/ha.d/ha.cf root@node2:/etc/ha.d/ha.cf<br />
scp /etc/ha.d/authkeys root@node2:/etc/ha.d/authkeys<br />
scp /var/lib/heartbeat/crm/cib.xml root@node2:/var/lib/heartbeat/crm/cib.xml</strong>
<br />
<br />
请确保两个node上的配置文件内容和权限相同。<br />
<br /></p>
<h4>五、在两个node上启动heartbeat并观察结果</h4>
<p><br />
1、修改两个node上nginx的index.html<br />
在node1上：<br />
<strong>echo 'node1 welcome!' &gt; /usr/local/nginx/html/index.html</strong>
<br />
在node1上：<br />
<strong>echo 'node2 welcome!' &gt; /usr/local/nginx/html/index.html</strong>
<br />
<br />
2、启动两个node上的heartbeat，然后稍等片刻（时间长短取决于ha.cf中的相关参数）。<br />
<strong>/etc/init.d/heartbeat start</strong>
<br />
<br />
<br />
按照我这里的ha.cf配置，日志信息应该可以通过<br />
<strong>tail /var/log/messages -f</strong>
<br />
进行查看<br />
<br />
3、在两个node上分别运行<strong>ifconfig</strong>
和<strong>ps -ef</strong>
来查看虚拟IP和ngnix是否已经启动。<br />
<br />
4、在浏览器中分别访问http://192.168.0.3/和http://192.168.0.4/，观察。<br />
<br />
5、将node1从局域网中断开，稍等片刻。再重复上面的步骤3、4，观察。<br />
<br />
6、将node1重新接入局域网，稍等片刻。再重复上面的步骤3、4，观察。<br />
<br />
<br />
相信你的第一个示例成功之后，对heartbeat的基础原理应该有所了解。接着再详细查看官方文档和网络资料，结合实际进行特定服务的HA，多试验、多失败、多研究。<br />
<br />
主要参考资料：<br />
<a href="http://linux-ha.org/" target="_blank">官方网站</a>
中的文档<br />
<a href="http://linux.chinaunix.net/bbs/forum-9-1.html" target="_blank">CU集群和虚拟机论坛</a>
中相关线索<br /></p>
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/191076#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 08 May 2008 14:44:29 +0800</pubDate>
        <link>http://www.javaeye.com/topic/191076</link>
        <guid>http://www.javaeye.com/topic/191076</guid>
      </item>
          <item>
        <title>对于oracle进行简单树查询(递归查询)</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jelly.javaeye.com">jelly</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/191016" style="color:red;">http://www.javaeye.com/topic/191016</a>&nbsp;
          发表时间: 2008年05月08日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          <h1>对于oracle进行简单树查询(递归查询)</h1>
<p>
<table border="0">
<tbody>
<tr>
<td>DEPTID</td>
<td>PAREDEPTID</td>
<td>NAME</td>
</tr>
<tr>
<td>NUMBER</td>
<td>NUMBER</td>
<td>CHAR (40 Byte)</td>
</tr>
<tr>
<td>部门id</td>
<td>父部门id(所属部门id)</td>
<td>部门名称</td>
</tr>
</tbody>
</table>
</p>
<p>通过子节点向根节点追朔.</p>
<pre name="code" class="sql"> select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid </pre>
<p>&nbsp;</p>
<p>通过根节点遍历子节点. </p>
<pre name="code" class="sql">select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid </pre>
<p>&nbsp;</p>
<p>可通过level 关键字查询所在层次. </p>
<pre name="code" class="sql">select a.*,level from persons.dept a start with paredeptid=0 connect by prior deptid=paredeptid </pre>
<p>&nbsp;</p>
<p>再次复习一下:start with ...connect by 的用法， start with 后面所跟的就是就是递归的种子。 </p>
<p>递归的种子也就是递归开始的地方 connect by 后面的"prior" 如果缺省：则只能查询到符合条件的起始行，并不进行递归查询； </p>
<p>connect by prior 后面所放的字段是有关系的，它指明了查询的方向。 </p>
<p>练习： 通过子节点获得顶节点 </p>
<pre name="code" class="sql">select FIRST_VALUE(deptid) OVER (ORDER BY LEVEL DESC ROWS UNBOUNDED PRECEDING) AS firstdeptid from persons.dept start with deptid=76 connect by prior paredeptid=deptid</pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/191016#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 08 May 2008 12:44:49 +0800</pubDate>
        <link>http://www.javaeye.com/topic/191016</link>
        <guid>http://www.javaeye.com/topic/191016</guid>
      </item>
          <item>
        <title>面向对象的C语言编程 OOC方面资源</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiebh.javaeye.com">xiebh</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/191005" style="color:red;">http://www.javaeye.com/topic/191005</a>&nbsp;
          发表时间: 2008年05月08日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          <a href="http://wiki.chinaunix.net/index.php/OOC" target="_blank">http://wiki.chinaunix.net/index.php/OOC</a>
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/191005#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 08 May 2008 12:19:09 +0800</pubDate>
        <link>http://www.javaeye.com/topic/191005</link>
        <guid>http://www.javaeye.com/topic/191005</guid>
      </item>
          <item>
        <title>MySql 查询语句性能问题</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://shijian0306.javaeye.com">shijian0306</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/190917" style="color:red;">http://www.javaeye.com/topic/190917</a>&nbsp;
          发表时间: 2008年05月08日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          <span style="color: red">[/color][color=red]第一种方式：</span><br />select tbi.customerName , twb.amount , tdt.name<br />from <br />t_waste_books twb , t_accounts tas , <br />TCustomerBaseInfo tbi ,TCustomerService tcs,<br />TDepartment tdt<br />where twb.account_id = tas.account_id<br />and twb.type = 0 and twb.sub_Type = 0<br />and tas.customer_id = tbi.customerId<br />and tbi.csId = tcs.id <br />and tcs.department_id = tdt.department_id;<br />这种是联合查询。<br /><br /><br /><br /><span style="color: red">第二种查询：</span><br />select tas.customer_id,twb.amount<br />from <br />t_waste_books twb , t_accounts tas<br />where <br />twb.type = 0 and twb.sub_Type = 0<br />and twb.account_id = tas.account_id<br />-----<span style="color: red">1</span><br /><br />select tbi.customerName , tcs.department_id from  <br />TCustomerBaseInfo tbi,TCustomerService tcs<br />where tbi.csId = tcs.id and tbi.customerId = ?<br />-----<span style="color: red">2</span><br /><br />select name from TDepartment tdt where tdt.department_id = ?<br />-----<span style="color: red">3</span><br /><br /><br /><br />这种是相当于多表2层嵌套In查询， 用第<span style="color: red">1</span>的结果作为<span style="color: red">2</span>的条件，在用2的结果作为得到<span style="color: red">3</span>的条件！主要也是得到<br />tbi.customerName , twb.amount , tdt.name昨天写了个测试类，测试2中查询用的时间，发现第二种用的时间很长相当于第一种的2倍，可同事坚持说第二种查询速度快，我用如下测试<br />Date start = new Date();<br />System.out.println(start.getTime());				 <br /><span style="color: red">//List&lt;Recharge> list = rechargeService.hebing();			 <br />List&lt;Recharge> list = rechargeService.fenkai();</span><br />Date end = new Date();<br />System.out.println(end.getTime());<br />long span = end.getTime() - start.getTime();<br /><br />发现时间真的是2倍以上 ，本查询语句应避免IN查询。请问大家觉得呢？平时大家觉得那种性能更好些？？？<br />我的数据库MYSQL
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/190917#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 08 May 2008 10:00:54 +0800</pubDate>
        <link>http://www.javaeye.com/topic/190917</link>
        <guid>http://www.javaeye.com/topic/190917</guid>
      </item>
          <item>
        <title>詳解SQL Server数据库备份的兩种方式</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://morris.javaeye.com">morris</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/190894" style="color:red;">http://www.javaeye.com/topic/190894</a>&nbsp;
          发表时间: 2008年05月08日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          SQL Server数据库备份有两种方式，一种是使用BACKUP DATABASE将数据库文件备份出去，另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式。下面将主要讨论一下后者的备份与恢复。本文假定您能熟练使用SQL Server EntERPrise Manager(SQL Server企业管理器)和SQL Server Quwey Analyser(SQL Server查询分析器) <br /><br />1、正常的备份、SQL数据库恢复方式 <br />正常方式下，我们要备份一个数据库，首先要先将该数据库从运行的数据服务器中断开，或者停掉整个数据库服务器，然后复制文件。 <br />卸下数据库的命令：Sp_detach_db 数据库名 <br />连接数据库的命令： <br />Sp_attach_db或者sp_attach_single_file_db <br />s_attach_db [@dbname =] ′dbname′, [@filename1 =] ′filename_n′[,...16] <br />sp_attach_single_file_db [@dbname =] ′dbname′, [@physname =] ′physical_name′ <br /><br />　　使用此方法可以正确恢复SQL Sever7.0和SQL Server 2000的数据库文件，要点是备份的时候一定要将mdf和ldf两个文件都备份下来，mdf文件是数据库数据文件，ldf是数据库日志文件。 <br /><br />例子： <br />   假设数据库为test，其数据文件为test_data.mdf，日志文件为test_log.ldf。下面我们讨论一下如何备份、恢复该数据库。 <br /><br />卸下数据库：sp_detach_db 'test' <br /><br />连接数据库： <br />sp_attach_db 'test', <br />'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_data.mdf', <br />'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf' <br />sp_attach_single_file_db 'test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_data.mdf' <br /><br /><br />2、只有mdf文件的恢复技术 <br />　　由于种种原因，我们如果当时仅仅备份了mdf文件，那么恢复起来就是一件很麻烦的事情了。 <br />　　如果您的mdf文件是当前数据库产生的，那么很侥幸，也许你使用sp_attach_db或者sp_attach_single_file_db可以恢复数据库，但是会出现类似下面的提示信息 <br /><br />设备激活错误。 <br />物理文件名 'C:\Program Files\Microsoft SQL Server\MSSQL\data\test_Log.LDF' 可能有误。 <br />已创建名为 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.LDF' 的新日志文件。 <br /><br />　　但是，如果您的数据库文件是从其他计算机上复制过来的，那么很不幸，也许上述办法就行不通了。你也许会得到类似下面的错误信息 <br />服务器: 消息 1813，级别 16，状态 2，行 1 <br />未能打开新数据库 'test'。CREATE DATABASE 将终止。 <br />设备激活错误。物理文件名 'd:\test_log.LDF' 可能有误。<br /> <br />怎么办呢?别着急，下面我们举例说明恢复办法。 <br />A.我们使用默认方式建立一个供恢复使用的数据库(如test)。可以在SQL Server Enterprise Manager里面建立。 <br /><br />B.停掉数据库服务器。 <br /><br />C.将刚才生成的数据库的日志文件test_log.ldf删除，用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件test_data.mdf。 <br /><br />D.启动数据库服务器。此时会看到数据库test的状态为“置疑”。这时候不能对此数据库进行任何操作。<br /> <br />E.设置数据库允许直接操作系统表。此操作可以在SQL Server EntERPrise Manager里面选择数据库服务器，按右键，选择“属性”，在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。 <br />use master <br />go <br />sp_configure 'allow updates',1 <br />go <br />reconfigure with override <br />go <br /><br />F.设置test为紧急修复模式: <br />update sysdatabases set status=-32768 where dbid=DB_ID('test') <br />  此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表，但是仅仅有系统表 <br /><br />G.下面执行真正的恢复操作，重建数据库日志文件: <br />dbcc rebuild_log('test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf') <br />执行过程中，如果遇到下列提示信息： <br />服务器: 消息 5030，级别 16，状态 1，行 1 未能排它地锁定数据库以执行该操作。 <br />DBCC 执行完毕。如果 DBCC 输出了错误信息，请与系统管理员联系。 <br />　说明您的其他程序正在使用该数据库，如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了test库的系统表，那么退出SQL Server Enterprise Manager就可以了。 <br /><br />正确执行完成的提示应该类似于：<br />　　警告: 数据库 'test' 的日志已重建。已失去事务的一致性。应运行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项，并且可能需要删除多余的日志文件。 <br />　　DBCC 执行完毕。如果 DBCC 输出了错误信息，请与系统管理员联系。 <br />　　此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。 <br /><br />H.验证数据库一致性: dbcc checkdb('test') <br />一般执行结果如下： <br />CHECKDB 发现了 0 个分配错误和 0 个一致性错误(在数据库 'test' 中)。 <br />DBCC 执行完毕。如果 DBCC 输出了错误信息，请与系统管理员联系。 <br /><br />I.设置数据库为正常状态 <br />sp_dboption 'test','dbo use only','false' <br />如果没有出错，那么恭喜，现在就可以正常的使用恢复后的数据库啦。 <br /><br />J.最后一步，我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。因为平时直接操作系统表是一件比较危险的事情。当然，我们可以在SQL Server Enterprise Manager里面恢复，也可以使用如下语句完成: <br />sp_configure 'allow updates',0 <br />go <br />reconfigure with override <br />go
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/190894#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 08 May 2008 09:06:44 +0800</pubDate>
        <link>http://www.javaeye.com/topic/190894</link>
        <guid>http://www.javaeye.com/topic/190894</guid>
      </item>
          <item>
        <title>优化SQl语句的十个重要步骤</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://morris.javaeye.com">morris</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/190888" style="color:red;">http://www.javaeye.com/topic/190888</a>&nbsp;
          发表时间: 2008年05月08日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          优化SQl语句的十个重要步骤： <br /><br />1.确保TIMED_STATISTICS在实例级设置为TRUE。 <br />2.确保MAX_DUMP_FILE_SIZE设置为足够大的值。 <br />3.确定指向USER_DUMP_DEST的位置，并确保有足够大的值。 <br />4.为正在被讨论的会话开启SQL_TRACE。 <br />5.运行应用程序。 <br />6.确定跟踪文件的位置。 <br />7.在步骤6所确定的跟踪文件上运行tkprof以产生跟踪输出文件。 <br />8.研究跟踪输出文件。 <br />9.优化最昂贵的SQL语句。 <br />10.反复运行步骤4到步骤9，直到所需的性能目标达到为止。
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/190888#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 08 May 2008 08:50:20 +0800</pubDate>
        <link>http://www.javaeye.com/topic/190888</link>
        <guid>http://www.javaeye.com/topic/190888</guid>
      </item>
          <item>
        <title>最经典的C语言学习丛书 </title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiebh.javaeye.com">xiebh</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/190622" style="color:red;">http://www.javaeye.com/topic/190622</a>&nbsp;
          发表时间: 2008年05月07日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          <p><span><span style="font-family: Times New Roman;">[Deitel94] H. M. Deitel</span>
</span>
<span style="font-family: 宋体;">，《</span>
<span><span style="font-family: Times New Roman;">C</span>
</span>
<span style="font-family: 宋体;">程序设计教程（</span>
<span><span style="font-family: Times New Roman;">C How to Program</span>
</span>
<span style="font-family: 宋体;">）》第二版，中。</span>
</p>
<p><span><span style="font-family: Times New Roman;">[Prata04] Stephen Prata</span>
</span>
<span style="font-family: 宋体;">，</span>
<span style="font-family: 宋体;">《</span>
<span><span style="font-family: Times New Roman;">C Primer Plus</span>
</span>
<span style="font-family: 宋体;">（</span>
<span><span style="font-family: Times New Roman;">C Primer Plus</span>
</span>
<span style="font-family: 宋体;">）</span>
<span style="font-family: 宋体;">》第五版</span>
<span style="font-family: 宋体;">，</span>
<span style="font-family: 宋体;">中</span>
<span><span style="font-family: Times New Roman;">E</span>
</span>
<span style="font-family: 宋体;">。</span>
</p>
<p><span><span style="font-family: Times New Roman;">[Kelley97] Al Kelley</span>
</span>
<span style="font-family: 宋体;">、</span>
<span><span style="font-family: Times New Roman;">Ira Pohl</span>
</span>
<span style="font-family: 宋体;">，《</span>
<span><span style="font-family: Times New Roman;">C</span>
</span>
<span style="font-family: 宋体;">语言教程（</span>
<span><span style="font-family: Times New Roman;">A Book on C: Programming in C</span>
</span>
<span style="font-family: 宋体;">）》，英。</span>
</p>
<p><span><span style="font-family: Times New Roman;">[Roberts94] Eric </span>
<span style="font-family: Times New Roman;">S. Roberts</span>
<span style="font-family: 宋体;"><span>，《</span>
</span>
<span style="font-family: Times New Roman;">C</span>
<span style="font-family: 宋体;"><span>语言的科学与<span>艺术（</span>
</span>
</span>
<span style="font-family: Times New Roman;">The</span>
<span style="font-family: Times New Roman;"> Art and Science of C: A Library Based Introduction to Computer Science</span>
</span>
<span style="font-family: 宋体;">）》，中英。</span>
</p>
<p><span><span style="font-family: Times New Roman;">[Harbison02] Harbison</span>
</span>
<span style="font-family: 宋体;">、</span>
<span><span style="font-family: Times New Roman;">Steele</span>
</span>
<span style="font-family: 宋体;">，《</span>
<span><span style="font-family: Times New Roman;">C</span>
</span>
<span style="font-family: 宋体;">语言参考手册（</span>
<span><span style="font-family: Times New Roman;">C: A Reference Manual</span>
</span>
<span style="font-family: 宋体;">）》第五版，英。</span>
</p>
<p><span><span style="font-family: Times New Roman;">[Kernighan88] Kernighan</span>
</span>
<span style="font-family: 宋体;">、</span>
<span><span style="font-family: Times New Roman;">Ritchie</span>
</span>
<span style="font-family: 宋体;">，《</span>
<span><span style="font-family: Times New Roman;">C</span>
</span>
<span style="font-family: 宋体;">程序设计语言（</span>
<span><span style="font-family: Times New Roman;">The C Programming Language</span>
</span>
<span style="font-family: 宋体;">）》第二版，中英</span>
<span><span style="font-family: Times New Roman;">E</span>
</span>
<span style="font-family: 宋体;">。</span>
</p>
<p><span><span style="font-family: Times New Roman;">[C99] ISO/IEC 9899:1999</span>
</span>
<span style="font-family: 宋体;">，</span>
<span><span style="font-family: Times New Roman;">C</span>
</span>
<span style="font-family: 宋体;">标准</span>
<span><span style="font-family: Times New Roman;">1999</span>
</span>
<span style="font-family: 宋体;">年版，</span>
<span><span style="font-family: Times New Roman;">E</span>
</span>
<span style="font-family: 宋体;">。</span>
</p>
<p><span><span style="font-family: Times New Roman;">[Kernighan99] Kernighan</span>
</span>
<span style="font-family: 宋体;">、</span>
<span><span style="font-family: Times New Roman;">Pike</span>
</span>
<span style="font-family: 宋体;">，《程序设计实践（</span>
<span><span style="font-family: Times New Roman;">The Practice of Programming</span>
</span>
<span style="font-family: 宋体;">）》，中英电。</span>
</p>
<p><span><span style="font-family: Times New Roman;">[Linden94] Peter van der Linden</span>
</span>
<span style="font-family: 宋体;">，《</span>
<span><span style="font-family: Times New Roman;">C</span>
</span>
<span style="font-family: 宋体;">专家编程（</span>
<span><span style="font-family: Times New Roman;">Expert C Programming</span>
</span>
<span style="font-family: 宋体;">）》，中</span>
<span><span style="font-family: Times New Roman;">E</span>
</span>
<span style="font-family: 宋体;">。</span>
</p>
<p><span><span style="font-family: Times New Roman;">[Maguire93] Steve Maguire</span>
</span>
<span style="font-family: 宋体;">，《编程精粹─</span>
<span><span style="font-family: Times New Roman;"> Microsoft</span>
</span>
<span style="font-family: 宋体;">编写优质无错</span>
<span><span style="font-family: Times New Roman;">C</span>
</span>
<span style="font-family: 宋体;">程序秘诀（</span>
<span><span style="font-family: Times New Roman;">Writing Solid Code: Microsoft's Techniques for Developing Bug-Free C Programs</span>
</span>
<span style="font-family: 宋体;">）》，</span>
<span><span style="font-family: Times New Roman;">E</span>
</span>
<span style="font-family: 宋体;">电。</span>
</p>
<p><span><span style="font-family: Times New Roman;">[Bryant02] Bryant</span>
</span>
<span style="font-family: 宋体;">、</span>
<span><span style="font-family: Times New Roman;">O</span>
</span>
<span style="font-family: 宋体;">&rsquo;</span>
<span><span style="font-family: Times New Roman;">Hallaron</span>
</span>
<span style="font-family: 宋体;">，《深入理解计算机系统（</span>
<span><span style="font-family: Times New Roman;">Computer Systems: A Programmer</span>
</span>
<span style="font-family: 宋体;">&rsquo;</span>
<span><span style="font-family: Times New Roman;">s Perspective</span>
</span>
<span style="font-family: 宋体;">）》，中英</span>
<span><span style="font-family: Times New Roman;">E</span>
</span>
<span style="font-family: 宋体;">。</span>
</p>
<p><span><span style="font-family: Times New Roman;"><span>&nbsp;</span>
[Koenig89] Andrew Koenig</span>
</span>
<span style="font-family: 宋体;">，《</span>
<span><span style="font-family: Times New Roman;">C</span>
</span>
<span style="font-family: 宋体;">陷阱与缺陷（</span>
<span><span style="font-family: Times New Roman;">C Traps and Pitfalls</span>
</span>
<span style="font-family: 宋体;">）》，中</span>
<span><span style="font-family: Times New Roman;">E</span>
</span>
<span style="font-family: 宋体;">电。</span>
</p>
<p><span><span style="font-family: Times New Roman;">[</span>
</span>
<span style="font-family: 宋体;">林锐</span>
<span><span style="font-family: Times New Roman;">03] </span>
</span>
<span style="font-family: 宋体;">林锐、韩永泉，《高质量程序设计指南&mdash;&mdash;</span>
<span><span style="font-family: Times New Roman;">C++/C</span>
</span>
<span style="font-family: 宋体;">语言》第二版，中电。</span>
</p>
<p><span><span style="font-family: Times New Roman;">[Weiss96] Mark Allen Weiss</span>
</span>
<span style="font-family: 宋体;">，《数据结构与算法分析&mdash;&mdash;</span>
<span><span style="font-family: Times New Roman;">C</span>
</span>
<span style="font-family: 宋体;">语言描述（</span>
<span><span style="font-family: Times New Roman;">Data Structures and Algorithm Analysis in C</span>
</span>
<span style="font-family: 宋体;">）》第二版，中。</span>
</p>
<p><span><span style="font-family: Times New Roman;">[Cormen01] Cormen</span>
</span>
<span style="font-family: 宋体;">、</span>
<span><span style="font-family: Times New Roman;">Leiserson</span>
</span>
<span style="font-family: 宋体;">、</span>
<span><span style="font-family: Times New Roman;">Rivest</span>
</span>
<span style="font-family: 宋体;">、</span>
<span><span style="font-family: Times New Roman;">Stein</span>
</span>
<span style="font-family: 宋体;">，《算法导论（</span>
<span><span style="font-family: Times New Roman;">Introduction to Algorithms</span>
</span>
<span style="font-family: 宋体;">）》第二版，英</span>
<span><span style="font-family: Times New Roman;">E</span>
</span>
<span style="font-family: 宋体;">。</span>
</p>
<p><span><span style="font-family: Times New Roman;">[Knuth98] Donald Knuth</span>
</span>
<span style="font-family: 宋体;">，《计算机程序设计艺术（</span>
<span><span style="font-family: Times New Roman;">The Art of Computer Programming</span>
</span>
<span style="font-family: 宋体;">）》</span>
<span><span style="font-family: Times New Roman;">I</span>
</span>
<span style="font-family: 宋体;">、</span>
<span><span style="font-family: Times New Roman;">II</span>
</span>
<span style="font-family: 宋体;">、</span>
<span><span style="font-family: Times New Roman;">III</span>
</span>
<span style="font-family: 宋体;">卷，中英。</span>
</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/190622#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 07 May 2008 15:35:58 +0800</pubDate>
        <link>http://www.javaeye.com/topic/190622</link>
        <guid>http://www.javaeye.com/topic/190622</guid>
      </item>
      </channel>
</rss>
