SUGA's profileIMHOPhotosBlogListsMore ![]() | Help |
IMHO工作学习见闻 技术分享 May 31 大学里小偷最爱偷的十样东西在大学里,总是有很多东西,原来是属于你的,然后莫名其妙就再也找不着了,据国家小偷协会不完全统计。在大学里,他们最愿意偷的东西有以下几种。 第十位:被子 可能有很多人不理解为什么被子能入选,我给大家解释一下,首先要从学校说起。一般来说,大学一进校,学校就会经我们准备好被子等生活用品,当然是得自己出钱的,想要学校白送,除了把你遣送回家以外,是不会白送的。再说被子的事情,被子因为是学校统一发的,所以花式是一样的,偷了也没人会知道,你怎么查也是查不到的。然后说怎么个偷法,一般来说,学校的寝室不会都是阳面,在阴面的同学就会把被子拿到天台上去晒,然后也不会陪着被子在上面晒。别的同学呢,看好机会,上去把被子拿了,你说这事儿,你怎么查? 失主需要度:10 偷窃难度:3 第九位:洗发水 其实这个到没什么好说的,大多数都不是别人蓄意要偷。一般来说,有两种情况会被偷,第一,自己去洗澡,忘到冲凉房了,过了一天还想起来。这样的洗发水,要是不被偷,那才怪了,有一次,我的牙刷没拿回来,都不见了,这事儿没地儿说理去。第二,哥们打球回来,然后自己的洗发水用完了,一身汗也不想出去,自己寝室找不到,就去别的寝室打一瓶,用谁的不是用啊。但是回来之后,怎么也想不起,到底是拿的谁的,然后就用了。这你也不好怪别人,点儿被不能怪社会啊。 失主需要度:8 偷窃难度:2 第八位:书 窃书,也是偷书的一种。最好是把书偷去了你能自己看看,要是自己不看,直接去旧书市场,一块一本给卖了,那真的很不地道。现在的书大家都知道,你抄我,我抄你的,还老贵,买10本同一专业的书,你总结一下,最多有5本是自己创新的,还有5本,都是把这5本的书,这找一段,那找一段合在一起的,和我们写论文是一样的。在教室,一不小心书就没了,这很正常。 失主需要度:10 偷窃难度:5 第七位:钱包 钱包这东西吧,也不好说,也不能说是大学里容易被偷,这玩艺儿到哪儿都容易被偷,我可不是说的瞎话。偷钱包是个高级工种,一般人还真不会偷就是了,传说中,还得食指和中指一样长。这可不是朝夕之功啊,台上一分钟,台下十年功,要是被捉到,别提多惨了。现在都不把小偷当人,都往死里打。 失主需要度:9 偷窃难度:8 第六位:饭卡 这个,你只要在食堂小心一点儿就好了,在别的地方,也没什么。关键是你在食堂的时候,不能把饭卡挂在胸前。我见到一个最狠的哥们,可能是开玩笑啊,不过大家还是引以为鉴的好。一个同学刚打好饭,在那个搞饭盒呢,把饭人多,挤嘛,第二个打饭的同学上去,打了饭,随手从第一个同学胸前拿了卡就刷了。如果是认识还好,要是不认识,这也太狠了。所以饭卡这个东西啊,不但要防被偷,还得防盗用。 失主需要度:7 偷窃难度:7 第五位:手机 看看《天下无贼》吧,那是对手机被偷最完美的诠释。现在一般大学生身上最值钱的也就是手机了,偷别的也不值几个钱,所是手机是很容易丢的。 失主需要度:9 偷窃难度:6 第四位:电子辞典 上自习的时候,谁不打个盹儿啊,泱泱中国都还有打盹儿的时候。这一睡东西就给丢了,很正常。上回哪儿看了个校园的短片就是这样的,上自习,别的也没什么值钱的东西,也就电子辞典了。我不是有意说家景不好的同学,不过,他们是经常干这种事情,因为小偷是不会去自习室的。 失主需要度:5 偷窃难度:6 第三位:自行车 不管多少人给你看车,该丢还得丢。大学城里的自行车,偷来买去,总数从来没变过,在变的只有车的主人。如果你看见一辆自行车很像你的,但是颜色不对,那你上去用钥匙刮一下,没准儿就能刮出个你熟悉的颜色。 失主需要度:4 偷窃难度:7 第二位:足球 经常踢球的朋友可能都有过丢球的经历,当然也包括篮球了。一个人,抱个球去踢,想加到别人一伙里,别人同意了,但是别人有球,就把自己的球放到边上。一阵拼杀之后,夕阳西下,一找自己带来的球,没了!就是这么回事儿,你别说,现在的球还挺贵,我记得我在高中踢15块的足球,我们班,一个周踢坏一个,现在到大学来,踢150的足球,一学期不见3个。 失主需要度:6 偷窃难度:4 第一位:女朋友 大学男生,什么都是公用的,拖鞋,床,电脑,烟,当然也有女朋友。女朋友这个吧今天还是你的,明天就不知道她在和谁在一起了。大学男生基本上都是要丢一把女朋友的,就算毕业还没来得及丢,毕业后也过不了多久就会丢的。不过也没什么,这个吧,容易丢也容易找,不过找回来的不是自己的,但是都是女朋友啊,无差别。我想这个不用我再多做阐述了吧? 失主需要度:10 偷窃难度:0 30 million Chinese currently suffer from depressionJust 10 percent of the 30 million Chinese currently suffering from depression are getting proper medical care due to a lack of psychiatrists and social prejudice against mental illness, experts have said. At a meeting in Shanghai last week, mental health professionals said that China has just 17,000 registered psychiatrists, or one for every 76,000 people. Most Western countries have a 10-times better ratio. Hao Wei, vice-director of the Chinese Psychiatrists' Association, said that more than 60 percent of those currently suffering from depression could greatly benefit from proper medication or professional psychiatric help. "But there are just too few doctors available," Hao said, adding that investment in mental healthcare was also insufficient. Hao said that about 25 percent of depression cases are first diagnosed by physicians. "We need to help our physician colleagues recognize the early signs of depression, so that they can refer those patients to psychiatric professionals," Hao said. However, the greatest problem, Hao said, comes from society, in the shape of the widespread prejudice people have toward those with mental health problems. Because of public prejudice, many patients are reluctant to visit hospitals specializing in mental care, he said. As a result, 75 percent of all anti-depressants are prescribed by physicians. Some patients are reluctant to take such pills, as they are concerned about the side effects, Hao said. The economic cost of depression, in terms of medical bills and lost manpower, is about 60 billion yuan a year, experts said. A survey conducted recently in Zhejiang and Hebei provinces found that depression was more prevalent in rural communities. Women were also more likely to suffer from it than men, the survey said. girl of considerationIf you kiss her, you are not a gentleman 吻她吧,不够君子 If you don't, you are not a man 不吻吧,不象汉子 If you praise her, she thinks you are lying 夸她吧,说你欺骗 If you don't, you are good for nothing 不夸吧,说你笨蛋 If you agree to all her likes, she is abusing 顺她吧,说你气管炎 If you don't, you are not understanding 不顺吧,不善解人 If you make romance, you are an 'experienced man' 太浪漫,疑你老练 If you don't you are half a man 太规矩,魅力不足 If you visit her too often, she thinks it is boring 常看她,招她厌烦 If you don't, she accuses you of double crossing 少去点,怨你猎艳 If you are well dressed, she says you are a playboy 穿得好,说你花心 If you don't, you are a dull boy 邋遢些,缺个心眼 If you are jealous, she says it's bad 吃醋吧,你太狭隘 If you don't , she thinks you do not love her 大度点,说你不爱 If you attempt a romance, she says you didn't respect her 求欢吧,不够尊重 If you don't, she thinks you do not like her 安分吧,不够爱宠 If you are a minute late, she complains it's hard to wait 你晚了,她等得烦 If she is late, she says that's a girl's way 她晚了,女孩特权
May 23 Laughter is Good for the HeartLaughter is good for the heart because it prolongs life while
depression increases the risk of an early death, according to two new
studies. A good bout of laughter every day provides similar cardiovascular benefits as exercise because it stimulates the blood flow, said Michael Miller, who headed one research team at the University of Maryland. On the other hand, depression -- or the lack of laughter -- is often linked to unhealthy habits such as smoking and drug addiction and increases the risk of death by 44 percent, said Wein Jiang, who led a study of 1,000 heart patients for the University of North Carolina. Miller said laughter produced a "magnitude of change ... in the endothelium ... similar to the benefit we might see with aerobic activity, but without the aches, pains and muscle tension associated with exercise" While laughter should not replace exercise, he said, "We do recommend that you try to laugh on a regular basis. Thirty minutes of exercise three times a week, and 15 minutes of laughter on a daily basis is probably good for the vascular system." 参考译文: 美国科学家的两项最新研究结果显示,笑能使人精神愉悦,同时还对心脏大有好处;相反,心情沮丧则不利于身体健康,甚至会增加早死的危险。 其中一项研究的负责人、美国马里兰大学的迈克尔·米勒表示,笑给心血管带来的好处就像锻炼可以给心血管带来好处一样,因为笑可以促使血液流通。而北卡罗 莱纳大学的另一项研究则表明,心情沮丧或缺少笑容却常常与诸如抽烟、吸毒等不健康的生活习惯联系在一起,同时还会将死亡的危险增加44%。 对此,米勒表示,笑会在心内膜内引起某种变化,其效果和做有氧运动时差不多,但笑可以使我们远离由运动带来的伤痛和肌肉紧张等不良影响。 但他同时也表示,笑也不可能取代体育锻炼,两者应该有规律地同时进行。他说:“我们建议人们一周进行3次体育锻炼,每次30分钟;另外,每天要笑15分钟,这样会对人们的脉管体统大有裨益。” The New Generation in Japan
IN THIS ARTICLE: Japanese students seem to be losing patience with work ... (and) prefer easy jobs without heavy responsibility. 本文简介:日本学生似乎正对工作失去耐心…(而且)更喜欢无需负重大责任的轻松工作。
[2] "Around 1980 many Japanese, especially young people, abandoned the values of economic success and began searching for new sets of values to bring them happiness," writes sociologist Yasuhiro Yoshizaki in Comparative Civilizations Review. Japanese youth are placing more importance on the individual's pursuit of happiness and less on the values of work, family, and society. [3] Japanese students seem to be losing patience with work, unlike their counterparts in the United States and Korea. In a 1993 survey of college students in the three countries, only 10% of the Japanese regarded work as a primary value, compared with 47% of their Korean counterparts and 27% of American students. A greater proportion of Japanese aged 18 to 24 also preferred easy jobs without heavy responsibility. [1]日本二战以后形成的勤奋、合作和努力工作的价值体系正在发生变化。最近的调查显示,日本青年已变成了拒绝传统价值观的“自我一代”。 [2]“1980年前后,许多日本人,特别是年轻人,摒弃了经济上成功的价值基准,开始寻找能给他们带来幸福快乐的新的价值准则,”社会学家吉崎康宏在《文明比较评论》一书中这样写道。日本青年人现在越来越重视追求个人幸福而越来越少关注工作、家庭和社会的价值基准。 [3]日本学生似乎正对工作失去耐心,而美国和韩国学生却不是这样。在一项1993年的对这三个国家的高校学生进行的调查中,只有10%的日本人认为工作是一个主要的价值体现物,而韩国人和美国人分别是47%和27%。年龄在18到24岁的大多数日本人还更喜欢无需负重大责任的轻松工作。 [4] Concern for family values is waning among younger Japanese as they pursue an inner world of private satisfaction. Data collected by the Japanese government in 1993 shows that only 2304 of Japanese youth are thinking about supporting their aged parents, in contrast to 63% of young Americans. It appears that many younger-generation Japanese are losing both respect for their parents and a sense of responsibility to the family. Author Yoshizaki attributes the change to Japanese parents' over-indulgence(过分溺爱) of their children, material affluence, and growing concern for private matters. [5] The shift toward individualism among Japanese is most pronounced among the very young. According to 1991 data from the Seimei Hoken Bunka Center of Japan, 50% of Japanese youth aged 16 to 19 can be labeled "self-centered(以自我为中心)", compared with 33% among those aged 25 to 29 To earn the self-centered label, the young people responded positively to such ideas as "I would like to make decisions without considering traditional values" and "I don't want to do anything I can't enjoy doing". [6] Diminishing social responsibility, according to Yoshizaki, is tied to the growing interest in pleasure and personal satisfaction. A study comparing society-conscious youth from 1977 to 1990 found that the Japanese had slipped far behind(落后) American and Australian students. Only 11 % of Japanese aged 18 to 24 said they get personal satisfaction in doing something on behalf of(代表) society, according to 1993 data from the Japanese government, while four limes as many Americans said 50. [7] Yoshizaki concludes that the entire value system of Japanese youth is undergoing major transformation, but the younger generation has not yet found a new organized value system to replace the old. [4]日本小青年中对家庭价值基准的关心在逐渐衰退,取而代之的是追求个人内心世界的满足。日本政府于1993年搜集的数据表明,只有23%的日本青年想着要供养年迈的父母,与美国青年的63%形成鲜明对比。这显示出很多年轻一代的日本人正丧失对父母的重视和对家庭的负任感。作者吉崎康宏将这种变化归咎于父母对对孩子的纵容溺爱、物质的富有和对个人事物关注程度的增强。 [5]日本人向个人主义的转变在青少年中最为显著。根据日本生命保险文化中心1991年的数据,50%的16到19岁的日本青年可被列为“以自我为中心”,则比之下在25到29岁的青年中这一数字仅为33%。对诸如“我作决定时无意考虑传统价值观”和“我不想做我无法喜欢做的任何事情”这样的想法持肯定态度为青年人赢得了以自我为中心的标签。 [6]吉崎康宏认为,社会责任感的削弱与个人满足和享乐的兴趣增长密切相关。一项从1977年到1990年对有社会意识的青年进行对比的研究发现,日本人远远落后于美国和澳大利亚学生。18到24岁的日本人中,只有11%说他们从为社会做事中得到个人满足,根据1993年日本政府的数据,这么说的美国人是日本人的四倍之多。 [7]吉崎康宏得出结论:日本青年整个价值体系正在发生重大变化,但年轻的一代尚未找到一个新的有组织的价值体系来取代旧的。 巧用自言自语法提高英语口头表达能力 本文讲述了“自言自语法”在提高学生英语口语能力中的重要性及如何巧用“自言自语法”,并在调查分析的基础上进一步提出了“自言自语法”确是一种能有效提高学生英语口语力且普遍运用的英语口语训练方法。 大学英语课程的教学目的之一是培养学生的知识能力和用英语进行口头交流的能力。作为一种教学手段,口语训练是培养阅读和写作能力、学习语音、语法和词汇的 重要方法。一般来说,衡量一个人英语口头表达能力主要看以下几个方面:(1)语言的准确性(accuracy)和得体性 (appropriateness);(2)语音(pronunciation)、语调(intonation)是否正确,口齿是否清楚;(3)话语组织 (discourse management)是否合理;(4)口语表达的流利程度(fluency);(5)语法(grammar)是否正确,用词是否恰当,语言是否符合英语 表达习惯。这些是衡量英语会话能力的主要标准,针对这些标准,要提高英语口头表达能力,就要采取相应的训练方法,方法恰当了,就能起到事半功倍的效果。 一、何谓“自言自语法”? “自言自语法”,即以自己跟自己交流的方式,促成英语口语能力提高之方法。它不受时间及其他交流因素的限制,只要有一个属于你的空间,自己对着自己用英语讲就可以了,此方法是正常课堂英语口语训练的有益补充。 二、如何巧用“自言自语法”进行英语口 1、自主创造语言环境 “自言自语法”练习中,你可以随心所欲地创造语言环境。在自己的房间里,没有人会笑话你,尽可以大胆他说。你可以在散步时说给风儿,说给花草树木;你可以 在欣赏影片时跟着主人公倾诉喜怒哀乐;你可以在睡前或一觉醒来时说说自己的憧憬,描绘自己的梦境。总之,你可以在任何时候、任何地方采取适当的语速和音 调,随心所欲他说。 2、善于模仿 采用“自言自语法”提高自己的英语口语能力要学会模仿。模仿的原则: 一要大声模仿。这一点很重要,模仿时要大大方方,清清楚楚,一板一眼,口型要到位,不能扭扭捏捏、小声小气地在嗓子眼里嘟嚷。二要仔细模仿。优美的语音、 语调不是短期模仿所能达到的,对于有英国英语基础的人学说美国英语也是如此,对于习惯于说汉语的人学说英语则更是如此。此外,模仿时还要有耐心,有信心, 有恒心,不能有任何松劲畏难情绪,要相信自己完全有能力模仿得更好。 3、及时复述 复述方法有二:一是阅读后复 述。阅读后复述就是在阅读完一段文章或一篇文章后,用自己的语言采用“自言自语”的方式来表达文中的内容。你可以在复述时使用文中的某些内容,但应尽量避 免完全背诵;你也可以在复述时使用文中出现的关键词或部分句型,作为复述的线索,帮助自己较完整地复述所读材料。二是听磁带或看影片后复述。这种方法既练 听力,又练口语表达能力,采用此种方法训练时,最好使用磁带或影片中的原话来复述,这样可以较准确地矫正自己的语音和语调,体味地道的英语口语。在说的过 程中,应尽量避免出现语法错误。刚开始练习时,因语言表达能力、技巧等方面的原因,往往复述接近于背诵,但在基础逐渐打牢后,就会慢慢放开,由“死”到 “活”,在保证语言正确的前提下,复述可有越来越大的灵活性,如改变句子结构,转换表达方法,用自己在课堂上新学的词汇和句型来替换一些不常使用或难于理 解的东西,对于自己读音掌握不准的词汇可以不用,等复述完后再通过查词典或听录音进行正音。 4、 有目的地去选择说的材料 开始练习“自言自语法”时,笔者建议你认真选择所说材料。开始时,你可以练习复述小故事,语言应尽量生动、简练,有明确的情节,这样可以帮助你更好地把 握语言的连贯性。你可以选你所熟悉或喜欢的内容说,你可以复述课堂上学习的内容,你可以说说你自己的向往。在选择说的内容时,亦应力求练习内容全面,你可 以说一封信,一张便条,一个建议,一份说明书,一篇演讲稿,一篇小议论, 一段求职信或感谢信等。你可以说说你的工作,你的家庭,你的业余爱好,以及你为什么学英语等等。有了一定基础后,可练习口译。看中文电影,用英语翻译主人公的话语。 5、狠抓句型训练 句子是说话的应用单位,所以培养口语能力就要狠抓句型操练。采用“自言自语”法训练英语口语亦要求如此。你可以使用自己在课堂上所学的句型练习“自言自语”,这样可以加深对所学知识的理解和运用,达到学用结合。 6、说话时要带手势、动作、表情 语言是人类交流思想的工具,但它不是唯一的工具。手势、动作、表情等都是交流思想的工具或辅助工具。在日常会话中,这几种思想交流的工具往往是同时使用 的。说话时绘声绘色,可以大大增强语言的生动性和感染力。自言自语时带手势、动作、表情,可以帮助你记忆和自然地使用英语。 7、注意说的质量 说的能力是一种技巧,是在大量的口语练习中培养起来的。学习说英语,由说得不好到说得比较好,是一个发展过程。练习过程中,要住意精泛结合,有的练习里 的错误不要纠正,不要过分注重准确性,以着重培养说话的流利程度;有的练习里的错误要纠正,以提高说话的质量。最好从一开始就注意说的质量,即保持说的正 常速度,流利自然。在开始练习“自言自语”时,不要过分放慢语速。一旦习惯于慢速度,听到正常的语速,也会感到吃力。在开始接近正常语速时,若感到困难, 宁肯多练几遍,也不可放慢语速。开始的时候接近正常,以后跟着快下去,就不存在困难。这里所说的速度,是指接近或比较接近英、美人说话的一般语速。 笔者在2001年初对徐州师范大学工学院2000级共354名学生做过“自言自语法”自我评估问卷调查。数据显示:在354名参加调查的学生中,有 232人选择了喜欢“自言自语法”,占总人数的65%;有98位学生选择了比较喜欢“自言自语法”,占总人数的28%;只有24位学生选择了不喜欢“自言 自语法”,仅占总人数的7%。调查数据表明,采用“自言自语法”来提高英语口语表达能力受到学生的普遍欢迎。有不少学生在坚持“自言自语法”一段时间后反 映良好,这充分说明“自言自语法”确是一种提高学生英语口头表达能力且行之有效的方法。 中国人较内向,在公开场合羞于开口,尤其是当对自己要说的不够自信的时候。而“自言自语法”是克服害羞心理,提高英语口语交流能力的一个很好的途径。要创造练习口语的机会,逐步建立起言语自信,最终达到流利表达的目的,建议你不妨试一试“自言自语法”。 May 22 爱要怎么说出口If only we’d never gone there, thought Alan. They were scrambling up the mountainside in the late afternoon heat. Alice was so tanned that she looked as if she had lived on the Mediterranean for months, while he, being fair, had turned a blotchy, peeling. 阿兰心里想道:要是我们从未到过那个地方该多好啊。在下午后半晌的炎热中,他们向山坡上爬去。爱丽丝被晒得黑黝黝的,看上去就像在地中海上住过几个月似的;而阿兰原本细皮嫩肉,这时身上已经变得红一块白一块,脱了一层皮。 He looked up at the mountainside, the path twisting upwards towards the cairn cross, the white heat bleaching the rock. Why on earth couldn’t they talk about it? Why couldn’t he even accuse her? 他抬头向山坡望去,只见小路盘旋而上通向那个圆锥形十字石碑,炽热的阳光将岩石晒得发白。他们究竟为什么不能谈那件事?他为什么连责骂她都不能呢? He had thought it was going to be all right. But it was as if the heat had drained their love. 他原以为一切都会好的,但好像酷热已经将他们的爱抽干。 At home they had been so blissfully happy that he now realized it couldn’t have lasted. She comes to his school from the Midlands because her family had split up. An only child, living with her father, trying to look after him, lonely, depressed, anxious, she had come to Alan to be healed. At least, that’s what he liked to think. Had he healed her? No. Tom had, even though Alan loved her with all the passion. Now his hatred for both of them was as strong as his love. 在家时,他们曾是多么幸福。现在他意识到那不会再继续下去了。由于家庭破裂,她从内陆来到他的学校。作为独生女,她和她的父亲住在一起,尽力去照顾他。她孤独无依、无精打采、愁眉苦脸,经常到阿兰那里去排除忧伤。至少他喜欢这样认为。他为她解忧了吗?没有。是汤姆,即使阿兰曾付出所有的激情爱着她。如今他对他们俩的爱就像他的恨一样强烈。 “Come on!”Alice had turned back to him, waving impatiently. “跟上!”爱丽丝转身向他喊,不耐烦地挥着手。 “Coming,”Alan looked at his watch. Five, The crickets would start singing soon. He walked on, the sweat pouring into his eyes. Knowing she had opened the bottle of mineral water. Would she let him catch up with her? An even greater misery seized him. It reminded him of the night he made himself drunk on the rough local wine his parents bought in the village. His heart had ached then, too, and his sense of loss had increased as he relived each minute of a day when Tom and Alice had seemed to draw closer and closer together. “来了。”阿兰看了看手表。已经5点了。蛐蛐儿马上就要开始鸣唱了。他继续向上走,汗水源源不断地流到了眼里。他知道她已经打开那瓶矿泉水。她会让他跟上她吗?一种更大的痛苦折磨着他。这使他想起那天晚上他用父母亲从村里买的粗制的当地酒将自己灌醉的情景,那时他的心也在发痛。每当他想起爱丽丝和汤姆越来越亲近的时候,他的失落感就会与日俱增。 He walked faster. Here, a few miles away on the bare mountainside, there was arid space, and the olive groves, clustered in the stone-cluttered valleys below. 他走得越来越快。他为山顶上那些中世纪的城堡而欢呼雀跃。放眼望去,离那座山几里远的地方有一块空地,在山谷的乱石丛中生长着一小片橄榄林。 “Come on!” “跟上!” “Coming.” “来了。” Alan strode doggedly on, looking down at his red, peeling legs, thinking of Tom’s strong, straight, brown ones. 阿兰仍顽强地大步前行,他低头看了一眼自己被晒红的、脱了皮的两腿,想起了汤姆强健挺拔的棕色的双腿。 Suddenly he had turned the corner by the stone shelter. He could see her waiting for him. If Tom were here, they would be together, mocking him, looking at each other, leaving him alone. As he strode self-consciously on Alan focused his mind on her. 突然,他拐到石头后面一块隐蔽的地方。他看到她正在等他。如果汤姆也在这里的话,他们一定会站在一起嘲笑他,相互凝望着,把他丢在一边。当他拘谨地向前走的时候,他将注意力都集中在她的身上。 “Where’re we going to camp?”She was sitting on an outcrop, her slim body supple and salt-caked. Her legs were swinging and he longed to run his hands over them. Instead he imagined Tom doing that and hot, angry tears filled his eyes. “我们到哪里去宿营?”她坐在一块突出的岩石上。她的苗条的身材丰满,咸咸的。她的腿在那里晃来晃去。他真想将自己的手在那上面滑动。而他却想象着汤姆那样做的情景。顿时,愤怒的泪水充满了他的眼睛。 “Santa Caterina.” “圣卡塔林纳。” “What’s that?” “那是什么?” “It’s a deserted monastery, down in the valley. Amongst the fir trees. Over there—look, you can see it.” “是一座破庙,在山谷下面,杉树丛中。在那里——看,你可以看到的。” “Oh yes.”She turned her head. When he did look he was shocked to see how beautiful she was, like a goddess. “噢,是的。”她转过头。当他真正拿眼去看她的时候,她看上去是那样美,像一尊女神。 “Won’t that be spooky?”she asked in the slightly broken voice that he had always found so sexy. “那不可怕吧?”她用略微沙哑的声音说。他发现她的嗓音竟是那样性感。 God, how he loved her. Why couldn’t he just take her in his arms now? That could solve everything. But there seemed to be an impenetrable barrier around her—as if she was sealed away by Tom. 上帝啊,他是多么爱她,现在他为什么不可以把她揽在怀里呢?这样,一切问题都会迎刃而解的。但是,好像她周围有一种难以逾越的障碍——就像被汤姆密封了起来。 “The valley’s dangerous,”said Alan, hoping to frighten her, to provoke reaction.“If the clouds come down there’s no way out. Sometimes for days.” “这个山谷很危险,”阿兰说,希望吓住她,引起她一种反应。“如果乌云压下来就会无路可走了。有时会持续好几天。” “Is there anywhere else to camp,”asked Alice. “还有其它地方可以宿营吗?”爱丽丝问道。 “Not really.”Alan was certain she’d rather be with Tom. Yesterday he had seen them sitting on a wall together outside the villa. Their ankles had been entwined. He had wanted to grab Tom’s legs and pull him off. He would hurt his brother—and Alice would be sorry . It would be her fault. “说不准,”阿兰敢肯定她一定会宁愿和汤姆在一起。昨天他曾见他们一起坐在别墅外的一堵墙上,他们的脚踝曾缠绕在一起,他曾想拽着汤姆的腿把他拉下来。他会伤害自己的弟弟。爱丽斯会感到内疚。那是她的过错。 “Let’s go,”said Alan quickly. “我们走吧,”阿兰飞快地说。 “How far is it?”she asked.“I’m whacked.” “还有多远?”她问,“我一点劲儿也没有了。” “Half an hour.” “半小时。” “Can we eat them?”Her voice was a little plaintive. Alan noticed with satisfaction that she was becoming dependent on him again. But he knew that once they were off the mountain she would be with Tom. For a crazy moment he imagined Alice with himself living in the mountain valley together. Always. Trapped perhaps by some magical force that wouldn’t let them leave. “我们能吃点东西吗?”她的声音有点儿伤感。阿兰心满意足,注意到她正在再次依靠他。但他知道一旦他们离开这座大山,她就会和汤姆泡在一起。一时间,他竟荒唐地想象着爱丽丝和自己一起居住在这个山谷,直到永远。或许是被某种魔力困在这里,不让他们离开。 The monastery was square-roofed, austere,with barrack windows. There were fish tanks at the back and a terrace on which the monks would have walked. 那座庙是方顶、木窗,十分简朴。庙后面有一些鱼缸,还有一个平台,和尚可以在上面随意走动。 Their feet on the stones made the only sound. Santa Caterina was utterly still. A swift rose soundlessly over the slate roof and the heat shimmered on the roughcast walls. They lay down, their rucksack still on their backs, passing the water bottle, almost dozing. 四周只有他们踏在石头上所发出的声响,圣卡塔林纳万籁俱寂。一朵怒放的玫瑰在石板屋顶无声无息,亮光在粗糙的墙壁上闪烁。他们躺下来,递过水瓶,旅行包仍背在背后。他们几乎昏昏欲睡。 Suddenly she sat up and looked him with surprising tenderness. Alan’s black mood eased slightly. 突然,她坐起来,用令人吃惊的温柔目光凝视着他。阿兰的难受情绪稍微得到了缓解。 Have they all gone then?”asked Alice. “他们都已经走了吗?”爱丽丝问道。 “Yes. I don’t know when. A long time ago.” “是的。我不知道是什么时候走的。好长时间了吧。” She was lying back, her eyes closed. He could talk to her now. They could both talk the problem and solve it. They would reach each other. But he couldn’t make the move. 她仰面躺着,双目紧闭。他现在可以和她谈了。他们俩谈谈那个问题,然后就迎刃而解了。他们彼此都能探到对方,但他不能动。 “It would be terrible if it is pulled down,”Alice said idly, her eyes still closed. “如果庙被推倒,那将是多么可怕,”爱丽丝懒懒地说,眼睛仍然闭着。 “It won’t be.” “不会的。” “How do you know that?” “你怎么知道?” “They patch it up from time to time.” “他们总是不断地修缮它。” “Why don’t they live here?” “他们为什么不住在这里呢?” “Don’t know. Maybe it’s too remote.” “不知道,或许这里太偏远了吧。” The desire to punish her had gone. But he daren’t touch her. He daren’t break the enchantment. 渐渐地,想惩罚她的欲望消失了,但他不敢触摸她,不敢轻易打破这令人着迷的时刻。 “The heat in the day. The cool evenings. It would be good to live like that.” “白天热,夜里凉。住在这种地方会很不错的。” “Live here?” “住在这里?” “Could we ever get permission?” “我们会被允许吗?” “I don’t know.” “我不知道。” “Just to see what it was like. I mean—”She half sat up.“Can we get inside?”She ran a finger gently down his peeling cheek. “先看看这里怎么样,我是说——” 她半坐了起来。“我们能进去吗?”她将一根手指轻轻地放在他脱皮的脸颊上。 Alan was taken aback but then he became aware that the crickets had started. How long had they been singing? He wondered.“Let go and see.” 他吃了一惊,随后意识到蛐蛐儿的鸣叫声已经响起。他不知道它们已经鸣唱了多长时间。“让我们去看看吧。” They tramped round but as Alan already knew, there was no way in. In the end they came back and he lit a fire at the side of a small stone building. Other campers had obviously used the space and there were black marks on the walls. 他们绕过去,但正如阿兰早就知道的那样,无路可进。最后,他们又原路返回,在一座小型石头建筑旁生了一堆火。显然,其他野营的人也曾使用过这个地方,墙壁上还留有黑色的痕迹。 He cooked supper, using half a precious bottle of water to make it. The intimacy was still there but the talking was at an end. Alan could hardly contain his rising excitement. They had night together. Anything could happen. 他晚饭用去了半瓶珍贵的水,亲密关系依旧存在,但他们已经无话可说。阿兰几乎难以按捺那正在膨胀的冲动。他们一起拥有这个夜晚,任何事情都可能会发生。 Alan suddenly realized what he had to do. After supper, in the glow of the scented mountain twilight, he made coffee and they sat in silence. Darkness came slowly; the volume of the crickets seemed to increase. Still he had made no move. 阿兰突然意识到他必须得做些什么了。晚饭后,在芳香弥漫的大山的幽光中,他煮了咖啡,他们默默地坐在一起。夜幕慢慢地降临;蛐蛐儿的音量好像升高了。他仍没有行动。 She was lying in front of the fire, her body almost glowing. Alan reached out a hand and temporarily she took it. Then Alice yawned and stretched.“I’m turning in now,”she said. 她躺在火堆前,身上闪闪发光。阿兰伸出一只手,她暂时握住了他的手。接着,爱丽丝打哈欠,伸展身体。“我现在要睡觉了,”她说。 “More coffee?”asked Alan miserably. “再来点咖啡?”阿兰痛苦地问道。 She kissed him on the forehead. “No thanks” 她在他的前额上吻了吻。“不,谢谢。” Had he ever loved his brother Tom? He must have done sometime. Certainly he had always been jealous of him as a child. He the introvert;Tom the extrovert. Alan thought about his introverted personality. He could see quite clearly how he had failed so dismally with Alice and how Tom had taken over so easily. Tom was what she wanted. She didn’t want what he had. 他爱他的弟弟汤姆吗?有时他肯定爱,当然他总是忌妒弟弟,像一个小孩子。对他们俩来说,他性格内向,汤姆性格外向。阿兰想着自己内向的性格。他十分清楚自己如何在爱丽丝身上败得这么惨,而汤姆又是如何轻而易举便得到了她。汤姆正是她需要的那号人,她并不需要他这种人。 Gloomily, Alan climbed into the sleeping bag and drifted off to sleep. Beside him Alice slept, her breathing seeming to keep in time with the insistent beat of crickets. 阿兰闷闷不乐地钻进自己的睡袋,渐渐地进入了梦乡。躺在他身旁的爱丽丝也睡着了,她的呼吸声似乎和蛐蛐儿的鸣叫声保持同步。 Alan dreamt. The crickets had stopped. There was a slight breeze and the luminous hand of his watch registered just after two. Her sleeping bag was empty; Alice had gone. For a while he just couldn’t believe it. He sat up and felt the dark walls of Santa Caterina close in on him. 阿兰做了一个梦。蛐蛐声都停止了。一阵微风拂过。他的手表上的夜光针刚过了两点。爱丽丝的睡袋空了;她已经走了。好一阵子,他都无法相信这个事实。他坐起来,感到圣卡塔林纳的黑黢黢的墙壁将他团团围住了。 Then he was on the mountainside, stumbling blindly up the mountain path, hearing their laughter. Softly he crept up on them until he could see their bodies entwined. Alan’s anger rose to fever pitch and he rushed towards them. They fell apart. He sobbed as he had never sobbed since he was a child. 随后,他来到山边,踉踉跄跄地沿着山路盲目前行。听见他们的朗朗笑声,他轻轻地爬过去,看到两个身体紧紧地贴在一块。他感到痛苦万分,怒不可遏地冲向他们。他们猛地分开了。他低声啜泣,尽管他从孩提时起就从来没有哭过。 She woke him anxiously shaking at his sunburnt shoulders. 她焦急地摇着他被太阳晒黑的肩膀,唤醒了他。 “What’s the matter?”she kept asking over and over again“Alan, what’s wrong?” “发生了什么事?”她一遍又一遍地问,“阿兰,怎么了?” He stared up at her, blinking in the glow of the dying camp fire. 他抬眼盯着她,在篝火的余光中眨着眼睛。 “Nothing,”he said automatically.“Nothing really.” “没什么,”他不由自主地说。“真的没什么。” “But—” “可是——” “Just a bad dream, that’s all.” “只是做了一个恶梦,仅此而已。” “You were crying.”Her voice was soft, tender, just like she used to be. “你刚才在哭,”她的声音像过去那样温柔和气。 Alan turned over in his sleeping bag. “I’m fine.”he said.“Let’s get some sleep.” 阿兰在睡袋里翻了一下身,背对着她说:“我很好,我们再睡一会儿吧!” Alan woke with the early-morning sun gently warming his face. He sat up, his head muzzy with the dream, his cheeks salty, tear-stained.“You were crying.”Her voice came back to him and he winced. Alice had felt sorry for him and he instantly smothered, patronized. He broke into a sweat of agony and apprehension. How could he ever open up a discussion with her now? 阿兰醒来时,晨阳暖暖地照在他的脸上。他满脸泪痕,咸咸的。他坐起来,脑海里还懵懵懂懂地萦绕着那个梦。“你刚才在哭,”她的声音又传了过来。他退缩了一下。爱丽丝已经感到对不起他了。他立即感到很压抑。由于巨大的悲痛和忧伤,猛地出了一身冷汗。现在他将怎样和她展开一场讨论呢? He looked cautiously round her sleeping bag. It was empty and Alan froze. Then, gradually, he relaxed. It was just after eight and she had probably gone to find a place to go to the loo. He waited, calmly, gloomily, and then anxiously as she did not appear. Hurriedly Alan struggled out of his sleeping bag and began to search the grounds of the monastery. But there was no sign of her at all. 他小心翼翼地看了看她的睡袋,睡袋已经空了。阿兰一下子僵住了。随后,渐渐地,他又放松了。现在刚过8点,她也许是找地方方便去了。他平静地、忧郁地等待着,尔后还是不见她回来,就心急火燎起来。阿兰慌忙从睡袋里挣扎出来,开始在寺院里四处寻找。但踪迹皆无。 Panic set in as Alan scoured the grounds again and drew a blank for the second time. It was becoming increasingly obvious that she had walked out on him and was probably climbing down to Tom. But rather than feeling anger, Alan simply felt desolate. She hadn’t even left him a note. He went over and touched the inside of her sleeping bag. It felt cold. 当阿兰再次惊慌失措四处寻找仍然一无所获的时候,显然她已经不辞而别,很可能是下山找汤姆去了。阿兰感到的与其说是生气,倒不如说孤独。她甚至连一张纸也没有给他留下。他走过去将手伸进她的睡袋,里面冷冰冰的。 Surely she wouldn’t find her way back alone. Alan began to search again, this time through the tangled thickets of what might have been a herb garden. Something caught his eye. Lying on the ground was a small, shiny object. It was Alice’s bracelet. 她肯定无法独自找到回路。阿兰又开始找起来。这一次通过杂草丛生的灌木丛。某个东西引起了他的注意。躺在地上的是一个小小的、光亮的东西。那是爱丽丝的手镯。 Suddenly real fear clutched at him. Someone had come and abducted her. Or had Tom come to find her? But the bracelet? 突然,一种真正的恐惧袭上他的心头,一定是有人拐走了她,或者是汤姆来找她的?可是,手镯又怎么讲呢? “Please God,”Alan muttered. “Let her be safe.”“Why hadn’t he looked after her? Why hadn’t he been able to reassure her? Alan now realized how he had locked himself into his own shell of rejection and jealousy. Tom no longer seemed a threat. All Alan wanted was Alice, and if only he could find her they would talk and talk and talk.” “求求你,上帝,”阿兰喃喃道,“保佑她平安。”为什么他没有照顾她?为什么他没有安慰她?现在阿兰才意识到他以前是如何将自己锁进一个妒忌和沮丧的空壳里?汤姆看起来似乎不再是一种威胁。阿兰所想的全都是爱丽丝,只要能找到她,他们就会倾心长谈。 For the fourth time he began to search the grounds, the bracelet in his hands. Then , in a crevice on the broken stones of the terrace, he saw something bright and beady. Alice’s ring. And he knew how tight on her finger it was. Sweat ran down Alan’s face. 他开始第四次在地上寻找,千里拿着那只手镯,随后在一排房屋堆砌的石头缝里,他看见一件东西在发光——是爱丽丝的戒指,而且他知道那是紧紧地戴在她的手上的呀。阿兰的汗从脸上流了下来。 “Alice,”he cried out. “Alice!?” No response. Alan began to run. “爱丽丝,”他喊道,“爱丽丝!”没有回音。阿兰开始跑了起来。 It was only when he was back at the front door of the monastery that he realized there was one place he had not been to. His heart thumping and his throat dry, he went down the steps. 正当他惊恐地返回到那座庙的前门时,他意识到还有一个地方他没有去找。他的心砰砰直跳,嗓子发干。他走下台阶。 Now he ran eagerly forward, pushing his way through the foliage. He gave a gasp of relief. She was there, lying on the pine needles. 他急不可待地跑上前,推开树叶,看到她在那里,躺在松叶上,心里松了一口气。 “Alice.” “爱丽丝。” She woke slowly, sleepily, stretching in the sun. “Sorry—I fell asleep.” 她慢慢地醒来了,睡眼朦朦地在太阳下伸伸懒腰。“对不起——我睡着了。” “Where the hell have you been?” “你究竟到哪里去了?” “I went for a walk.” “我出去走了走。” He held up the bracelet and the ring.“I found these.”He was angry, positive. She looked away.“Come on .Why did you do it?”I’ve been searching for you. I thought—I thought you’d been kidnapped or something. Been hurt? 他举起手镯和戒指。“我找到了这些东西。”他很生气,这一点是肯定的。她转移了视线。“得了吧,你为什么这样做?我一直在找你,我还以为——我还以为你被绑架或者别的什么了呢。受到了什么伤害了吗?” “I’m sorry.” “对不起。” “That’s not enough.” “说‘对不起’就够了。” “I laid a trail.” “我留有痕迹。” “You did what?”He was outraged. “你到底做了什么呀?”他怒气冲冲的。 “I wanted you to find me.” “我想让你找我。” “I was terrified—I thought—” “我当时很害怕——我还以为——” “I’m sorry.” She stood up. “I suppose I wanted to frighten you.” “对不起,”她站起来。“我想我原来只想吓唬吓唬你。” “Why ?” he barked at her. “为什么?”他大声问道。 She looked away again. “I didn’t think you wanted me any more.” 她又一次转移了目光。“我还以为你不会再要我了呢。” “Wanted you?” “要你?” “You haven’t spoken to me. You seemed so cold. Indifferent somehow.” “你没有对我说过,你似乎很冷淡,在某种程度上无动于衷。” “But it’s you who were indifferent. ” “可无动于衷的是你。” She looked genuinely amazed.“I don’t know what you’re talking about.” 她看上去真的很吃惊。“我真不知道你在说什么。” “I thought you wanted Tom. Didn’t want to be with me.”His voice broke. “我还以为你想要汤姆,不想和我在一块哩。”他的声音沙哑。 “I thought you found him—more fun.” “我还以为你找他——开心去了呢。” “Him? Oh, he’s a baby. I was lonely, I suppose. You seemed so fed up with me. I didn’t realized it would —oh , Alan.” She got up and drew him to her , kissing him so hard on the lips.“You are such a bloody fool.” I love you—don’t you know? “他?噢,他还是一个小毛孩子。我很孤独,我想,你好像很烦我,我没有意识到那么——噢,阿兰。”她站起来,将他拉向自己,深深地吻起了他的嘴唇。“你真是个大傻瓜。我爱你——难道你不知道吗?” “Why did you come here?”he asked. “你怎么来到这了?”他问道。 “I was wandering about. I couldn’t sleep. Look—”She knelt down and stared at the Latin inscription on the two solitary graves.“Who are they?”she asked. “我是随便走走。我睡不着。瞧——”她跪下来,盯着前面的两座孤坟的拉丁碑文问道:“他们是什么人?” “I don’t know. I’ve often wondered. Dom Carols Fuenta —he’s definitely a monk. But the odd thing is that he’s buried alongside a woman.” He paused and then went on.“Maria Degardes. He was buried in 1892. She was in 1894.” “我不知道。我也总是想知道。多姆·卡罗斯·福恩塔——他肯定是一个和尚,但奇怪的是,他和一个女人葬在一起。”他暂停了一下,然后接着说道:“玛丽姬·德加斯。他葬于1892年,而她葬于1894年。” “Were they lovers?” “他们是情人吗?” “I used to make up stories that they were.” “我过去经常想给他们编编故事。” “I was just thinking. A silly thought. I expect you’ll laugh.” “我刚才在想。是一个愚蠢的想法,我想你会笑我的。” “Try me.” “说说看。” “Suppose we lived here for the rest of our lives and when we died we were buried here. But in one grave. Together.” “假如我们今后生活在这里,我们死后就埋在这里,但要在一块。合葬。” Alan took Alice’s face in his hands and kissed her on the lips. 阿兰双手捧起爱丽丝的脸,在她的嘴唇上亲吻起来。 April 26 什么是企业家精神“企业家”这一概念由法国经济学家让-巴蒂斯特在1800年首次提出,即:企业家使经济资源的效率由低转高;“企业家精神”则是企业家特殊技能(包括精神 和技巧)的集合。或者说,“企业家精神”指企业家组织建立和经营管理企业的综合才能的表述方式,它是一种重要而特殊的无形生产要素。例如,伟大的企业家、 索尼公司创始人盛田昭夫和井深大,他们创造的最伟大的“产品”不是收录机,也不是栅条彩色显像管,而是索尼公司和它所代表的一切;沃尔特•迪斯尼最伟大的 创造不是《木偶奇遇记》,也不是《白雪公主》,甚至不是迪斯尼乐园,而是沃尔特•迪斯尼公司及其使观众快乐的超凡能力;萨姆•沃尔顿最伟大的创造不是“持 之以恒的天天平价”而是沃尔玛公司——一个能够以最出色的方式把零售要领变成行动的组织。 北京婚宴 PK 上海婚宴洞房,闹还是不闹?主桌,坐父母还是坐朋友?北京上海两座城市的婚礼习俗居然好多都是截然相反的——北京人结婚很少闹洞房,父母长辈领导坐主桌;上海人为了闹洞房还会去豪华酒店开房间,主桌上坐的是没有结婚的小青年。 最根深蒂固的差异,如果从视觉上来体会,那就是酒足饭饱走出酒店后,你是能继续看到太阳,还是只能看到月亮?如果从时间上来对比,那就是凌晨的时候,新人们是开始上紧发条,还是准备洗洗睡了? 一 条不成文的规矩:“正午吉时,新人入席,客人开吃”,立马把北京新娘分为两种。第一种,隐忍型:起得比“高玉宝”还要早,凌晨就开始化妆,翻着白眼让人画 眼线、贴睫毛;第二种,撒欢型:本姑娘今晚不睡了,和姐妹们搓麻将打牌,用完单身最后一秒,反正今天肾上腺素分泌旺盛。熬夜、缺觉、欣喜、焦虑,皮肤得遭 多大的罪!所以我一直纳闷,那些为面膜广告挖空心思弄创意的人,怎么没想过从“北京新娘”这个角度来讲故事。 上海新娘就笃定多了,睡到电台早新闻开播,再起来梳妆打扮也不迟。由于一般都是晚上五六点才开席,一下子就比北京新娘多了五六个小时,中午接了新娘到新房后,吃顿简单的午餐,小夫妻们还有时间和摄影师摄像师一起出去拍外景,随后才优哉游哉地到酒店。 对 上海人来说,喜酒在中午,如果是西式自助餐,那是学洋派,还能理解,要是谁把中式喜酒放在了中午,很多人的第一反应肯定是觉得这家人非常“拎不清”(上海 话不懂规矩的意思)。这种横竖不对劲的感觉,对于北京人也是一样,要是婚礼不是在正午,潜台词说出来就更不吉利,因为那暗喻着“二婚”。 今年是结婚旺年,良辰吉日挤破头,老规矩也被迫放宽尺寸了,观察一下两地有关婚宴的新闻,正好相映成趣。 北 京制造的舆论调调是——先吓唬,后安慰:比如,白天举行婚宴的人太多太多,一旦婚车只能从天津调来,一旦天津司机在某环某桥处迷路了,一旦错过正午把新娘 子贬为所谓的“二婚”,谁来负责?还不如,大家一起来打破“结婚赶早不赶晚”的传统观念,某某数据表明,晚上喝喜酒正在北京掀起一种“结婚新时尚”。 上 海设计的舆论攻略是——先安慰,后吓唬:比如,上海又增加了相当数量适合举办婚宴的星级酒店和高级餐厅,环境更好了,服务更好了,菜品更好了。但是面子有 了,未必票子挺得住,4年前,上海人结一次婚只要花费5万元人民币,而如今平均每对上海新人结婚的花费已接近19万,全国最高,比第二名广州人多出5万! 所以你不妨考虑选择“午间婚宴”,每桌可以享受多少折扣,可以附送ABCD甲乙丙丁。精打细算,量力而行,某某数据表明,中午喝喜酒正在上海掀起一种“结 婚新时尚”。 是否时尚,可以翻来倒去地说,不过,中国新人结婚到了一掷“万”金的地步,却是不争的事实。上海结婚花费的19万(包括新居装修但不包括房价)更是让人看得心惊肉跳,和全国水平相比,超前消费年数达到7年。 当 然,晚饭比午饭贵是一个理由,不过,还有一个“出血点”在于:喜欢把婚礼折腾得越来越贵的,多半是女人,一旦表现出像《老友记》里Monica那样的婚礼 梦想强迫症和婚礼策划偏执狂,非得有个男人泼一泼凉水,拨乱反正,别再让这群上海小姐们继续在空中漂着美着——很明显,上海男人不具有这样的资质,所以婚 礼的账单就只能一路上扬。 说到婚礼预算的严防死守,北京男人就比较有现实主义的根基,关键时候不心软,况且老祖宗早就知道晚饭比午饭贵,大规模作战,赶早请午饭,反正红包照样收;小范围攻坚,晚上再搓一顿,人情赚翻番——头脑清新,眼光长远,在这点上,北京男人反而比上海男人更精明了。 April 20 常识除了书本上的知识之外,我们更要明白“常识”的重要。只有学问而无常识,与人谈话时,会缺少轻松平易的话题。有你在座,空气即会紧张严肃,你就成为不受欢迎的人物。所谓常识,包罗万象,一切都该去留神知道,才可使你活泼风趣,谈起话来左右逢源。 四川话字典一、部位称谓 头:脑壳; 后脑勺:后脑啄;鼻子:鼻孔;脸面:脸包儿;胳脯:手杆;手肘: 倒拐子;背部:背壳壳;臀部:勾子;骨头:kao老二;脚腕:颈颈儿;络腮胡:挂儿胡,窜脸胡;拳头:砣子,锭砣老二;膝盖:克膝头,克膝波踝;小腿:;连二杆,连巴肚子。 二、天象称谓 星:天星子 正午:对火晌午;冰雹:雪弹子;冰:凝冰。 三、事物称呼 被子:铺;蚊帐:罩子;雨伞:撑花;铁罐:鼎罐;斧头:开山;撮箕:鸳箕;肉:嘎嘎;上面:高头;底下:那个透脚;山那边:埂那边;吃饭:契饭;这个:正个、众个的;那个:罗个,那歪。 四、畜禽称呼 鸡:牲口;小鸡:鸡崽崽:母猪:窝猪;公牛:牯牛;母牛;公狗:伢狗;母狗:草狗;蚯蚓:曲鳝;蟑螂:偷没婆;晴蜓:洋丁丁;蜘蛛:波丝;蛤蟆:癞格宝;青蛙:喀马;鲢鱼:鲢巴郎;鸡蛋:饽饽;蝇:饭蚊子。 五、一般称呼 我:老子;妻子:婆娘;爸爸:老汗;妈妈:老娘子;妻子的哥哥嫂嫂:舅老官、舅母子;妻子的姐姐:姨妹;岳父:丈老汗;岳母:丈母娘;妹妹:妹儿、幺妹; 完结:煞割;吵架:割孽;打架:打捶;试一试:告一告;开玩笑:测坛子;谢谢:劳慰;吹牛:冲壳子;骗子:麻子;项用:关火;软和:粑和;价廉:香因;怎 么办:啷个弄;一会儿:一哈哈;纠缠不休:罗连人;倒霉:背时;丢脸:少皮;大方:舍得;别客气:莫架势;经常:扯常;如何:啷个、啷门的;何事:啥子; 粑场合:卵的;很甜:抿甜;清甜;邋遢:挖抓、派乃、楼净;玩一会:耍哈嘛;装怪相:你娃儿妖燕;自行车:洋马儿。喜欢抄人作品的,跟老子听倒,用了老子 的作品,还是要跟老子说一下哟,不然老子收拾你龟儿!嘿嘿 送情(送礼物)。烧锅(做饭),嘿嘿。。。。。。。。。懂不懂哇。嘿嘿 November 10 JAVA相关的名词解释 -转--A- November 08 TestNG version 5.3 has been released
November 03 HSQL入门及使用指南 转HSQL 数据库引擎 1. hsql 学习 1.1. 学习目的 本文档是针对hSQL 数据库方面的基础学习,为了使项目组成员能够达到使用hSQL 数据库的目的。 1.2. 培训对象 开发人员 1.3. 常用词及符号说明 常用词: hsql:一种免费的跨平台的数据库系统 E:\hsqldb:表示是在dos 命令窗口下面 1.4. 参考信息 doc\guide\guide.pdf 2. HSQL 2.1. HSQL 运行工具 java -cp ../lib/hsqldb.jar org.hsqldb.util.DatabaseManager 注意hsqldb.jar 文件的文件路径,最好能放到classpath 里面,或者放到当前路径下. java -cp hsqldb.jar org.hsqldb.util.DatabaseManager 2.2. 运行数据库 启动方式: Server Modes and In-Process Mode (also called Standalone Mode). 一个test 数据库会包含如下文件: ? test.properties ? test.script ? test.log ? test.data ? test.backup test.properties 文件包含关于数据库的一般设置. test.script 文件包含表和其它数据库,插入没有缓存表的数据. test.log 文件包含当前数据库的变更. test.data 文件包含缓存表的数据 test.backup 文件是最近持久化状态的表的数据文件的压缩备份文件 所有以上这个文件都是必要的,不能被删除.如果数据库没有缓存表,test.data 和test.backup 文件将不会存在.另外,除了以上文件HSQLDB 数据库可以链接到任何文本文件,比如cvs 文件. 当操作test 数据库的时候, test.log 用于保存数据的变更. 当正常SHUTDOWN,这个文件将被删除. 否则(不是正常shutdown),这个文件将用于再次启动的时候,重做这些变更.test.lck 文件也用于记录打开的数据库的事实, 正常SHUTDOWN,文件也被删除.在一些情况下,test.data.old 文件会被创建,并删除以前的. 2.3. Server Mode java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 file:mydb -dbname.0 xdb 命令行方式: 启动数据,数据库文件mydb,数据库名称xdb 也可以在 server.properties 文件中定义启动的数据库,最多10个 例如: server.properties: server.database.0=file:E:/hsqldb/data/mydb server.dbname.0=xdb server.database.1=file:E:/hsqldb/data/testdb server.dbname.1=testdb server.database.2=mem:adatabase server.dbname.2=quickdb 启动命令: java -cp ../lib/hsqldb.jar org.hsqldb.Server 运行结果如下 java 测试程序: package test; import junit.framework.TestCase; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class TestConnect extends TestCase { Connection connection; protected void setUp() { try { Class.forName("org.hsqldb.jdbcDriver" ); connection = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/xdb","sa",""); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void testselect() { Statement stmt=null; ResultSet rs=null; try { stmt = connection.createStatement(); String sql ="select * from test"; rs=stmt.executeQuery( sql); while(rs.next() ) { System.out.println("id="+rs.getString("id")); System.out.println("name="+rs.getString("name")); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { rs.close() ; stmt.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } protected void tearDown() { try { connection.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 以上在eclipse 中测试通过. 2.4.In-Process (Standalone) Mode 不需要启动server connection = DriverManager.getConnection("jdbc:hsqldb:file:E:/hsqldb/data/mydb","sa",""); 这样就可以连接数据库。 只能在一个jvm 中使用,不能在多个jvm 中使用。 这种模式是在相同的jvm 下作为你的应用程序的一部分,运行数据库引擎。对大多数应用程序,这种模式运行会相当快,作为数据,不需要转换和网络传输。 主要的缺点就是不可能从外面的应用程序访问到默认数据库,因此当你的应用运行时候,你不能通过别的工具检查数据库内容。在1.8.0 版本中,你可以在相同jvm 中的线程中运行数据库初始化,并提供外面访问你的进程内数据库。 推荐在开发应用中使用这种方式。 连接串: Windows: DriverManager.getConnection("jdbc:hsqldb:file:E:/hsqldb/data/mydb","sa",""); Unix: DriverManager.getConnection("jdbc:hsqldb:file:/opt/db/testdb","sa",""); 2.5.Memory-Only Databases 当随即访问内存,数据库不固定时,可以采用内存的方式运行数据库,由于没有数据写到硬盘上,这种方式使用在应用数据和applets 和特殊应用的内部进程中使用,URL: Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:aname", "sa", ""); 2.6.Using Multiple Databases in One JVM 2.7.Different Types of Tables HSQLDB 支持 TEMP 表和三种类型的持久表(MEMORY 表, CACHED 表,TEXT表) 当使用 CREATE TABLE 命令时,Memory 表时默认类型,它们的数据整体保存在内存当中,但是任何改变它们的结构或者内容,它们会被写到.script 文件中。这个脚本文件在数据库下一次打开的时候被对出,内存表重新被创建内容,根temp 表不同,内存表时持久化的。 CACHED 表通过CREATE CACHED TABLE 命令建立. 只有部分的它们的数据或者索引被保存在内存中,允许大表占用几百兆的内存空间。例外一个优点,在数据库引擎中,启动大量数据的缓存表需要花费少量的时间, 缺点是减慢了运行和使用Hsqldb 的速度。表相对小的时候,不要使用cache 表,在小表中使用内存数据库。 从版本 1.7.0 以后,支持text 表,使用 CSV (Comma Separated Value) 或者其它分隔符文本文件作为它们的数据源。你可以特殊指定一个存在的CSV 文件,例如从其它的数据或者程序中导出文件,作为TXT 表的数据源。 同时,你可以指定一个空文件,通过数据库引擎填充数据。TEXT 表将比cache 表更加效率高。Text 表可以指向不同的数据文件。 * memory-only databases 数据库只支持memory 表和cache 表,不支持text 表。 2.8. 约束和索引 HSQLDB 支持 PRIMARY KEY, NOT NULL, UNIQUE, CHECK and FOREIGN KEY 约束. 3. sql 命令 3.1. sql 支持 select top 1 * from test; select limit 0 2 * from test; DROP TABLE test IF EXISTS; 3.2. Constraints and Indexes 主健约束:PRIMARY KEY 唯一约束: 唯一索引: 外健: CREATE TABLE child(c1 INTEGER, c2 VARCHAR, FOREIGN KEY (c1, c2) REFERENCES parent(p1, p2)); 3.3. 索引和查询速度 索引提高查询速度,比提高排序速度。 主健和唯一所列自动创建索引,否则需要自己创建CREATE INDEX command。 索引: 唯一索引和非唯一索引 多列的索引,如果只是使用后面的,不使用第一个,将不会条查询速度。 (TB is a very large table with only a few rows where TB.COL3 = 4) SELECT * FROM TA JOIN TB ON TA.COL1 = TB.COL2 AND TB.COL3 = 4; SELECT * FROM TB JOIN TA ON TA.COL1 = TB.COL2 AND TB.COL3 = 4;(faster) 原因是 TB.COL3 可以被快速的估计,如果TB 表放到前面(index on TB.COL3): 一般规则是把缩小条件的列的表放在前面 3.4. 使用where 还是join 使用 WHERE 条件链接表可能会降低运行速度. 下面的例子将会比较慢,即使使用了索引: SELECT ... FROM TA, TB, TC WHERE TC.COL3 = TA.COL1 AND TC.COL3=TB.COL2 AND TC.COL4 = 1 这个查询隐含TA.COL1 = TB.COL2 ,但是没有直接设定这个条件.如果 TA 和 TB 每个表都包含100 条记录,10000 组合将和 TC 关联,用于TC这个列的条件,尽管有索引在这个列上.使用JOIN 关键字, 在组合TC 之前,TA.COL1 = TB.COL2 条件直接并缩小组合 TA 和 TB 的行数, 在运行大数据量的表的结果是,将会很快: SELECT ... FROM TA JOIN TB ON TA.COL1 = TB.COL2 JOIN TC ON TB.COL2 = TC.COL3 WHERE TC.COL4 = 1 这个查询可以提高一大步,如果改变表的顺序, 所以 TC.COL1 = 1 将最先使用,这样更小的集合将组合在一起: SELECT ... FROM TC JOIN TB ON TC.COL3 = TB.COL2 JOIN TA ON TC.COL3 = TA.COL1 WHERE TC.COL4 = 1 以上例子,数据引擎自动应用于TC.COL4 = 1 组合小的集合于其它表关联. Indexes TC.COL4, TB.COL2 TA.COL1 都将使用索引,提高查询速度. 3.5. Subqueries and Joins 使用join 和调整表的顺序提高效率. 例如:, 第二个查询的速度将更快一些(TA.COL1 和TB.COL3都有索引): Example 2.2. Query comparison SELECT ... FROM TA WHERE TA.COL1 = (SELECT MAX(TB.COL2) FROM TB WHERE TB.COL3 = 4) SELECT ... FROM (SELECT MAX(TB.COL2) C1 FROM TB WHERE TB.COL3 = 4) T2 JOIN TA ON TA.COL1 = T2.C1 第二个查询将 MAX(TB.COL2) 与一个单记录表相关联. 并使用TA.COL1索引,这将变得非常快. 第一个查询是将 TA 表中的每一条记录不断地与MAX(TB.COL2)匹配. 3.6. 数据类型 TINYINT, SMALLINT, INTEGER, BIGINT, NUMERIC and DECIMAL (without a decimal point) are supported integral types and map to byte, short, int, long and BigDecimal in Java. Integral Types: TINYINT, SMALLINT, INTEGER, BIGINT, NUMERIC and DECIMAL Other Numeric Types: REAL, FLOAT or DOUBLE Bit and Boolean Types: BOOLEAN: UNDEFINED,TRUE,FALSE NULL values are treated as undefined. Storage and Handling of Java Objects Sequences and Identity Identity Auto-Increment Columns: The next IDENTITY value to be used can be set with the ALTER TABLE ALTER COLUMN RESTART WITH ; Sequences: SELECT NEXT VALUE FOR mysequence, col1, col2 FROM mytable WHERE ... 3.7. 事务问题: SET PROPERTY "sql.tx_no_multi_rewrite" TRUE 4. Connections 通用驱动jdbc:hsqldb: 下列协议标识(mem: file: res: hsql: http: hsqls: https:) Table 4.1. Hsqldb URL Components Driver and Protocol Host and Port Database jdbc:hsqldb:mem: not available accounts jdbc:hsqldb:mem:. jdbc:hsqldb:file: not available mydb /opt/db/accounts C:/data/mydb 数据库路径. jdbc:hsqldb:res: not available /adirectory/dbname jars files are accessed in Java programs. The /adirectory above stands for a directory in one of the jars. jdbc:hsqldb:hsql: jdbc:hsqldb:hsqls: jdbc:hsqldb:http: jdbc:hsqldb:https: //localhost //192.0.0.10:9500 //dbserver.somedomain.com /an_alias /enrollments /quickdb 别名在server.properties or webserver.properties文件中指定 database.0=file:/opt/db/accounts dbname.0=an_alias database.1=file:/opt/db/mydb dbname.1=enrollments database.2=mem:adatabase dbname.2=quickdb In the example below, the database files lists.* in the /home/dbmaster/ directory are associated with the empty alias: database.3=/home/dbmaster/lists dbname.3= 4.1.Connection properties Connection properties are specified either by establishing the connection via the: DriverManager.getConnection (String url, Properties info); method call, or the property can be appended to the full Connection URL. Table 4.2. Connection Properties get_column_name true column name in ResultSet This property is used for compatibility with other JDBC driver implementations. When true (the default), ResultSet.getColumnName(int c) returns the underlying column name When false, the above method returns the same value as ResultSet.getColumnLabel(int column) Example below: jdbc:hsqldb:hsql://localhost/enrollments;get_column_name=false When a ResultSet is used inside a user-defined stored procedure, the default, true, is always used for this property. ifexists false connect only if database already exists Has an effect only with mem: and file: database. When true, will not create a new database if one does not already exist for the URL. When false (the default), a new mem: or file: database will be created if it does not exist. Setting the property to true is useful when troubleshooting as no database is created if the URL is malformed. Example below: jdbc:hsqldb:file:enrollments;ifexists=true shutdown false shut down the database when the last connection is closed This mimics the behaviour of 1.7.1 and older versions. When the last connection to a database is closed, the database is automatically shut down. The property takes effect only when the first connection is made to the database. This means the connection that opens the database. It has no effect if used with subsequent, simultaneous connections. This command has two uses. One is for test suites, where connections to the database are made from one JVM context, immediately followed by another context. The other use is for applications where it is not easy to configure the environment to shutdown the database. Examples reported by users include web application servers, where the closing of the last connection conisides with the web app being shut down. 4.2. Properties Files 大小写敏感 (e.g. server.silent=FALSE will have no effect, but server.silent=false will work). 属性文件和设定存储如下 : Table 4.3. Hsqldb Server Properties Files File Name Location Function server.properties the directory where the command to run the Server class is issued settings for running HSQLDB as a database server communicating with the HSQL protocol webserver.properties the directory where the command to run the WebServer class is issued settings for running HSQLDB as a database server communicating with the HTTP protocol .properties the directory where all the files for a database are located settings for each particular database Properties files for running the servers are not created automatically. You should create your own files that contain server.property=value pairs for each property. 4.2.1. Server and Web Server Properties server.properties and webserver.properties 文件支持如下设定: Table 4.4. Property File Properties Value Default Description server.database.0 test the path and file name of the first database file to use server.dbname.0 "" lowercase server alias for the first database file server.urlid.0 NONE SqlTool urlid used by UNIX init script. (This property is not used if your are running Server/Webserver on a platform other than UNIX, or of you are not using our UNIX init script). server.silent true no extensive messages displayed on console server.trace false JDBC trace messages displayed on console In 1.8.0, 每个服务器支持同时启动10个不同的数据库. The server.database.0 property defines the filename / path whereas the server.dbname.0 defines the lowercase alias used by clients to connect to that database. The digit 0 is incremented for the second database and so on. Values for the server.database.{0-9} property can use the mem:, file: or res: prefixes and properties as discussed above under CONNECTIONS. For example, database.0=mem:temp;sql.enforce_strict_size=true; Values specific to server.properties are: Table 4.5. Server Property File Properties Value Default Description server.port 9001 TCP/IP port used for talking to clients. All databases are served on the same port. server.no_system_exit true no System.exit() call when the database is closed Values specific to webserver.properties are: Table 4.6. WebServer Property File Properties Value Default Description server.port 80 TCP/IP port used for talking to clients server.default_page index.html the default web page for server server.root ./ the location of served pages . ? multiple entries such as .html=text/html define the mime types of the static files served by the web server. See the source for WebServer.java for a list. All the above values can be specified on the command line to start the server by omitting the server. prefix. 5. SqlTool Mem 数据库: E:\hsqldb>java -jar ./lib/hsqldb.jar mem Hsql Server: (前提是xdb server 已经启动): (java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 file:mydb -dbname.0 xdb) java -jar ./hsqldb.jar xdb 执行sql 语句: 1) Mydb.sql : CREATE MEMORY TABLE TEST(ID INTEGER,NAME VARCHAR(20)); INSERT INTO TEST VALUES(1,'aaa'); INSERT INTO TEST VALUES(2,'bbb'); E:\hsqldb>java -jar ./lib/hsqldb.jar mem mydb.sql 1 row updated 1 row updated 2) testuser.sql: CREATE MEMORY TABLE userTEST(ID INTEGER,NAME VARCHAR(20)); INSERT INTO userTEST VALUES(1,'aaa'); INSERT INTO userTEST VALUES(2,'bbb'); commit; //这样才能提交到数据库 E:\hsqldb>java -jar ./hsqldb.jar xdb testuser.sql > file.txt 2>&1 输出结果到file.txt 文件中. 连接oracle: E:\hsqldb>java -classpath ./classes12.zip;./hsqldb.jar org.hsqldb.util.SqlTool --driver oracle.jdbc.driver.OracleDriver orcl sqltool.rc 文件: urlid orcl url jdbc:oracle:thin:@localhost:1521:livedoor username scott password tiger driver oracle.jdbc.OracleDriver 以上driver 在一处写出即可,也可以连接别的数据库 连接mysql E:\hsqldb>java -classpath ./lib/mysql-connector-java-3.1.10-bin.jar;./hsqldb.jar org.hsqldb.util.SqlTool mysqltest .rc 文件内容: urlid mysqltest url jdbc:mysql://localhost:3306/test username root password root driver com.mysql.jdbc.Driver 6. sql 语法 6.1.1. ALTER INDEX[1] ALTER INDEX RENAME TO ; 6.1.2. ALTER SEQUENCE[1] ALTER SEQUENCE RESTART WITH ; 6.1.3. ALTER SCHEMA[1] ALTER SCHEMA RENAME TO ; 6.1.4. ALTER TABLE[1] ALTER TABLE ADD [COLUMN] Datatype [(columnSize[,precision])] [{DEFAULT | GENERATED BY DEFAULT AS IDENTITY (START WITH [, INCREMENT BY ])}] | [[NOT] NULL] [IDENTITY] [PRIMARY KEY] [BEFORE ]; ALTER TABLE DROP [COLUMN] ; ALTER TABLE ALTER COLUMN RENAME TO ALTER TABLE ALTER COLUMN SET DEFAULT }; ALTER TABLE ALTER COLUMN SET [NOT] NULL ALTER TABLE ALTER COLUMN ; ALTER TABLE ALTER COLUMN RESTART WITH ALTER TABLE ADD [CONSTRAINT ] CHECK (); ALTER TABLE ADD [CONSTRAINT ] UNIQUE (); ALTER TABLE ADD [CONSTRAINT ] PRIMARY KEY (); ALTER TABLE ADD [CONSTRAINT ] FOREIGN KEY () REFERENCES () [ON {DELETE | UPDATE} {CASCADE | SET DEFAULT | SET NULL}]; ALTER TABLE DROP CONSTRAINT ; ALTER TABLE RENAME TO ; 6.1.5. ALTER USER[1] ALTER USER SET PASSWORD ; ALTER USER SET INITIAL SCHEMA ; 6.1.6. CALL CALL Expression; See also: Stored Procedures / Functions, SQL Expression. 6.1.7. CHECKPOINT CHECKPOINT [DEFRAG[1]]; See also: SHUTDOWN, SET LOGSIZE. 6.1.8. COMMIT COMMIT [WORK]; See also: ROLLBACK, SET AUTOCOMMIT, SET LOGSIZE. 6.1.9. CONNECT CONNECT USER PASSWORD ; See also: GRANT, REVOKE. 6.1.10. CREATE ALIAS CREATE ALIAS FOR ; See also: CALL, Stored Procedures / Functions. 6.1.11. CREATE INDEX CREATE [UNIQUE] INDEX ON ( [DESC] [, ...]) [DESC]; 6.1.12. CREATE ROLE[1] CREATE ROLE ; 6.1.13. CREATE SCHEMA[1] CREATE SCHEMA AUTHORIZATION [ [] [...]; CREATE SCHEMA ACCOUNTS AUTHORIZATION DBA CREATE TABLE AB(A INTEGER, ...) CREATE TABLE CD(C CHAHR, ...) CREATE VIEW VI AS SELECT ... GRANT SELECT TO PUBLIC ON AB GRANT SELECT TO JOE ON CD; 6.1.14. CREATE SEQUENCE[1] CREATE SEQUENCE [AS {INTEGER | BIGINT}] [START WITH ] [INCREMENT BY ]; SELECT [...,] NEXT VALUE FOR [, ...] FROM ; 6.1.15. CREATE TABLE CREATE [MEMORY | CACHED | [GLOBAL] TEMPORARY | TEMP [1] | TEXT[1]] TABLE ( [, ...] [, ...] ) [ON COMMIT {DELETE | PRESERVE} ROWS]; 6.1.16. CREATE TRIGGER[1] CREATE TRIGGER {BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON [FOR EACH ROW] [QUEUE n] [NOWAIT] CALL ; 6.1.17. CREATE USER CREATE USER PASSWORD [ADMIN]; 6.1.18. CREATE VIEW[1] CREATE VIEW [(,..) AS SELECT ... FROM ... [WHERE Expression] [ORDER BY orderExpression [, ...]] [LIMIT [OFFSET ]]; CREATE VIEW mealsjv AS SELECT m.mid mid, m.name name, t.mealtype mt, a.aid aid, a.gname + ' ' + a.sname author, m.description description, m.asof asof FROM meals m, mealtypes t, authors a WHERE m.mealtype = t.mealtype AND m.aid = a.aid; CREATE VIEW mealswebv AS SELECT name, author FROM mealsjv; CREATE VIEW aview (new_name, new_author) AS SELECT name, author FROM mealsjv 6.1.19. DELETE DELETE FROM table [WHERE Expression]; 6.1.20. DISCONNECT DISCONNECT; 6.1.21. DROP INDEX DROP INDEX index [IF EXISTS]; 6.1.22. DROP ROLE[1] DROP ROLE ; 6.1.23. DROP SEQUENCE[1] DROP SEQUENCE [IF EXISTS] [RESTRICT | CASCADE]; 6.1.24. DROP SCHEMA[1] DROP SCHEMA [RESTRICT | CASCADE]; 6.1.25. DROP TABLE DROP TABLE [IF EXISTS] [RESTRICT | CASCADE]; 6.1.26. DROP TRIGGER DROP TRIGGER ; 6.1.27. DROP USER DROP USER ; 6.1.28. DROP VIEW[1] DROP VIEW [IF EXISTS] [RESTRICT | CASCADE]; 6.1.29. EXPLAIN PLAN EXPLAIN PLAN FOR { SELECT ... | DELETE ... | INSERT ... | UPDATE ..}; 6.1.30. GRANT GRANT { SELECT | DELETE | INSERT | UPDATE | ALL } [,...] ON { table | CLASS "package.class" } TO ; GRANT [,...] TO [1]; GRANT SELECT ON Test TO GUEST; GRANT ALL ON CLASS "java.lang.Math.abs" TO PUBLIC; 6.1.31. INSERT INSERT INTO table [( column [,...] )] { VALUES(Expression [,...]) | SelectStatement}; 6.1.32. REVOKE REVOKE { SELECT | DELETE | INSERT | UPDATE | ALL } [,...] ON { table | CLASS "package.class" } FROM ; REVOKE [,...] FROM [1]; 6.1.33. ROLLBACK ROLLBACK [TO SAVEPOINT [1] | WORK}]; 6.1.34. SAVEPOINT[1] SAVEPOINT ; 6.1.35. SCRIPT SCRIPT ['file']; 6.1.36. SELECT[1] SELECT [{LIMIT | TOP }[1]][ALL | DISTINCT] { selectExpression | table.* | * } [, ...] [INTO [CACHED | TEMP | TEXT][1] newTable] FROM tableList [WHERE Expression] [GROUP BY Expression [, ...]] [HAVING Expression] [{ UNION [ALL | DISTINCT] | {MINUS [DISTINCT] | EXCEPT [DISTINCT] } | INTERSECT [DISTINCT] } selectStatement] [ORDER BY orderExpression [, ...]] [LIMIT [OFFSET ]]; tableList table [{CROSS | INNER | LEFT OUTER | RIGHT OUTER} JOIN table ON Expression] [, ...] table { (selectStatement) [AS] label | tableName} selectExpression { Expression | COUNT(*) | { COUNT | MIN | MAX | SUM | AVG | SOME | EVERY | VAR_POP | VAR_SAMP | STDDEV_POP | STDDEV_SAMP } ([ALL | DISTINCT][1]] Expression) } [[AS] label] If CROSS JOIN is specified no ON expression is allowed for the join. orderExpression { columnNr | columnAlias | selectExpression } [ASC | DESC] LIMIT n m LIMIT n m LIMIT m OFFSET n TOP m UNION and other set operations 6.1.37. SET AUTOCOMMIT SET AUTOCOMMIT { TRUE | FALSE }; 6.1.38. SET DATABASE COLLATION[1] SET DATABASE COLLATION ; 6.1.39. SET CHECKPOINT DEFRAG[1] SET CHECKPOINT DEFRAG ; 6.1.40. SET IGNORECASE SET IGNORECASE { TRUE | FALSE }; 6.1.41. SET INITIAL SCHEMA [1] Users may change their base default schema name with the comand SET INITIAL SCHEMA ; 6.1.42. SET LOGSIZE SET LOGSIZE ; 6.1.43. SET PASSWORD SET PASSWORD ; 6.1.44. SET PROPERTY[1] SET PROPERTY ; 6.1.45. SET REFERENTIAL INTEGRITY SET REFERENTIAL_INTEGRITY { TRUE | FALSE }; 6.1.46. SET SCHEMA[1] SET SCHEMA ; 6.1.47. SET SCRIPTFORMAT[1] SET SCRIPTFORMAT {TEXT | BINARY | COMPRESSED}; 6.1.48. SET TABLE INDEX SET TABLE tableName INDEX 'index1rootPos index2rootPos ... '; 6.1.49. SET TABLE READONLY[1] SET TABLE READONLY {TRUE | FALSE}; 6.1.50. SET TABLE SOURCE[1] SET TABLE SOURCE [DESC]; SET TABLE mytable SOURCE "myfile;fs=|;vs=.;lvs=~" Supported Properties quoted = { true | false } default is true. If false, treats double quotes as normal characters all_quoted = { true | false } default is false. If true, adds double quotes around all fields. encoding = character encoding for text and character fields, for example, encoding=UTF-8 ignore_first = { true | false } default is false. If true ignores the first line of the file cache_scale= exponent to calculate rows of the text file in cache. Default is 8, equivalent to nearly 800 rows cache_size_scale = r exponent to calculate average size of each row in cache. Default is 8, equivalent to 256 bytes per row. fs = field separator vs = varchar separator lvs = long varchar separator Special indicators for Hsqldb Text Table separators \semi semicolon \quote quote \space space character \apos apostrophe \n newline - Used as an end anchor (like $ in regular expressions) \r carriage return \t tab \\ backslash \u#### a Unicode character specified in hexadecimal Only an administrator may do this. 6.1.51. SET WRITE DELAY[1] SET WRITE_DELAY {{ TRUE | FALSE } | | MILLIS}; 6.1.52. SHUTDOWN SHUTDOWN [IMMEDIATELY | COMPACT | SCRIPT[1]]; 6.2. Data Types Table 9.1. Data Types. The types on the same line are equivalent. Name Range Java Type INTEGER | INT as Java type int | java.lang.Integer DOUBLE [PRECISION] | FLOAT as Java type double | java.lang.Double VARCHAR as Integer.MAXVALUE java.lang.String VARCHAR_IGNORECASE as Integer.MAXVALUE java.lang.String CHAR | CHARACTER as Integer.MAXVALUE java.lang.String LONGVARCHAR as Integer.MAXVALUE java.lang.String DATE as Java type java.sql.Date TIME as Java type java.sql.Time TIMESTAMP | DATETIME as Java type java.sql.Timestamp DECIMAL No limit java.math.BigDecimal NUMERIC No limit java.math.BigDecimal BOOLEAN | BIT as Java type boolean | java.lang.Boolean TINYINT as Java type byte | java.lang.Byte SMALLINT as Java type short | java.lang.Short BIGINT as Java type long | java.lang.Long REAL as Java type double | java.lang.Double[1] BINARY as Integer.MAXVALUE byte[] VARBINARY as Integer.MAXVALUE byte[] LONGVARBINARY as Integer.MAXVALUE byte[] OTHER | OBJECT as Integer.MAXVALUE java.lang.Object The uppercase names are the data types names defined by the SQL standard or commonly used by RDMS's. The data types in quotes are the Ja 6.2.1. 自动增长: create table user(id IDENTITY,name varchar(20)); sql> create table dept(id int GENERATED BY DEFAULT AS IDENTITY(start with 10,increment by 5) not null PRIMARY KEY,name v archar(20)); sql> insert into dept(name) values('asc'); 1 row updated sql> insert into dept(name) values('security'); 1 row updated sql> select * from dept; ID NAME -- -------- 10 asc 15 security 2 rows 6.3. SQL Comments -- SQL style line comment // Java style line comment /* C style line comment */ 7. Hsqldb Test Utility 拷贝 junit.jar 到/lib 目录下 运行: ant hsqldbtest 生成 hsqldbtest.jar 运行: \hsqldb\testrun\hsqldb>runtest TestSelf October 30 Groovy 转Groovy <1> 语言特性前言Groovy 是基于 JRE 的脚本语言( Script ),是由James Strachan 和 Bob McWhirter 这两位天才发明的,(JSR 241 2004 年 3 月)。 和Perl,Python等等Script的设计初衷一样,作者希望Groovy能快速简洁地完成一些工作:如访问数据库以编写报告,编写单元测试用例(Unit Test Case),快速实现产品原型(ProtoType) 等等。 同时为了降低学习曲线,Groovy 的语法和Java 近似,并吸收了 Ruby,Python 和SmallTalk 的一些特点,因此 Groovy 在某些场合可以扮演一种 “咖啡伴侣”的角色。 那么Groovy 和 Java 相比,有什么变化呢? Groovy 和大部分Scripts一样:
因此,Groovy 是一种特别容易学习和使用的语言. 我们先借用IBM Groovy教程中的例子,下面的代码利用了Freemarker模板引擎来创建一个Template对象,然后将内容打印到标准输出。例(1)是Java代码,例(2)是Groovy代码。可以看到二者非常的类似。 //简单的 TemplateReader Java 类 和例2 中的 Groovy 作为对比. //用 Groovy 编写的更简单的 TemplateReader Groovy显然精简得多:
对Groovy感兴趣吗?别忘了拜访它的主页 Groovy的基础语法Groovy 有很多优点。它很好地融合了 Ruby、Python 和 Smalltalk 的一些最有用的功能,同时保留了基于 Java 语言的核心语法。对于Java 开发人员,Groovy 提供了更简单的替代语言,且几乎不需要学习时间。对于刚接触 Java 平台的开发人员,它可以作为有更复杂语法和要求的 Java 语言的一个容易的入口点。 语法Groovy的语句和Java类似,但是有一些特殊的地方。例如语句的分号是可选的。如果每行一个语句,就可以省略分号;如果一行上有多个语句,则需要用分号来分隔。 x = [1, 2, 3] 另外return关键字在方法的最后是可选的;同样,返回类型也是可选(缺省是Object)。 动态类型像其他Script一样,Groovy 不需要显式声明类型。在 Groovy 中,一个对象的类型是在运行时动态发现的,这极大地减少了要编写的代码数量。在Groovy中,类型对于值(varibles)、属性 (properties)、方法(method)和闭包(closure)参数、返回值都是可有可无的,只有在给定值的时候,才会决定它的类型,(当然声 明了类型的除外)。例如://Groovy 动态类型 由于使用了动态类型,不需要继承就可以得到多态的全部功能: class Song{ 这 里定义了两个Groovy 类,Song 和 Book。这两个类都包含一个 name 属性。函数 doSomething,它以一个 thing 为参数,并试图打印这个对象的 name 属性,但doSomething 函数没有定义其输入参数的类型,所以只要对象包含一个 name 属性,那么它就可以工作。可见, Song 和 Book 的实例都可以作为 doSomething 的输入参数。 mySong = new Song(length:90, name:"Burning Down the House") 在例子的最后,我们还创建了doSomething的一个函数指针 doSth,最后的执行结果与调用doSoemthing是一样的。 值 得注意的是:与Groovy Beta不同,在使用新的JSR Groovy类时,类里面的所有的变量都必须加上 def 关键字或者 private、protected 或 public 这样的修饰符。当然,也可以用 @Property 关键字声明成员变量。在Script中则不必。 字符串Groovy中的字符串允许使用双引号和单引号。 当使用双引号时,可以在字符串内嵌入一些运算式,Groovy允许您使用 与 bash 类似的 ${expression} 语法进行替换。可以在字符串中包含任意的Groovy表达式。 name="James" Groovy还支持"uXXXX" 引用(其中X是16进制数),用来表示特殊字符,例如 "u0040" 与"@"字符相同。 大块文本 如果有一大块文本(例如 HTML 和 XML)不想编码,你可以使用Here-docs. here-docs 是创建格式化字符串的一种便利机制。它需要类似 Python 的三重引号(""")开头,并以三重引号结尾。 name = "James" 在Groovy-JSR中,不再支持下面这种多行字符串,个人觉得似乎与Here-docs功能重叠: foo = "hello 对字符串的操作
Groovy主要结构接下来将展示Groovy的一些结构,包逻辑分支,类、闭包等等。逻辑分支if-else语句 Groovy提供Java相同的if-else语句。 x = false Groovy也支持三元操作符。 y = 5 switch语句Groovy的switch语句兼容Java代码,但是更灵活,Groovy的switch语句能够处理各种类型的switch值,可以做各种类型的匹配:
除了上面的,case值与switch值相等才匹配。 x = 1.23 Switch 语句的工作原理:switch语句在做case值匹配时,会调用isCase(switchValue)方法,Groovy提供了各种类型,如类,正则表 达式、集合等等的重载。可以创建自定义的匹配类,增加isCase(switchValue)方法来提供自定义的匹配类型。 循环while和do 循环 Groovy支持Java相同的while循环,但目前暂不支持do循环 x = 0 for循环 Groovy的for循环更简单,而且能够和各种类型的数组、集合、Map、范围等一起工作,我们稍候会详细介绍这些内容。 // iterate over a range 运行Groovy脚本你可以象使用Perl一样编写Groovy脚本,不需要class,不需要Main入口点,也不需要声明变量;此外,你还可以用def语句来定义自己的函数,并在脚本中使用它。 像许多脚本语言一样,Groovy 是 在运行时解释的,无编译的代码在构建-运行周期中可以提供很多好处。运行时编译使 Groovy 成为快速原型设计、构建不同的实用程序和测试框架的理想平台。通过以下代码可以很简单的运行Groovy. groovy HelloWorld.groovy 除了利用解释器来运行Groovy脚本外,Groovy 提供了两种不同的解释器Shell,使所有有效的 Groovy 表达式可以交互地执行:
灵活性是更有效地开发代码的主要因素。Groovy语言是建立在总有一天 Java 平台要包括一种敏捷开发语言这一信念上的 (Richard Monson-Haefel),因此Groovy的语法是始终围绕灵活性这个特性进行设计的。 因为 Groovy 除了是种面向过程和面向对象的语言外,它还包含了实现函数式编程一些东西。 函数编程我们知道例如Lisp、Scheme、Haskell、ML (或其他一些语言)采用了函数式编程。但“到底什么是函数式编程 (FP)?”不幸的是,即使是函数程序员他们自己也很难对 FP 究竟是什么有个一致的认识。 David Mertz 认为函数式编程粗略地描绘为至少具有以下几个特征:
函数编程的提倡者认为所有这些特征都导致更快速的开发更短以及错误更少的代码。而且,计算机科学、逻辑和数学领域的高级理论学家发现证明函数语言和程序的正式性能比命令语言和程序容易得多。 无独有偶,新发布的C# 3.0 规格书也加入了函数式编程的味道,从某些方面看起来,C# 3.0和Groovy 有点神似。 类在字节码水平,Groovy 类是真正的 Java 类。Groovy的类与Java类相似:
请注意,Groovy 1.0-JSR3与Groovy 1.0-Beta3在类定义上语法差别较大:
例子 1 显示了在 Groovy 语言中如何声明一个Greeter的类,它有两个public的字段name和age。注意我们是如何为它们赋值的。 //无构造子的Groovy Greeter 上面的例子等价于使用传统构造子的Greeter,但是更灵活。 //使用传统构造子的Groovy Greeter 接下来是一个复杂点的例子,其中类 Dog 有一个 getFullName 方法,它实际上返回一个表示 Dog 的全名的 String。 class Dog{我们可以看到,动态类型可以应用到字段和方法,因此参数类型是可选的(但是指定方法的参数类型和返回类型可以在通常的Java代码中更好的工作)。注意,最后return语句是可选(只要最后一条语句被执行,它的值就会被返回),缺省返回的是Object。 例子 4 是有两个属性 fname 和 lname 和一个方法的类 DogOwner。 class DogOwner{方法调用的语法和Java类似,支持静态和实例方法。在例 5 中,我们用 Groovy对Dog和DogOwner的实例设置属性并调用了方法。 //使用 Groovy 类 我们看到在 Dog 类的 getFullName 方法返回一个 String 对象,在这里它是 “Mollie Waldo”。 在Groovy中方法的调用可以省略括号,只要有参数,并且没有歧义。 传递命名参数 在调用方法时,可以传递命名参数,参数的名字和值用分号分隔(象Map语法),参数名是唯一标识字符串。 bean = new Expando(name:"James", location:"London", id:007) 注意:当前这种方法传递只实现具有Map的方法调用或JavaBean。 闭包Groovy 中最令人兴奋和最强大的功能是支持闭包。闭包(Closure)类似于 Java 语言中的匿名内部类。闭包和匿名内部类都是可执行的一段代码,不过这两者之间有一些细微的不同。状态是自动传入传出闭包的。闭包可以有名字。它们可以重复 使用。而且,最重要且对 Groovy 同样成立的是,闭包远比匿名内部类要灵活得多!闭包用以下方法定义: {[comma-separated-Arguments-list ->] statements }闭包用“{}”括起,“->”前面是参数,后面是处理语句。下面的例子演示了如何定义并使用一个闭包。第一个闭包演示了在字符串中使用参数的形式:${param};第二个闭包演示了多参数形式:用逗号隔离参数。 closure = { name ->有趣的是,闭包至少会有一个参数 “it”,它其实是参数表中的第一个参数,所以如果闭包定义中只有一个参数,可以省略不写,而使用缺省的参数“it”。对于没有参数定义的闭包,“it”的值就是 null 。 closure = { println "hello " + it }例子 9 展示了闭包的强大功能。新改进的 Dog 类包括一个 train 方法,它实际上执行创建了 Dog 实例的闭包。 class Dog{在 上面的例子里,我们还看到,闭包通过 call() 方法被调用。(在底层,call() 方法实现了对闭包隐含的doCall()方法的调用)。Groovy 中的大多数对象具有像 each 和 find 这样的以闭包为参数的方法。用闭包来迭代对象会产生几种令人兴奋的可能性: [2, 4, 6, 8, 3].find { x |其实就是:(你也许已经发现,可以用it代替x) myFinder={ x |这里我们使用了一个 Groovy-Beta3 闭包定义,只是为了让您能看懂老版本Groovy的一些例子。在新的Groovy JSR中对闭包的定义略有改动,因为 | 字符同时也是 Java 中的位操作符;Groovy JSR 建议使用 Nice (另外一种JRE语言)样式的 -> 分隔符代替它。 这种以闭包为参数的代码在Groovy里十分普遍: //each http://groovy.codehaus.org/Closures,不过有些内容可能不适用于Groovy JSR3,因为Groovy还在不断发展中。将对象组织到像列表和映射这样的数据结构中是一项基本的编码任务。像大多数语言一样,Groovy 定义了一个丰富的库以管理这些类型的集合。 列表创建一个列表与在 Java 语言中创建一个数组很类似。 collect = ['groovy', 29, 'Hello', 'Groovy'] 在上面的例子里,列表 collect 的第二项自动装箱为一个 Integer 类型。此外“[]”表示一个空列表,这个例子还演示了如何向列表中添加元素。 Groovy 还为集合增加了几个新方法,这些方法使得对列表的一些操作变得更加容易,如统计值出现的次数、将整个列表结合到一起、对列表排序等等。可以在例2 中看到这些集合方法的使用。 collect = [5, 9, 2, 2, 4, 5, 6] Maps像列表一样,映射也是一种在 Groovy 中非常容易处理的数据结构。例 3 中的映射包含两个对象,键是 name 和 date。注意可以用不同的方式取得值。 可以用“[:]”创造一个空的映射。 myMap = ["name" : "Groovy", "date" : new Date()] Map可以象beans一样操作,但key值(类似属性名)必须为有效的String标识。下面的例子详细演示了Map的用法。 map = ["name":"Gromit", "likes":"cheese", "id":1234] 范围范围(Range)是Groovy的一大亮点Range允许创建连续值的列表。范围是一个很直观的概念,并且容易理解,利用它可以包含地或者排除地创建一 组有序值。使用“..”的Range是包括两个边界,使用“..<”(Groovy Beta3使用 “...”)的Range只包括开始边界,而不包括结束边界。而且由于Range扩展java.util.List,所以Range可以作为List使用。 myRange = 29..<32 迭代器迭代是各种编程环境中最常见、最有用的技术。迭代器可以让您迅速地访问任何集合或容器中的数据,每次一个数据。Groovy 把迭代器变成隐含的,使用起来更简单,从而改善了 Java 语言的迭代器概念。我们可以直接在集合上使用类似迭代器的方法。而且, Groovy 的迭代器方法接受闭包,每个迭代中都会调用闭包。 class IteratorExample1{范围可以用于循环遍历。例如,将 rang 定义为一个排除范围,循环打印 a、b、c 和 d。 aRange = 'a'..<'e' 集合的其他功能如果不熟悉 Python 和其他脚本语言,那么您在 Groovy 集合中发现的一些其他功能会让您印象深刻。例如,创建了集合后,可以用负数在列表中反向计数: aList = ['python', 'ruby', 'groovy'] Groovy 还让您可以用范围分割列表。分割可获得列表的准确子集: fullName = "Andrew James Glover" Ruby的语法 集合类似于 Ruby如果愿意的话,还可以将 Groovy 集合作为 Ruby 集合。可以用类似 Ruby 的语法,以 << 语法附加元素、用 + 串接和用 - 对集合取差,甚至还可以用 * 语法处理集合的重复。 注意,还可以用 == 比较集合。 collec = [1, 2, 3, 4, 5] 集合的索引 可以在字符串、Lists、Maps...中使用下标进行索引 text = "nice cheese gromit!" 可以使用下标操作符更新项目: list = ["a", "b", "c"] 可以使用负索引从最后开始计数: text = "nice cheese gromit!" 也可以使用向后范围(开始索引大于结束索引),返回的结果是反转的 text = "nice cheese gromit!" 与Groovy的脚本特性相适应,Groovy JDBC 包含了一个精巧简单的GroovySql API,由于使用闭包和迭代器,GroovySql 把 JDBC 的资源管理职责从开发人员转移到 Groovy 框架内,从而消除了 JDBC 编程的繁琐,使得变成人员可以把注意力放在处理查询结果上。 GroovySql 简介在 Java 中,我们是这样利用JDBC来打印Music CD的样品: package cc.ejb.groovy; 利用迭代器和闭包,我们只需要短短的几行: import groovy.sql.Sql 在上面这段脚本中,你看不到try...catch,也不用捕获任何exception,甚至你不用关闭 Connection,也不用关闭 ResultSet,或者在 JDBC 编程中可以找到的任何其他熟悉的重要特性。 脚本中eachRow 方法可以当成查询结果上的迭代器。每个迭代都会执行传递进去的闭包,并在闭包中打印出每一次迭代的内容,id,artist,type等等。 为了运行上面的例子,必须将MySql JDBC Driver添加到classpath中。 执行更复杂的查询Groovy 的 Sql 对象另外提供了 execute 和 executeUpdate 方法用于处理更复杂的数据操作(例如 insert、 update 和 delete )。在下面的脚本中,您看到一个简单的 insert,它再次以 ${} 语法使用变量替换。这个代码只是向 cdbean 表插入一个新行。 id = 999 Groovy 还提供 execute 方法的一个重载版本,它接收一列值,这些值与查询中发现的 ? 元素对应。下面的例子查询了刚插入 cdbean 表中的数据。在底层,GroovySql 创建了普通 Java 语言 java.sql.PreparedStatement 的一个实例。 val = sql.execute("select * from cdbean where id = ?", [999])更新的方式基本相同,也使用 executeUpdate 方法。executeUpdate 方法接收一列值,与查询中的 ? 元素对应。 id= 556 删除实际上与插入相同,当然,语法不同,如例 9 所示。 sql.execute("delete from cdbean where id = ?" , [556])数据集(DataSet)构建于 GroovySql 简单性的基础之上,GroovySql 支持 DataSet 类型的概念,这基本上是数据库表的对象表示。使用 DataSet,您可以在行中遍历,也可以添加新行。实际上,用数据集是方便地表示表格的公共数据集合的方式。 但是,目前 GroovySql DataSet 类型的不足之处是它们没有代表关系;它们只是与数据库表的一对一映射。 import groovy.sql.Sql GroovySql 的 DataSet 类型可以容易地用 each 方法对表的内容进行遍历,容易地用 add 方法添加新行,add 方法接受一个 map 表示需要的数据。 使用存储过程和负索引存储过程调用和负索引(negative indexing)可能是数据操纵的重要方面。GroovySql 使存储过程调用简单得就像在 Sql 类上使用 call 方法一样。对于负索引, GroovySql 提供了自己增强的 ResultSet 类型,它工作起来非常像 Groovy 中的 collections。例如,如果您想获取结果集中的最后一个项目,您可以像例子 所示的那样做: sql.eachRow("select * from cdbean where id=556"){ cd -> println "-1 = " + cd.getAt(-2) 编写一个简单的报告应用程序我们将利用 GroovySql 编写一个报告所需数据库统计信息的应用程序,您的目标数据库是 MySQL,它恰好支持用查询发现状态信息这一概念。以下是您有兴趣的状态信息:
import groovy.sql.Sql 结束语GroovySql 这个干净漂亮的 API 把闭包和迭代器与 Groovy 轻松的语法结合在一起,有助于在 Java 平台上进行快速数据库应用程序开发。October 26 VB 学习日记 10/26With 语句
在一个单一对象或一个用户定义类型上执行一系列的语句。 语法 With object [statements] End With With 语句的语法具有以下几个部分: 部分 描述 object 必要参数。一个对象或用户自定义类型的名称。 statements 可选参数。要执行在 object 上的一条或多条语句。 说明 With 语句可以对某个对象执行一系列的语句,而不用重复指出对象的名称。例如,要改变一个对象的多个属性,可以在 With 控制结构中加上属性的赋值语句,这时候只是引用对象一次而不是在每个属性赋值时都要引用它。下面的例子显示了如何使用 With 语句来给同一个对象的几个属性赋值。 With MyLabel .Height = 2000 .Width = 2000 .Caption = "This is MyLabel" End With 注意 当程序一旦进入 With 块,object 就不能改变。因此不能用一个 With 语句来设置多个不同的对象。 可以将一个 With 块放在另一个之中,而产生嵌套的 With 语句。但是,由于外层 With 块成员会在内层的 With 块中被屏蔽住,所以必须在内层的 With 块中,使用完整的对象引用来指出在外层的 With 块中的对象成员。 重点 一般来说,建议您不要跳入或跳出 With 块。如果在 With 块中的语句被执行,但是 With 或 End With 语句并没有执行,则一个包含对该对象引用的临时变量将保留在内存中,直到您退出该过程。 将两行文本放入文本框 对于文本框,在设计窗口不能输入换行符,但可以再程序执行时用代码来换行,即使用ASCII字符的13和10,如下列小程序就可将两行文本放入文本框: Sub form_load( ) NL=chr(13)+chr(10) text1.text=“my name is”& NL &“liu qiang” End sub 为什么要学 Java?如果你常玩计算机,你可能知道 Java 是一个运算平台,而非咖啡或印尼的一个岛。在 Java 技术诞生后的这五年,Java 变成了大家朗朗上口的名词,种种的说法中,有些是事实,有也一些夸大不实。你可能会想知道:你该不该去学 Java,我给你的答案是肯定的,请听听我的说法。 Java 是什么? 你必须先了解 Java 究竟是什么?当人们提到「Java」,他们指的可能是: 1. Java 程序语言:一个类似 C++ 或 Smalltalk 的对象导向程序语言。学习 Java 程序语言类似学人类语言,都有一套规则和文法。 2. Java 虚拟机器(JVM):用来执行 Java 程序。JVM 有许多平台的版本,比方说 Linux 和 Windows 版。有了 JVM,Java 程序就可以在不同的平台上执行,也就是所谓的「写一次,到处都可执行」。 3. Java APIs(指的是函式库的程序设计接口):是一组预先定义好的类别,可以在你的程序中直接使用。这些东西是免费的,功能包含了像是档案存取,网络读写,图形接口等等。 当人们提到「学习 Java」,通常他们指的是 Java 语言和 API。大家可能对 JVM 所知不多,虽然对 JVM 有基本的认识对 Java 的学习是很有帮助的。
学习 Java 的理由中,有些是技术性的,有些则是非技术性的。我先描述两个程序的特色(垃圾搜集和例外处理),然后我告诉你:为什么在程序设计的领域中,Java 几乎是必备的技能。我也会告诉你 Java 开发工具的信息和它们吸引人的售价。 感谢老天,有「垃圾收集」真好! 使用 C++,你可能一不小心就写出会当机的程序;如果使用 Java,情况就大不相同了。C++ 程序的头号 bug 是内存配置的失误。C++ 的程序员很辛苦,必须直接配置一块内存,这块内存不用时还必须主动归还。这听起来简单,做起来可不容易,所以 C++ 的程序常常会耗尽内存。 例外处理机制让程序更稳固 不管是什么程序语言,都可以轻易地写出很糟糕的程序,但是使用 Java 想写出很糟糕的程序就不容易了。原因之一是垃圾收集,原因之二是「例外处理机制」。良好的程序员写出来的程序应该在一些意外状况发生时程序依然正常。档案无法开启,怎么办?万一读档读到一半时出问题,怎么办?如果你是用 C++ 或
其它语言,你可能会疏于考虑而没进行这些意外状况的处理。你可能会辩白:「我只是在试试看这样写能否行得通,我稍后会回过头来把程序改得更周延」。但结果
通常是:程序执行正常后,你又会忙着写新的程序,这么一拖后来就忘了回头处理还不完整的部分。问题终究还是会爆发出来,你终究还是要面对烂摊子。 到处都是 Java 到处都可见到 Java,这是一大好处。如果你靠写程序为生,你可能迟早都会接触到 Java。Java 已经渐渐地渗透到各领域,你可以写出 Java servlet,将其挂在 Apache 或其它网页服务器上,你可以写出 Java applet,在网页浏览器上执行。你甚至可以用 Java 写出数据库的 stored procedure,然后安装到 Oracle 8i 上。 Java 免费 Sun 提供 Java 相关的工具,让你可以开发与执行 Java 程序。你无须支付授权费,你也不用花钱买 Java 开发工具。当然,Sun 这么做自有他们的如意算盘,Scott McNealy(Sun 的老板)恨不得能征服世界,但是不管怎样,我们的的确确是不用付钱给任何人就可以享受 Java。 日光浴 Java 比其它语言来得有趣许多。Java 程序语言有许多「防呆装置」让你不会在程序中犯下大错,所以你可以很快地把程序写完,而如果使用其它语言必须要花更多时间。一份有趣的资料显示:用 Java 写程序比用其它语言快了四到十倍。我知道这听起来很不可思议,不过你可以问问周遭懂 Java 的人看看。不用花很多时间找 bug,意味着你可以在海滩上休息更久,意味着你可以接受阳光的日光浴而非「屏幕的日光浴」。用 Java 为你赚进的银两为自己买一副太阳眼镜吧! 本文作者:Jonathan Knudsen(着有「Learning Java」、「Java 2D Graphics」等书) 语言、平台、链接库 转自:蔡学镛《爪哇夜未眠》语言、平台、链接库,这三者之间有很密切的关系。本文尝试着以链接库为中心,探讨它们之间的现况。 语言与链接库语言通常会伴随着链接库,没有链接库的语言,差不多什么程序都写不出来。比方说,用 C 语言写出一个印出 Hello 的小程序,你需要用到 stdio 的链接库。用 Python 写 GUI 程序,你需要 Tkinter 链接库。 平台与链接库平台通常也会伴随着链接库,没有链接库的平台,等于是摆明了不希望别人开发此平台的程序。比方说,你想用 Visual C++ 6 开发 Windows 程序,你需要用到 GDI32 以及 USER32 或 MFC 等链接库。写 Mac OS 9 的程序,需要 Carbon 链接库。 平台的链接库 vs 语言的链接库在 A 平台上用 B 语言开发软件,你会同时面对 A 平台的链接库和 B 语言的链接库,此二链接库因为是不同厂商所提供的,所以可能无法百分之百契合,特别是牵涉到内存管理、资源管理、执行绪等和操作系统有密切关系的主题时。如果你想进行的某功能在 A 平台的链接库和 B 语言的链接库都有提供,那么你应该使用 A 平台链接库的版本,通常比较安全些。比方说,用 C 语言开发 Windows 平台的程序,如果你想配置内存,那么你应该呼叫 Win32 API 的版本(比方说 GlobalAlloc()),而非 C 语言的版本(比方说 malloc())。 跨平台的链接库你为某平台所开发的程序,为什么不能在别的平台上重新编译之后就能执行?问题就出在平台的链接库上。比方说,你用 C 语言搭配 C 的标准链接库和 Win32 链接库,在 Windows 平台上开发出一个演示文稿软件 WeakPoint 2000;你将 WeakPoint 2000 的原始程序拿到 Linux 上编译,却无法编译成功,问题就出在 Linux 没有 Win32 的链接库。 语言 + 平台 + 链接库Java 就更了不起了,不但将链接库统一起来,更将平台统一起来,也就是说程序不用重新编译,就可以直接执行。但是也因此,多了一层 JVM,牺牲了一部分的效率。 跨语言的链接库Borland 的 VCL 链接库是在 Windows 平台上相当受好评的一套链接库,可以被 C++ 和 Object Pascal(Delphi)使用。其实「跨语言的链接库」不是一种很好的说法,毕竟许多语言都可以连结外部原生链接库,两者不需要是同一种语言。但是这样的连结是否需要大费周章,则有相当大的差异。而 Delphi 和 C++ Builder 使用 VCL 则是相当方便的。 语言规格 + 平台 + 链接库 = 包山包海 ?.NET 比 Java 的眼光更高,甚至准备将语言规格也统一起来。.NET 有一个 CLS(common language specification),任何语言只要符合 CLS 这个标准,就可以轻易地整合进 .NET 平台,享用 .NET 平台的资源。这一点就是 Java 比不上的。虽然别的语言一样可以设计出编译器来将程序编译成 Java bytecode,在 JVM 上执行,但 Java 并没有提供直接的支持,所以要移植一个语言到 Java,比移植一个语言到 .NET 来得困难。 最乱的时代,最好的选择看完这篇文章,你可能已经头昏脑胀了。没关系,你只要记得下面这句话就好了:最乱的时代,最好的选择 ...Java。 Java 学习之道 转自:蔡学镛《爪哇夜未眠》目前 Java 可以说是产业界和学术界最热门的语言,许多读者都很急切想把 Java 学好。除非像电影「骇课任务」(Matrix)一样能够把需要的专业技巧下载到脑海(女主角只花了几秒下载资料,就马上具备飞行员的技巧),或是武侠小说中的运功传送内力的方式,否则花上一段时间苦学是免不了的。花时间,不打紧,就怕方法错误,事倍功半。我认为,学习 Java 包括了下列的范畴: * 认识 Java 的原理 下面分别就这几点详细阐述。 学习 Java 的原理了解 Java 的原理,才有可能真正体会 Java 的一切,学习任何事情,只要能掌握原理,就会比较顺利。我发现许多人使用 Java 已经逾年,却连 Java 最基本的特质都不清楚。 学习 Java 语言学习 Java 语言很简单,毕竟 Java 语言也只包含五十多个关键词(keyword)与几十个算符(operator),再加上 Java 语法(syntax)也很简单,所以一般人可以很快就学会 Java 语言。危险的是,很多人认为已经完全掌控 Java 语言,但其实对于内部的运作机制仍不能掌握,这些盲点有时候会让你无法完全掌控 Java 语言。克服这些盲点的方式是看「The Java Language Specification, 2nd Ed.」(没有中文版)来彻底弄懂 Java 程序语言,并看「Inside the Java Virtual Machine, 2nd Ed.」(有中文版,但翻译得@#%$)来彻底掌握 Java 虚拟机器的运作方式。 学习对象导向的思维学会了语言,并不代表就可以设计出好的对象导向系统架构。想要成为对象导向的专家,往往需要: * 多看相关的书,特别是 Design Pattern 和 Refactoring 的书。 学习 API学会 Java 语言之后,还需要学会一些 API 才能写出有用的程序。Java 的 API 非常多,必须规划好一个学习路径,才不会在浩瀚的 API 大海中迷失。必备的 API 包括了:IO、New IO、Collection Framework、Network、RMI、JAXP... 等。至于其它的 API,就看你的需求而定,大致上分成: * GUI 类:JavaBean -> Swing -> JavaHelp -> Java2D -> Image IO -> JAI -> Java 3D ... 学习开发工具的用法只用 JDK,是很难写出大型程序的,所以通常程序员会使用 JBuilder/VisualAge/ VisualCafe 等工具,这些软件卖这么贵,一定有它的价值,值得花一些时间好好学习这些开发工具的使用方式,你将会发现开发工具所提供的许多功能,可以让你在开发过程中生产力大增。如何进入程序设计的领域 转自:蔡学镛《爪哇夜未眠》这一阵子,软件、网络大红,许多人对程序设计开始感兴趣,我收到好一些 Sleepless in Java专栏读者的来信,不少读者共同的问题是:如何进入程序设计的领域?所以我选这 个主题当作 Sleepless in Java 专栏「复刊」的第一篇文章。 写程序是很有趣的事,可以把自己的想法付诸实行。写程序的工具很简单,只要有一部PC,适当的开发环境,就可以上工了。这样有限的工具却可以创造无限的可能,这也正是程序 设计迷人的地方。只要你能力够,你可以将你脑海中的创意写成程序,变成一套软件。 培养程序能力,不是一蹴可及的,下面提供我的一些建议,希望对有志进入程序设计领域的你有所帮助。 培养兴趣 把程序设计当成兴趣可以让你学得更快乐,学习效果自然会更好。在我到一个单位面试时,主管看了我的履历之后问我:「你怎么有这么多时间学会这么多东西、做这么多事?」 我的回答是:「把工作、学习、和娱乐结合在一起,时间就会是别人的三倍。」 我承认我很幸运,可以把程序设计当作赚钱的工作,学习的题材,以及茶余饭后的休闲活动。不是每个人都像我这般幸运,但是我相信至少大家都可以把它当成兴趣。相信我, 调整你的心境,把它当成是兴趣,而非苦差事,你非发现你的「程序功力」与日俱增。 慎选程序语言 慎选程序语言很重要,一开始就学太难的程序语言很容易让你遭遇到挫折而放弃。你可以挑比较容易且有趣的语言下手,建议您可以从下面的语言中择一: VB:简单,好用,书籍多。 这三个语言只是我给各位的建议,你也可以多听听别人的意见。在选定一个程序语言之后,就要执着,不可以很快放弃,又改学另一个程序语言,否则永远都只懂皮毛。有句谚语是 这么说的:「A jack of all trades is master of none」。如果你号称会C++、Java、…等十种程序语言,只不过每种程序语言都停留在Say Hello的阶段,相信面谈主管很快就会 对你 Say Goodbye。 当你学精某程序语言,然后想再学另一个程序语言,你会发现有了前一个程序语言札实的根基,学任何新的程序语言都很快。 使用适当的开发工具 现在RAD工具软件盛行,Visual Basic、Delphi、JBuilder、VisualAge、VisualCafe都是。有了RAD工具,只要「拉一拉,选一选」程序就完成一半了。许多硬底子的程序员 颇不以为然,认为初学者使用RAD工具不是好习惯,不过我倒不这么认为。我认为RAD工具可以降低初学者学习的门槛,提高兴趣。只是,在你学会「拉一拉,选一选」的简单步骤之后, 应该要找机会精进自己,弄懂内部的机制,不然不仅会有一种不踏实的感觉,甚至有许多程序会写不出来。我再强调一次:RAD可以当初学者入门的工具,但小心不要使它变成让你 停滞不前的借口。 另外也要学会使用开发工具所附的诸多功能(特别是除错功能)。许多人买了昂贵的 Enterprise 版开发工具,却只用到copy-paste功能,那么这套开发工具和 Windows 所附的 记事本就没有两样了。建议您开始使用一套新的开发工具前先花些时间把 User Guide 翻一翻。 现在许多开发工具都有免费版本可以下载,初学者不妨多多利用。 多读好书,少上课 大量阅读好书,是精进自己的不二法门。在这种快餐时代,许多人没耐心读书,反而喜欢到处上课,所以现在到处都是计算机班。如果遇到厉害的好老师,当然上过他(或她)的课 会收获很大,只是目前好老师的比例实在不高(虽然我自己也在开 Java/Enterprise Java/Java Swing 的课,但我还是得这么说)。我曾在网络上看到有人说:「没听过补习班教 出什么程序高手」,这倒也有几分真实性。不过一方面要归咎老师之外,一方面也要归咎学生,因为我发现通常上课的学生会在家里读书和写程序练习的比例不高。 相较于上课动辄花费上万元的高代价,买书只需要区区几百上千,划算多了,更何况书上的内容又比上课来得多且详细。不过「买书容易,看书难」。怕自己偷懒的话,找志同道合 的朋友组织「读书会」,彼此加油打气,还可以互相切磋。最好是像我前面提到的:把它变成兴趣。 加强英文阅读能力 加强英文和崇洋无关,而是有它实际的价值。许多信息都是要直接看英文的资料,因为没有中文版可看。 「可是我的英文很烂!」 这不是理由。没人生下来就能阅读英文,都是一点一点累积起阅读能力的。给自己一个机会,找一本单字文法都比较简单、且页数又少的书籍下手,很快地,你会发现技术书籍的 单字就是哪几个在重复出现,阅读这样的书一点都不难。 请注意:原文书的写作风格也有相当大的差异,有的书的确是不好读。所以,如果你刚开始要尝试阅读原文书,不要挑到像 Bjarne Stroustrup 所写的 The C++ Programming Language 这类难懂的书……尽管它是经典。 问人之前,先问自己 遇到问题,可以到国内外的程序设计相关讨论区去请教别人,如果态度谦逊,且问题叙述清楚,相信许多有经验的前辈会很乐于参与讨论。不过,凡是遇到问题就发问,这不是好事, 因为你会因此越来越依赖别人,而失去了自我解决问题的能力。自己应该尝试着查书、写程序测试、甚至阅读原始码,来找出答案。如此一来,真的没办法而请教别人时,也才能 比较深入地讨论。 多写程序 学程序设计不可以只看书,将随书光盘的程序执行一次,就认为自己已经学会了。应该开始写一些程序,且由小到大,由简单到复杂。找一些有趣的题目(比方说:计算器,踩地雷, 小画家,俄罗斯方块),可以提升写程序的动力。 我看到许多学生大一的程序作业都是copy同学的,失去了练习的机会。等到二年级之后,想开始写程序,却写不出来了。初学程序设计的阶段,应该给自己多一些机会写程序。 向上延伸,向下延伸,向旁延伸 当你发现你已经可以掌握此程序语言之后,你可以选择: 向上延伸:学习对象导向分析设计、Design Patterns、以及软件工程。让自己具有做大型计划的能力。 向下深入:深入了解内部底层的机制,例如操作系统(甚至硬件)内部。 向旁延伸:学习不同的API,例如:多媒体、数据库、企业运算…。 另外,数据结构、算法等基础也很重要。 结论 一分耕耘,一分收获,用对方法,持之以恒。每半年检阅自己这段期间以来的进步,相信你也会很高兴地说「我做到了」! 网络经典命令行 转- -Windows 2k/2003 Server 接口名称 IP地址 子网掩码 网关 接口跃点数 开始→运行→输入的命令集锦 转--gpedit.msc-----组策略 sndrec32-------录音机 Nslookup-------IP地址侦测器 explorer-------打开资源管理器 logoff---------注销命令 tsshutdn-------60秒倒计时关机命令 lusrmgr.msc----本机用户和组 services.msc---本地服务设置 oobe/msoobe /a----检查XP是否激活 notepad--------打开记事本 cleanmgr-------垃圾整理 net start messenger----开始信使服务 compmgmt.msc---计算机管理 net stop messenger-----停止信使服务 conf-----------启动 netmeeting dvdplay--------DVD播放器 charmap--------启动字符映射表 diskmgmt.msc---磁盘管理实用程序 calc-----------启动计算器 dfrg.msc-------磁盘碎片整理程序 chkdsk.exe-----Chkdsk磁盘检查 devmgmt.msc--- 设备管理器 regsvr32 /u *.dll----停止dll文件运行 drwtsn32------ 系统医生 rononce -p ----15秒关机 dxdiag---------检查DirectX信息 regedt32-------注册表编辑器 Msconfig.exe---系统配置实用程序 rsop.msc-------组策略结果集 mem.exe--------显示内存使用情况 regedit.exe----注册表 winchat--------XP自带局域网聊天 progman--------程序管理器 winmsd---------系统信息 perfmon.msc----计算机性能监测程序 winver---------检查Windows版本 sfc /scannow-----扫描错误并复原 taskmgr-----任务管理器(2000/xp/2003) October 23 Linux关机命令详解在linux下一些常用的关机/重启命令有shutdown、halt、reboot、及init,它们都 可以达到重启系统的目的,但每个命令的内部工作过程是不同的,通过本文的介绍,希 望你可以更加灵活的运用各种关机命令。 1.shutdown shutdown命令安全地将系统关机。 有些用户会使用直接断掉电源的方式来关闭linux, 这是十分危险的。因为linux与windows不同,其后台运行着许多进程,所以强制关机可能 会导致进程的数据丢失﹐使系统处于不稳定的状态﹐甚至在有的系统中会损坏硬件设备。 而在系统关机前使用shutdown命令﹐系统管理员会通知所有登录的用户系统将要关闭。 并且login指令会被冻结﹐即新的用户不能再登录。直接关机或者延迟一定的时间才关机 都是可能的﹐还可能重启。这是由所有进程〔process〕都会收到系统所送达的信号〔signal〕 决定的。这让像vi之类的程序有时间储存目前正在编辑的文档﹐而像处理邮件〔mail〕和 新闻〔news〕的程序则可以正常地离开等等。 shutdown执行它的工作是送信号〔signal〕给init程序﹐要求它改变runlevel。 Runlevel 0被用来停机〔halt〕﹐runlevel 6是用来重新激活〔reboot〕系统﹐ 而runlevel 1则是被用来让系统进入管理工作可以进行的状态﹔这是预设的﹐假定没有-h也 没有-r参数给shutdown。要想了解在停机〔halt〕或者重新开机〔reboot〕过程中做了哪些 动作﹐你可以在这个文件/etc/inittab里看到这些runlevels相关的资料。 shutdown 参数说明: [-t] 在改变到其它runlevel之前﹐告诉init多久以后关机。 [-r] 重启计算器。 [-k] 并不真正关机﹐只是送警告信号给每位登录者〔login〕。 [-h] 关机后关闭电源〔halt〕。 [-n] 不用init﹐而是自己来关机。不鼓励使用这个选项﹐而且该选项所产生的后果往 往不总是你所预期得到的。 [-c] cancel current process取消目前正在执行的关机程序。所以这个选项当然没有 时间参数﹐但是可以输入一个用来解释的讯息﹐而这信息将会送到每位使用者。 [-f] 在重启计算器〔reboot〕时忽略fsck。 [-F] 在重启计算器〔reboot〕时强迫fsck。 [-time] 设定关机〔shutdown〕前的时间。 2.halt----最简单的关机命令 其实halt就是调用shutdown -h。halt执行时﹐杀死应用进程﹐执行sync系统调用﹐ 文件系统写操作完成后就会停止内核。 参数说明: [-n] 防止sync系统调用﹐它用在用fsck修补根分区之后﹐以阻止内核用老版本的超 级块〔superblock〕覆盖修补过的超级块。 [-w] 并不是真正的重启或关机﹐只是写wtmp〔/var/log/wtmp〕纪录。 [-d] 不写wtmp纪录〔已包含在选项[-n]中〕。 [-f] 没有调用shutdown而强制关机或重启。 [-i] 关机〔或重启〕前﹐关掉所有的网络接口。 [-p] 该选项为缺省选项。就是关机时调用poweroff。 3.reboot reboot的工作过程差不多跟halt一样﹐不过它是引发主机重启﹐而halt是关机。它 的参数与halt相差不多。 4.init init是所有进程的祖先﹐它的进程号始终为1﹐所以发送TERM信号给init会终止所有的 用户进程﹑守护进程等。shutdown 就是使用这种机制。init定义了8个运行级别(runlevel), init 0为关机﹐init 1为重启。关于init可以长篇大论﹐这里就不再叙述。另外还有 telinit命令可以改变init的运行级别﹐比如﹐telinit -iS可使系统进入单用户模式﹐ 并且得不到使用shutdown时的信息和等待时间。 October 12 CVSTRAC SUBVERSION TRAC0327 subversion trac 以前用CVS的时候用的CVSTRAC,现在用SUBVERSION,感觉TRAC很不错的样子。 Trac is an enhanced wiki and issue tracking system for software development projects. Trac uses a minimalistic approach to web-based software project management. Our mission; to help developers write great software while staying out of the way. Trac should impose as little as possible on a team’s established development process and policies. All aspects of Trac have been designed with one single goal, to simplify tracking and communication of software issues, enhancements and monitoring overall progress. What is Trac? Around the core lies other modules, providing additional features and tools to make software development more streamlined and effective. Our goal is to help programmers focus on the important stuff: Developing software. What does Trac do? software issues
http://www.arm8.com/cv/3/4/123.html http://www.arm8.com/cv/3/4/124.html http://www.arm8.com/cv/3/4/125.html http://www.arm8.com/cv/3/4/126.html 结果那个该死的 PYSQLITE找不到,想想算了。 |
2006年总结 快过年喽..
精辟的英语
|
||||||||||||||||||
|
|