posts - 78,  comments - 48,  trackbacks - 0
www.agows.cn

此博客不再更新
posted @ 2008-07-04 11:45 黑咖啡 阅读(545) | 评论 (0)编辑 收藏
订钉,如果一直担心你的手,往往砸到的就是你的手!
posted @ 2008-03-13 09:31 黑咖啡 阅读(335) | 评论 (0)编辑 收藏
boomp3.com boomp3.com
posted @ 2008-03-12 13:07 黑咖啡 阅读(641) | 评论 (0)编辑 收藏
按农历出生时,各计是重量,而且相加,根据轻重,便知祸福吉凶。
  
  说明:将自己的年月日时对应的重量加起来
  
  袁天罡称骨算命法称骨算命法是唐代著名的星象预测家袁天罡称骨的预测方法。 
        这种方法同四柱算命一样 ,能确定一个人一生的吉凶祸福、荣辱盛衰,准确率很高,又便于掌握和运用。
  
  一个人出生的年、月、日、时各有定数,年、月、日、时的重量都有具体规定。只
  要把年、月、日、时的重量加在一起,按照“称骨歌”一查,就可确定这个人一生的命
  运。
  
  一个人出生的年份按年干支(即甲子年、乙丑年,丙寅年等)来确定重量。出生月
  按月份(即正月、二月等)来确定重量。出生日按日数(即初一、初二等)确定重量。
  出生时辰按子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥十二时辰确定重量。
  
    
    
  年、月、日、时骨重加在一起(1.2+0.6+0.5+1.6=3.9),此人总骨重是三两九钱。
  查看三两九钱的“称骨歌”,就是这个人一生的命运。
  
  袁天罡:唐初益州成都人。善风鉴,累验不爽,曾仕于隋,为盐官
  令。唐时,为火山令。著有《六壬课》、《五行相书》等。通志著录,其有《易镜玄要》一卷。久佚。
  

  甲子年(1924、1984):1两2钱
  丙子年(1936、1996):1两6钱
  戊子年(1948、):1两5钱
  庚子年(1960、1900):7钱

  丑年(1985、1925):9钱
  丁丑年(1937、1997):8钱
  已丑年(1949):7钱
  辛丑年(1901、1961):7钱
  癸丑年(1913、1973):7钱

  丙寅年(1926、1986):6钱
  戊寅年(1938):8钱
  庚寅年(1950):9钱
  壬寅年(1902、1962):9钱
  甲寅年(1914、1974):1两2钱
  

  卯年(1927、1987):7钱
  已卯年(1939):1两9钱
  辛卯年(1951):1两2钱
  癸卯年(1903、1963):1两2钱
  乙卯年(1915、1975):8钱
  龙
  戊辰年(1928、1988):1两2钱
  庚辰年(1940):1两2钱
  壬辰年(1952):1两0钱
  甲辰年(1904、1964):8钱
  丙辰年(1916、1976):8钱

  已巳年(1929、1989):5钱
  辛巳年(1941):6钱
  癸巳年(1953):7钱
  乙巳年(1905、1965):7钱
  丁巳年(1917、1977):6钱

  庚午年(1930、1990):9钱
  壬午年(1942):8钱
  甲午年(1954):1两5钱
  丙午年(1906、1966):1两3钱
  戊午年(1918、1978):1两9钱

  辛未年(1931、1991):8钱
  癸未年(1943):7钱
  乙未年(1955):6钱
  丁未年(1907、1967):5钱
  已未年(1919、1979):6钱

  壬申年:7钱
  甲申年:5钱
  丙申年(1956):5钱
  戊申年(1908、1968):1两4钱
  庚申年(1920、1980):8钱
  

  癸酉年(1933、1993):8钱
  乙酉年(1945):1两5钱
  丁酉年(1957):1两4钱
  已酉年(1909、1969):5钱
  辛酉年(1921、1981):1两6钱

  甲戍年(1934、1994):1两5钱
  丙戍年(1946):6钱
  戊戍年(1898、1958):1两4钱
  庚戍年(1910、1970):9钱
  壬戍年(1922、1982):1两0钱
  

  乙亥年(1935):9钱
  丁亥年(1947):1两6钱
  已亥年(1899、1959):9钱
  辛亥年(1911、1971):1两7钱
  癸亥年(1923、1983):6钱
数月的出生
  
正月: 6钱
二月: 7钱
三月:1两8钱
四月:9钱
五月:5钱
六月:1两6钱
七月:9钱
八月:1两5钱
九月:1两8钱
十月:8钱
十一月:9钱
十二月:5钱
  
数日的出生
  
初一:5钱
初二:1两0钱
初三:8钱    
初四:1两5钱
初五:1两6钱    
初六:1两5钱
初七:8钱
初八:1两6钱
初九:8钱
初十:1两6钱
十一:9钱
十二:1两七钱
十三:8钱
十四:1两七钱
十五:1两0钱
十六:8钱
十七:9钱
十八:1两8钱
十九:5钱
二十:1两5钱
弍一:1两0钱
弍二:9钱
弍三:8钱
弍四:9钱
弍五:1两5钱
弍六:1两八钱
弍七:7钱
弍八:8钱
弍九:1两六钱
三十:6钱

现代的每二个小时是古代的一个时辰。
  
  十二时辰换算成现代的钟点,就是:
  
  子时——晚11点钟到凌晨1点钟;
  
  丑时——1点钟至3点钟;
  
  寅时——3点钟至5点钟;
  
  卯辰——5点钟至7点钟;
  
  辰时——7点钟至9点钟;
  
  巳时——9点钟至11点钟;
  
  未时——下午1点钟至3点钟;
  
  申时——下午3点钟至5点钟;
  
  酉时——下午5点钟至7点钟;
  
  戌时——下午7点钟至晚9点钟;
  
  亥时——晚9点钟至11点钟。
  
数时的出生
  
子: 1两6钱
丑: 6钱
寅: 7钱
卯: 1两
辰: 9钱
已: 1两6钱
午: 1两0钱
未: 8钱
申: 8钱
酉: 9钱
戍: 6钱
亥: 6钱
例:一人出生在甲子年正月初一日子时
  
  甲子年骨重一两二钱
  
  正月骨重六钱
  
  初一日骨重五钱
  
  子时骨重一两六钱
把年月日的重量加在一起为三两九钱
 
  评骨格重量歌诀
  
  (二两一)
  终身行乞孤苦之命。
  短命非业谓大空,平生灾难事重重,
  凶祸频临陷逆境,终世困苦事不成。
  注解:身寒骨冷苦伶仃,此命推来行乞人,碌碌苦苦无乐日,终生孤单过一生。
  
  
  (二两二)
  一生劳碌之命。
  此命劳碌一生穷,每逢困难事重重,凶祸频临陷苦境,终身大事谋不成。
  注解:此命劳碌一生穷,每逢困难事重重,凶祸频临陷苦境,终身大事谋不成。
  身寒骨冷苦伶仃,此命推来行乞人,
  劳劳碌碌无度日,终年打拱过平生。
  
  (二两三)
  终身困苦之命
  此命推来骨肉轻,求谋做事事难成,妻儿兄弟实难靠,外出他乡做散人。
  注解:此命推来骨肉轻,求谋做事事难成,妻儿兄弟实难靠,外出他乡做善人。
  
  (二两四)
  一生薄福之命
  此命推来福禄无,门庭困苦总难荣,
  六亲骨肉皆无靠,流浪他乡作老翁。
  
  (二两五)
  六亲无靠,自立更生之命
  此命推来祖业微,门庭营度似稀奇,
  六亲骨肉如冰炭,一世勤劳自把持。
  
  (二两六)
  平生衣禄苦中求,独自营谋事不休,
  离祖出门宜早计,晚来衣禄自无休。
  注解:此命为人刚强,劳心劳力,移祖居住,有能自力得安然,知轻识重,坏事不做,
  老来贪心口无毒,但一生不足,子息难靠。初限之中小发达,早年家计得安康,四十八
  九岁,交来末运渐渐谋事而成,事业而就,财源茂盛,老来荣华。妻宫有克,两妻无刑
  ,子息四个只一子送终,寿元七十九,过此七十九岁,死于十二月中。
  
  
  
  (二两七)
  
  一生多谋少成之命
  一生作事少商量,难靠祖宗作主张,独马单枪空做去,早年晚岁总无长。
  注解:此命为人性纯不刚不柔,心中无毒,做事有始有终,池塘鸳鸯寻食吃,易聚易散
  ,骨肉六亲不得力,财物风云,操心劳力,极早恨奋寒窗,原来破尽,重新白手起家,
  且过三十五六,方可成家立业,四十外行船顺风,五十安稳,末限滔滔事业兴,妻宫硬
  配,子女送终,寿元七十,死于五月中。
  
  
  (二两八)
  一生行事似飘蓬,祖宗产业在梦中,
  若不过房改名姓,也当移徒二三通。
  注解:此命为人多才能,心机灵巧,祖业飘零,离乡别井可成事业,兄弟多力,驳杂多
  端,为静处安然,出外有人敬重,可进四方之财,有贵人扶持,逢凶化吉,勤俭一生,
  无大难,只是救人无功,恩中招怨,重义轻才,易聚易散,早年不能聚财,三十三岁方
  知劳苦,凡事顺意,三十八九,四十岁称心如意,末限福如东海,寿比南山。只是妻宫
  有克,三子送终,寿元六十九,闯过八十一,死于三月中。
  
  
  (二两九)
  初年运限未曾亨,纵有功名在后成,
  须过四旬才可立,移居改姓始为良。
  注解:此命为人性爆,心直口快,有才能,见善不欺,逢恶不怕,事有始终,量能宽大
  ,但不能聚财,兄弟六亲无力,自立家计,出外方好,初限二十三四五不遂,二十七八
  有好运到,犹如枯木逢春,中限四十九之命有险,四十多来古镜重磨,明月再圆。五十
  六七八九末限明月又被云侵,交七十方走大运,妻小配怕刑,克子,寿元七十七,死于
  春光中。 

        (三两)
  劳劳碌碌苦中求,东奔西走何日休,
  若使终身勤与俭,老来稍可免忧愁。
  注解:此命为人多才多能,心机为巧,祖业凋零,离乡别井可成家业,兄弟少力,驳杂
  多端,出外有贵人扶持,一生无刑克,无大难,只是救人无功,恩中招怨,重义轻才,
  易聚易散,早年不能聚财,三十三岁方知劳苦,凡事顺意,三十八九,四十岁称心如意
  ,三子送终,寿元六十九,死于三月中。
  
  
  (三两一)
  忙忙碌碌苦中求,何日云开见日头,
  难得祖基家可立,中年衣食渐无忧。
  交友谨慎,老年衣食足用之命
  忙忙碌碌苦中求,何日云开见日头,难得祖基家可立,中年衣食渐能周。
  注解:此命推来敬重双亲,有福有禄,六亲和睦,义气高强,少年勤学有功名,忠孝双
  全,心中无毒,不贵则福,出外受人钦佩,四海闻名,老来荣华,限上无忧,一生安康
  ,年轻欠利,末限安享福禄,白鹤先生云:此命三限,有子孙旺相局,初限早成家计,
  辛勤劳苦,中限渐渐生财重奔江山,夫妻少配无刑,末限荣华富贵,寿元八十三岁,死
  于冬月之中。
  
  
  (三两二)
  初年运蹇事难谋,渐有财源如水流,
  到得中年衣食旺,那时名利一齐收。
  注解:中限交来渐渐称心,求谋顺利,出外有人恭敬,一生受贵,若要问其消息,事业
  兴,家业旺,其年运到滔滔财源至,滚滚利丰盈,春光花自发,微风细雨生,四十六七
  八交末运,移花接子桂花香,夫妻偕老,寿元八十之外,子孙福禄荣昌,死于腊月中。
   
  (三两三钱)
  性直多情,交友带劫之命
  早年作事事难成,百计徒劳枉费心,半世自如流水去,后来运到得黄金。
  注解:此命生人性巧心灵,弄假成真,口快无心,恩中招怨,君子敬佩,小人气恨,骨
  肉无援,志在四方,身心健康,前运乘阴少种树,中限轻财,大运交来,声名可望,万
  事更新,名利振建,此后小事宜注意,才有子息,寿元八十三,死于三月中。
  
  
  (三两四)
  此命福气果如何,僧道门中衣禄多,
  离祖出家方为妙,朝晚拜佛念弥陀。
  注解:此命推来为人性躁,与人做事反为不美,离祖成家,三翻四次自成自立安享福,
  直自三十六至四十六,财不谋而自至,福不求而自得,有贵人助,家庭安宁,妻宫若要
  无刑,猴、猪、羊、蛇不可配,龙、虎、马、牛方得安,虽有二子,终生带暗方可。兄
  弟六亲如冰碳,在家不得安然,初限驳杂多端,劳碌奔波不能聚钱,常有忧愁,寿元七
  十八岁,死于三月中。
  
  
  
  (三两五)
  生平福量不周全,祖业根基觉少传,
  营事生涯宜守旧,时来衣食胜从前。
  注解:此命为人品性纯和,做事忠直,志气高傲,与人做事恩中招怨,六亲兄弟不得力
  ,祖业全无,早年驳杂多端,独马单枪,初限命运甚来,二十八九三十来岁末曾交运都
  说好,三十五六到四十犹如金秋菊迎秋放,心机用尽方逢春,末限交来始称怀,祖业有
  破后重兴,犹如枯木逢春再开花,妻宫忧虚无刑,寿元五十七,限至六十九,三子送终
  ,寿元八十一,死于十月中。
  
  
  (三两六)
  少年多波折,老来安逸之命
  不须劳碌过平生,独自成家福不轻,早有福星常照命,任君行去百般成。
  注解:此命为人品性刚直,做事公开有才能,有机变不肯休息,六亲兄弟不得力,祖业
  无靠,白手成家立业,末运多驳杂,不能聚财,好一双抓钱手,没有一个赚钱斗,此命
  蜘蛛结网,朝圆夜不圆,做几番败几番,只能稳步成家计,谁知又被狂风吹,初限二十
  三四,犹如明月被云侵,三十外来恰是日头又重开,二子送终,寿元五十七岁,过此八
  十八,死于秋天中。
  
  
  
  (三两七钱〕
  此命般般事不成、弟兄少力自孤行。
  虽然祖业须微有,来得明时去不明。
  一生财来复去,难得大富之命
  
  注解:此命为人品性刚直,做事公开有才能,不肯休息,六亲兄弟不得力,祖业无靠,
  白手成家立业,末运多驳杂,不能聚财,不欺负人,有义气,心神不定,易成喜怒,初
  限奔波劳苦,离别他境可成家计,改换门庭,中限未得如意,末限环环妻宫,方可刑克
  ,子息虽有不得力,只好真假送终,寿元七十七,死于七月中。
  
  (三两八钱〕
  一身骨肉最清高,早入簧门姓氏标。
  待到年将三十六,蓝衫脱去换红袍。
  注解:此命为人品性刚直,做事公开有才能,不肯休息,六亲兄弟不得力,祖业无靠,
  白手成家立业,末运多驳杂,不能聚财,好一双抓钱手,没有一个赚钱斗,此命蜘蛛结
  网,朝圆夜不圆,做几番败几番,只能稳步成家计,谁知又被狂风吹,初限二十三四,
  犹如明月被云侵,三十外来恰是日头又重开,终交末运方为贵,渐渐荣昌盛。
  
  
  (三两九钱〕
  
  少年命运不通,老享清福之命
  此命终身运不通,劳劳作事尽皆空,苦心竭力成家计,到得那时在梦中。
  注解:此命为人灵机性巧,胸襟通达,志气高,少年勤学有功名之格,青年欠利,腹中
  多谋,有礼有义,有才能,做事勤俭,一生福禄无,与人干事,反为不美,六亲骨肉可
  靠,交朋友,四海春风,中限光耀门庭,见善不欺,逢恶不怕,事有始终,量能宽大,
  义利分明,吉人天相,四海闻名,末限成家立业,安然到老,高楼大厦,妻宫无刑,子
  息三人,只一子送终,寿元七十七,卒于春光中。
  
  
  (四两)
  平生衣禄是绵长,件件心中自主张。
  前面风霜多受过,后来必定享安康。
  注解:此命为人性躁,心直口快,有才能,逢善不欺,逢恶不怕,事有始终,量能宽大
  ,不能聚财,祖业破败,兄弟六亲不得力,自立家计出外方好,初限二十五六连年不遂
  ,二十七八九有好运,犹如枯木逢春,中限四十九岁有灾,铁镜重磨,明月正圆,五十
  六七交大运,寿元七十七,卒于春光中。
  
  (四两一钱〕
  聪明超群,老来逍遥享福之命
  此命推来事不同,为人能干异凡庸,中年还有逍遥福,不比前时运未通。
  注解:此命性重气高,有口无心,祖业未交,离别他境,事事可成,六亲骨肉不得力,
  自成家计,学习经营,四方闻名,当把外方之时,丰隆初限奔波驳杂,不能聚财,交过
  三十八九方可成家,四十五六方能顺意,末限犹如三月杨柳,枝枝生细叶,晚景处处红
  ,妻宫无克破,子息假送老,寿元四十七,闯过可到六十六,卒于九月中。
  
  (四两二钱〕
  
  自力更生,老运名利双收之命
  得宽怀处且宽怀,何用双眉皱不开,若使中年命运济,那时名利一齐来。
  注解:此命为人操劳,自成自立,与人出力事不成,离祖之命,成家三番四次,用尽心
  机不得开怀,若要安乐享福,要到三十六到四十六时不谋自待,福不求自至,有贵人助
  力,家庭安然,妻宫若要无刑,猴、猪、羊、蛇不可配,龙、虎、马、牛方得安,兄弟
  六亲如冰碳,在家不得安然,初限驳杂多端,不能聚钱,常有忧愁,寿元七十八岁,死
  于三月中。
  
  
  四两三钱:
  福禄厚重,白手成家之命
  为人心性最聪明,作事轩昂近贵人,衣禄一生天数定,不须劳碌过平生。
  注解:此命为人性躁刚强,平生不受亏,多技多能,祖业冰碳,能聚财,交过三十开外
  ,方得开怀,中限之命能进四方之财,出外逢贵人之力,艺术精,善经营,方能兴旺,
  上业迟,有一疾相侵,直至末限方得享福,妻宫匹配,龙虎马牛可配,二子送终,寿元
  八十,卒于四月之中。
  
  
  四两四钱:
  初年无财,老年自得享福之命
  万事由天莫苦求,须知福禄命里收,少壮名利难如意,晚景欣然更不忧。
  注解:此命为人忠直敬重,心慈性躁,深谋远虑,心中多劳,贵人钦敬,六亲冰碳,初
  限行运,美中不足,中限渐入佳境,名利可佳,刚柔有济,二十九交佳运,可通花甲,
  天赐麒麟送老,寿元八十五岁,卒于冬月之中。
  
  (四两五钱)
  
  四两五钱:
  少年辛苦,老来福禄双全之命
  名利推来竟若何,前番辛苦后奔波。命中难养男与女,骨肉扶持也不多。
  注解:此命为人品性不刚不柔,心中无毒,自当自担,离祖之命,做事有始有终,池塘
  鸳鸯觅食,或聚或散,骨肉六亲不得力,如嗥如风,劳心费力多成败,初限运寒多驳杂
  ,祖业破败,重新白手成家,至三十五六方能成家立业,四十开外,如船遇顺风,五十
  多岁安稳,末限滔滔事业兴,妻宫硬配,子息伴架送终,寿元七十五岁,卒于五月之中
  。
(四两六钱)
  
  改姓移居,自得福寿双全之命
  东西南北尽皆通,出姓移居更觉隆,衣禄无亏天数定,中年晚景一般同。
  注解:此命为人心慈性躁,有口无心,有粗有细,一生奔波,六亲无靠,无大难,妻宫
  无刑,祖业凋零,自立家计,早业如同败落萍,劳心用下一半生,交三十五六七八九岁
  ,又平平度过几春秋,六十前后花开日,花开又招雨来淋,必定小人加暗害,平日之中
  要小心,早子招维,只一子送终,寿元七十三,卒于冬月之中
  (四两七钱〕
  早年多波折,晚年享福之命
  此命推为旺末年,妻荣子贵自怡然,平生原有滔滔福,财源滚滚似水流。
  注解:此命为人品性纯和,做事公道,忠心待人气质高,与人干事恩仇报,兄弟不力祖
  业微,早年驳杂多端,时来骨肉精,财源是归命,匹马单枪,初限运来二十八九三十岁
  ,末限交运都好,反到交时苦衰,三十六至四十来岁,犹如金秋菊遇秋开放,心机用尽
  方为贵,末运交来怡称怀,祖业有破,家业重注,好似枯木逢春再开花,孤子送老,五
  十九岁有一限到六十九岁,寿元八十二卒于冬月之中。
  
  (四两八钱)
  
  初年大志难伸,晚年发展之命
  初年运道未曾亨,若是蹉跎再不兴,兄弟六亲皆无靠,一身事业晚年成。
  注解:此命为人性躁,能随机应变,常近贵人,祖业无成,骨肉六亲少义,一个自立家
  计,初限交来财运如霜雪,中限略可成家,大运突来能立家业,妻有克,小配无刑,子
  息三人,寿元七十七岁,卒于七月之中。
  
  四两九钱:
  交友多情有损,小心防之再发之命
  此命推来福不轻,自成自立显门庭,从来富贵人钦敬,使婢差奴过一生。
  注解:此命为人品性纯和,做事勤俭,恩中招怨,兄弟有克,亲朋相援,赔酒赔饭,反
  说不美,初限贫愁,交过二十六七岁,如逆水行舟,不能聚财,中限驳杂多端,刑妻克
  子,交过四十岁,方可成家立业,般般遂意,件件称心,至四十七八岁有一灾,宁可损
  财交过,后有十年好运来,家中钱财聚,三子送老,寿元七十三岁,卒于九月之中。
  
  (五两)
  
  衣食无亏,一生富贵之命
  为利为名终日劳,中年福禄也多遭,老来是有财星照,不比前番目下高。
  注解:此命为人正直,伶俐灵巧,有机变,平生无大难,祖业无靠,自成自立,白手成
  家,亲朋冷落,兄弟少力,可得四方之财,好一双挣钱手,没有一个聚钱斗,满面春风
  人道好,一生不足自爱知,妻迟子晚,初限奔波,中限四十岁方交大运,犹如枯木逢春
  ,四十九岁有一灾,其年福星高照,有十年大运,财禄丰盈大吉昌,妻宫铁硬同偕老,
  子息一双可送终,寿元六十九岁,卒于冬月之中。
  
  
  (五两一钱〕
  
  勤俭成家,老年自得福禄之命
  一世荣华事事通,不须劳碌自亨通,弟兄叔侄皆如意,家业成时福禄宏。
  注解:此命为人做事有能力,且能随机应变,性燥能知其轻重,交朋结友如兄弟,气量
  宽宏,见善不欺,逢恶不怕,平生正直,无大难刑险,只是少招祖业,初限衣禄无亏,
  子息晚招可实得,四十至五十,末限通达昌吉,福禄无亏,财源稳定,丰衣足食,高堂
  大厦,妻宫友好,二子两女送终,寿元八十岁,卒于九月中。
  (五两二钱〕。
  聪明能干,老来财禄丰足之命
  一世荣华事事能,不须劳思自然宁,宗族欣然心皆好,家业丰亨自称心。
  注解:此命为人多才多能,心机灵变,祖业飘零,离乡可成家计,兄弟少力,驳杂多端
  ,为人只是救人无功,重义轻财,财禄易聚易散,早年聚财凡事顺意,三十八九四十岁
  如意称心,末限福如东海,寿比南山,只是妻克两硬无刑,有三子二女送终,寿元八十
  三,卒于冬月之中。
  
  (五两三钱〕
  自己兴家立业之命
  此格推为气量真,兴家发达在其中,一生福禄安排定,却是人间一富翁。
  注解:此命推来敬重双亲,有福有禄,气质高昂,少年勤学有功名,忠孝两全,心善无
  毒,非富则贵,出外有人钦佩,四海名扬,到老荣华,限上无忧,一世健康,青年欠利
  ,末限安享福禄,白鹤先生云:此骨三限之骨,子孙王相之局,初限早成家计,辛勤劳
  苦,中限渐渐生财,重整门庭,末限荣华富贵,妻宫小配无刑,有三子二女送终,寿元
  八十二,卒于冬月之中。
  
  
  
  (五两四钱〕
  一生清闲之命
  此命推来厚且清,诗书满腹看功成,丰衣足食自然稳,正是人间有福人。
  注解:此命为人灵巧,胸襟通达,志气高强,少年勤学有功名,年轻欠利,腹中多谋,
  有礼有义,有才有能,做事勤俭,一生福禄无亏,与人干事反为不美,亲朋戚友,四海
  春风。中限光辉门庭,逢善不欺,逢恶不怕,事有始终,吉人天相,四海扬名,成家立
  业,安然到老,高楼大厦,妻宫硬无刑,子息三人,只一子送终,寿元七十七,卒于春
  光中。
 
      (五两五钱〕
  
  少年奋斗,晚年富贵之命
  走马扬鞭争利名,少年作事费筹论,一朝福禄源源至,富贵荣华显六亲。
  注解:此命为人灵巧机巧,初限尚不聚财,只是虚名虚利,财来财去,一生勤于学,自
  有功名,有衣禄,福星照命,中限交来可称心,求谋如意,出外有人恭敬,一生受贵,
  要问其他消息,事后兴家发达,壮年滔滔财源旺,滚滚利顺来,迎春花正发,微风细雨
  生,四十九交来末运,移花接木桂花香,夫妻百年同偕老,寿元八十之外,福禄荣昌,
  卒于春光之中。
  
  
  
  (五两六钱〕
  仁义之人,老来富贵之命
  此格推来礼义通,一身福禄用无穷,甜酸苦辣皆尝过,滚滚财源稳且丰。
  注解:此命为人性巧心灵,有口无心,事不保密,少年劳碌难免,志在四方,身心健康
  ,前运乘阴少种树,怀才不遇,中限轻财,大举随行,移动得安然终日成,名声可望,
  旧业换新,名利享通,五人盆石皆白发,倾自心田此后昆,此命小事宜放松,方有子息
  ,寿元八十二岁,卒于冬月之中。
  
  (五两七钱〕
  
  人人钦敬,离祖成家之命
  福禄丰盈万事全,一身荣耀乐天年。
  名扬威震人争羡,此世逍遥宛似仙。
  福禄丰盈万事全,一身荣耀显双亲,名扬威振人钦敬,处世逍遥似遇春。
  注解:此命为人心灵性巧,做事细致,足智多谋,志气高昂,少年勤学,名利成就,逍
  遥快乐,气量宽宏,财禄有余,犹如锦上添花,中限以来,自成自立,渐渐荣昌,招人
  进财,妻子晚配为美,四十至四十五六岁,看子成名,末限多得意,家中财产甚丰隆,
  妻宫无克,二子送终,寿元七十三岁,卒于正月中。
  
  
  (五两八钱〕
  
  独创名利,晚年享福之命
  平生福禄自然来,名利兼全福寿偕,雁塔题名为贵客,紫袍金带走金阶。
  注解:此命为人忠直,做事有头有尾,身清气高,六亲有旺,兄弟少帮,妻宫并重,子
  息二三,他乡创业,官臣之命,只是与人干事,恩中招怨,反为不美,早限财来财去,
  中限兴旺,一子送终,寿元八十三岁,卒于四月之中。
  
  
  (五两九钱〕
  
  宜安分守己,福禄自足之命
  细推此格妙且清,必定才高礼义通,甲第之中应有分,扬鞭走马显威荣。
  注解:此命为人性情暴躁,刚强,平生不受亏,所谓量大多智多能,受人尊敬,祖业凋
  零,兄弟只可画饼冲饥,亲戚则是望梅止渴,劳心见早,发福见迟,独立成家,只是早
  聚财,逢凶化吉,驳杂交过二十开外,方得顺利开怀,中限之命可进四方之财,出外有
  贵人助力,可精手艺营业,方能兴家立业,此间或有小疾相侵,再交限方得安然,坐享
  福禄,妻宫之配龙虎马牛,一子送老,寿元八十岁,卒于六月之中。
  
  (六两〕
  
  鹤立鸡群,显祖扬宗之命
  一朝金榜快题名,显祖荣宗立大功,衣禄定然原裕足,田园财帛更丰盈。
  注解:此命为人灵机性巧,胸襟发达,志气高强,少年勤学,有功名之格,青年欠利,
  腹中多谋,有礼有仪,有才能,做事勤俭,一生福禄无亏,与人做事,有力无功,兄弟
  骨肉中多谋,交朋友,四海名扬,中限光辉门户,早能发达,义利分明,末限成家立业
  安然到老,高楼大厦,妻宫两硬无刑,子息三人,只有一人送终,寿元七十七岁,卒于
  春光之中。
  
  
  (六两一钱〕
  
  名利双收,一生富贵之命
  不作朝中金榜客,定为世上大财翁,聪明天赋经书熟,名显高科自是荣。
  注解:此命为人心秉直,聪明利达,心善口快,有才能。见善不欺,逢恶不怕,刚柔有
  济,事有始终,早能宽大,而能聚财,祖业如旧,六亲兄弟有靠,自立家计出外更好,
  二十至二十五六七八九岁有险,三十开外古镜重磨,明月再圆,六十六至七十方交大运
  妻宫小配,寿元七十七岁,卒于春光之中。
  (六两二钱〕
  读书聪明,特任高官,大振家风之命
  此命生来福不穷,读书必定显亲宗,紫衣金带为卿相,富贵荣华皆可同。
  注解:此命为人忠直敦厚,心无所毒,性巧灵敏,深谋远虑,吉人天相,心中多劳,受
  人钦叹,美中不足,中限渐入佳境,名利可佳,刚济有情,二十九交来阳春暖,东北佳
  音,天津四通,花甲一二岁大顺,天赐麒麟送老,寿元八十五岁,卒于冬月之中。
  
  
  
  (六两三钱〕
  长寿,高官显耀,上格之命
  命主为官福禄长,得来富贵实丰常,名题金塔传金榜,定中高科天下扬。
  注解:此命为人聪明利达,近知识,远小人,自觉性强,改悔及时,君子量大,福禄寿
  三星拱照,富贵名扬天下,荣宗显祖之格,可是美中欠佳,妻宫有硬,操劳心重,先天
  下之忧而忧,后天下之乐而乐,寿元七十有八,享于荣绵归期,二子二女送终。
  
  
  (六两四钱〕
  此格威权不可当,紫袍金带尘高堂。
  荣华富贵谁能及?万古留名姓氏扬。
  权威大官,万古留名之富贵命
  此格威权不可当,紫袍金带坐高堂,荣华富贵谁能及,积玉堆金满储仓。
  注解:此格威权不可当,紫袍金带坐高堂,荣华富贵谁能及,积玉堆金满储仓。
  (六两五钱〕
  细推此命福非轻,富贵荣华孰与争?
  定国安邦人极品,威声显赫震寰瀛。
  
 六两六钱:
  大富大贵,堆金积玉之福命
  此格人间一福人,堆金积玉满堂春,从来富贵由天定,正笏垂绅谒圣君。
  注解:此格人间一福人,堆金积玉满堂春,从来富贵由天定,正笏垂绅谒圣君。
  
  
  六两七钱:
  一世荣华,享福无边之命
  此命生来福自宏,田园家业最高隆,平生衣禄盈丰足,一世荣华万事通。
  注解:此命生来福自宏,田园家业最高隆,平生衣禄盈丰足,一世荣华万事通。
  
  
  
  (六两八钱〕
  享受天赐之福,近贵显达之命
  富贵由天莫苦求,万金家计不须谋,如今不比前翻事,祖业根基千古留。
  注解:富贵由天莫苦求,万金家计不须谋,如今不比前翻事,祖业根基千古留。
  
  
  
  (六两九钱〕祖业虽多,若不紧守也会落空
  君是人间衣禄星,一生富贵众人钦,纵然福禄由天定,安享荣华过一生。
  注解:君是人间衣禄星,一生富贵众人钦,纵然福禄由天定,安享荣华过一生。
  
  (七两〕一生清荣,富贵双全之命 荣华富贵已天定,正笏垂绅拜紫宸。
  此命推来福禄宏,不须愁虑苦劳心,一生天定衣与禄,富贵荣华主一生。
  注解:此命推来福禄宏,不须愁虑苦劳心,一生天定衣与禄,富贵荣华主一生。
  (七两一钱〕
  此命生成大不同,公侯卿相在其中。
  一生自有逍遥福,富贵荣华极品隆
posted @ 2008-03-10 17:41 黑咖啡 阅读(6098) | 评论 (1)编辑 收藏

posted @ 2008-03-05 16:39 黑咖啡 阅读(365) | 评论 (0)编辑 收藏
一首在路上带着我上路



刘欢 在路上
 《赢在中国》主题曲
 Created by tyutboy
 那一天
 我不得已上路
 为不安分的心
 为自尊的生存
 为自我的证明
 路上的心酸
 已融进我的眼睛
 心灵的困境
 已化作我的坚定
 在路上
 用我心灵的呼声
 在路上
 只为伴着我的人
 在路上
 是我生命的远行
 在路上
 只为温暖我的人
 温暖我的人
 那一天
 我不得已上路
 为不安分的心
 为自尊的生存
 为自我的证明
 路上的心酸
 已融进我的眼睛
 心灵的困境
 已化作我的坚定
 在路上
 用我心灵的呼声
 在路上
 只为伴着我的人
 在路上
 是我生命的远行
 在路上
 只为温暖我的人
 温暖我的人
 在路上
 用我心灵的呼声
 在路上
 只为伴着我的人
 在路上
 是我生命的远行
 在路上
 只为温暖我的人
 温暖我的人 ...
posted @ 2008-02-26 16:04 黑咖啡 阅读(384) | 评论 (0)编辑 收藏

文件名称: 我们的留学生活在日本的日子 RMVB 感动华人世界的影片 
文件类别: 综艺BT下载   
文件大小: 2550MB 
下载地址: 图片点击可在新窗口打开查看点这里下载-> 点击这里下载该文件的种子

【文件名称】----留学生活.torrent
【文件大小】----2.55G
【文件描述】
中文名称:我们的留学生活-在日本的日子
别名:我们的留学生活
资源类型:RMVB
版本:新增《含泪活着》。。网上唯一版本....
发行时间:1999年
地区:大陆
语言:普通话
简介:
图片点击可在新窗口打开查看

《我们的留学生活》是一部介绍新一代海外游子在日本求学奋斗的系列纪录片。由留日学生利用业余时间,自己集资,历时三年,屡经磨难,亲手制作的。
全片共 10集,每集约50分钟这是一段鲜为人知的真实记录,为研究新一代留学生的历史提供了极为珍贵的影像资料;这是一部活生生的教科书,是无数在日留学生献给祖国和亲人的爱!
三年里,无论是拍摄者还是被拍摄者,先后涉及数百人,但没有任何人拿过一分钱的报酬。相反,拍摄到谁家,谁家便端来热饭热菜;录相带用完了;摄制人员从自己的存款里取出钱来……就这样,在大洋彼岸的异国他乡,有一群炎黄子孙,扛看用打工挣钱买来的再简单不过的设备,东奔西走,翻山越岭,前赴后继枣这是发生在今天的夸父追日!
日本的富土电视台感动了:投入一流的摄影人员及设备;参加留学生的拍摄队伍。
中国的北京电视台感动了:加盟后期制作。
你走来,他走来;来自四面八方的志愿者……
且不论这部纪录片的水平高低,仅拍摄本身,就是一首值得人类引为自豪的伟大赞歌!
为了记录下这首赞歌,3年多来,富士电视台在支援留学生们拍摄的同时,另派出摄制组,一直跟踪拍摄留学生们的整个制作过程……
第1、2集:初来乍到(上、下)
  人物:王尔敏,19岁(当时)浙江省舟山市人。
     韩松,26岁(当时)江苏省盐城市人,已婚。
  1996年4月21日下午,两名来自日本自费留学的中国青年,拎着大包小包的行李,踏入了东京成田机场--日本的国门。他们素不相识,抱着不同的理想,迎接一切从零开始的挑战。从他们走下飞机的那一瞬间起,摄制组跟踪拍摄了二年半,忠实地纪录了他们“初来乍到”的泪水与笑容,记述了他们完全不同的成长过程......
第3、4集:彼岸的青春(上、下)
  人物:大学生的群像,平均年龄25岁。
  受尽溺爱的柳林来到东京后,每天洗11个小时碗,脚底板疼得不敢着地。他却很自豪:“我柳林也能吃苦,也是一条汉子!”
  西装笔挺的陈晨没有一分存款。毕业前夕又因故失家,成了流浪汉。冬夜,他踯躅在东京街头......
  陈麒来日本6年,上学打工,每天只能睡3小时,电车成了他的床。
  还有福建来的渡边敏行,江西来的李芳......彼岸的青春岁月,苦中有乐。
第5集:家在我心中
  人物:丁尚彪,43岁(当时)上海市人,来日8年。
  妻子和女儿留在上海,单身到日本留学。因所在的日本语学校之故,迫使他走上了专念打工的路。丁尚彪一口气在日本乾了8年,每天少则乾两份工,多则乾三份......八年来,他没有休息过一天,没有回过一次国。拼命地打工挣钱,是为了把上海的女儿送到世界一流大学去读书。这一强烈的愿望支撑着老丁的人生。他的信念是:“我在日本多打一个小时工,女儿以后就可以安心地多读一个小时书”。1997年6月,在上海复旦大学附中读书的女儿丁晽,终于获得了美国纽约大学的录取通知书。同年8月,八年多没有见面的父女俩在东京相会。
  现在,老丁一家三口,分别在上海、东京、纽约。
第6集:角落里的人
  “黑户口”在日本法律上称为“非法滞留”,处理措施:规劝或驱逐出境。
  一旦“黑”了,升学、正式就职乃至自由回国探亲等权利将随之失去。而且,平素最怕碰上警察......在日本,“黑”了的同胞有数万人,形成了一个独特的阶层。近年来,由于日本经济不断下滑,靠打工挣钱的路越来越窄,出路何在?
  在这集中,着重介绍了三个“黑户口”约2年里的生活变化以及对人生出路的思考和选择。
  最后的结果意味深长。
第7、8集:小留学生(上、下)
  人物:张素,女,9岁(当时)北京某小学三年级优等生。
  留学生的第二代,他(她)们跟随父母漂洋过海,突然被带到一个陌生的外国小学,失去了自己所熟悉的环境和朋友
  二年后回国时,难忘的不仅仅是学习成绩得了班级第一,还有深埋在心底里的真诚和友谊。
  摄制组从张素来日本第一天开始,到两年后回北京,一直跟踪拍摄。
第9、10集:我的太阳(上、下)
  人物:李仲生,45岁(当时)北京市人。来日11年。
  1986年,34岁的李仲生来日本留学,考上博士课程后,老李的妻子便不让丈夫打工了,全家的生活靠妻子洗碗的收入来支撑着。96年夏末,老李抱着筹资在国内建一所学校的想法,听信了诈骗组织“KKC”成员的谎言,在没和妻子商量的情况下,将妻子花了10年心血攒下来的全部财产--300万日元,投向了“KKC”......
  妻子,终日泪水不止--结婚15年的夫妻最终分居了。
  45岁的李仲生带着书,在中野区租了间不足5平方米的小屋,每周外出2-3次打零工,维持生活,每天写论文到天亮--离提交论文只有半年。96年除夕,妻子让老李回家吃顿团圆饭,望着增添了不少白发的妻子和默默包饺子的女儿,李仲生感慨万千,放开喉咙,唱起了十几年前唱过的那首名曲--我的太阳......
  日本的除夕之夜,十分地宁静,李仲生的歌声在街头回落,迫人胸怀......
这部记录片,早在99年中央电视台和上海电视台有放过,在国内引起的很大反响.争论也很大.虽然片子很老,但是现在看起来依然满励志的.表现了日本的中国留学生生活在异国他乡的不寻常的经历.
posted @ 2008-01-24 10:04 黑咖啡 阅读(1606) | 评论 (0)编辑 收藏

一等奖:
使用WebLogic Platform构建音乐站点 廖雪峰 id:xuefengl
http://dev2dev.bea.com.cn/bbs/yuanch/ArticleShow.jsp?Id=35
摘要:
拥有自己的音乐站点是个不错的想法,相比传统的ASP或PHP站点,我们将采用J2EE架构实现多层结构的,高度可扩展的站点。您将看到,采用J2EE技术,加上强大的WebLogic平台,我们能更容易的实现一个音乐站点应用,而非传统意义上的平面结构的网站。

BEA WebLogic Server 8.1 JMS与 IBM MQSeries 集成方案 周海根 id:zhouhg
http://dev2dev.bea.com.cn/bbs/yuanch/ArticleShow.jsp?Id=11
摘 要
本文主要在讲述BEA WebLogic Server8.1 JMS和Messaging Bridge的基本概念及其优势的基础上,并图文并茂的讲解BEA WebLogic Server8.1 JMS与第三方消息中间件IBM MQSeries5.2 进行事务性消息转发的集成方案。IBM MQSeries的基本概念也将被涉及。
关键字:WebLogic Server,JMS,MQSeries,连接工厂, JMS服务器,Messaging Bridge,队列,队列管理器,通道,消息驱动Bean

使用WebLogic 8.1的jCOM在VB中向JMS队列发送消息 赵杰 id:zghr
http://dev2dev.bea.com.cn/bbs/yuanch/ArticleShow.jsp?Id=23
摘要:
本文就如何利用WebLogic8.1提供java-com bridge jCOM,使用VB向WebLogic Server的JMS对列发送消息进行了讨论。文章中介绍了VB应用发送JMS消息所需的步骤,对应用的分发给出了方案。

其它相关作品:
struts with WLS81
http://dev2dev.bea.com.cn/bbs/yuanch/ArticleShow.jsp?Id=30

JAAS 基础
http://dev2dev.bea.com.cn/bbs/yuanch/ArticleShow.jsp?Id=28

了解ClassLoader
http://dev2dev.bea.com.cn/bbs/yuanch/ArticleShow.jsp?Id=27

如何配置WebLogic Platform Server 8.1 中文版与JBuilder 10.0X for WebLogic
http://dev2dev.bea.com.cn/bbs/yuanch/ArticleShow.jsp?Id=20

Weblogic webserice 实施案例
http://dev2dev.bea.com.cn/bbs/yuanch/ArticleShow.jsp?Id=17

化繁为简-使用Weblogic WorkShop8.1开发Web 服务
http://dev2dev.bea.com.cn/bbs/yuanch/ArticleShow.jsp?Id=14

BEA WebLogic Server8.1 Messaging Bridge最佳实践
http://dev2dev.bea.com.cn/bbs/yuanch/ArticleShow.jsp?Id=13

WebLogic 的中文问题 解决方案综合
http://dev2dev.bea.com.cn/bbs/yuanch/ArticleShow.jsp?Id=12

Struts 上机实践
http://dev2dev.bea.com.cn/bbs/yuanch/ArticleShow.jsp?Id=10

获奖名单:http://dev2dev.bea.com.cn/bbs/yuanch/list.htm
所有参赛文章:http://dev2dev.bea.com.cn/bbs/yuanch/Article.jsp?page=1

posted @ 2007-10-08 16:23 黑咖啡 阅读(635) | 评论 (0)编辑 收藏
最近几天在IBM培训WESB的相关产品,讲师是一位北大研究生,毕业1年,满腹经纶。
讲课非常认真,课余还继续自己的coding工作,交流得知,他除了讲课还有team中coding的工作。为这份精神所感动。也认识到了一流学校的学生和三流学校学生的本质区别:认真,自律,一丝不苟。

也难怪我总在忏悔中度过,为没有认真而忏悔,为碌碌无为而忏悔......

应了那句古话:白了少年头,空悲切!
posted @ 2007-09-27 13:23 黑咖啡 阅读(722) | 评论 (0)编辑 收藏
谷歌也不过如此。

posted @ 2007-09-19 10:10 黑咖啡 阅读(540) | 评论 (0)编辑 收藏
Subversion 的模块化设计(在"分层化设计"一节中有描述)以及与其他语言的绑定的能力(在"使用 C 和 C++ 之外的语言"一节中有介绍)使得它很适合作为其他软件的扩展或是支持模块。在这个附录中,我们将简单的介绍一些使用 Subversion 的第三方的软件。
  如果你想获得这部分信息的最新的版本,请查阅 Subversion 站点的链接页(http://subversion.tigris.org/project_links.html)。
  
D.1 客户端和插件

  AnkhSVN (http://ankhsvn.tigris.org/)
    微软 Visual Studio .NET 的 Subversion 插件

  JSVN (http://jsvn.alternatecomputing.com/)
    Java Subversion 客户端,包含一个 IDEA 的插件

  psvn.el (http://xsteve.nit.at/prg/vc_svn/)
    Emacs 的 Subversion 接口

  RapidSVN (http://rapidsvn.tigris.org/)
    基于 WxPython libraries 的跨平台的 Subversion 图形化客户端

  Subclipse (http://subclipse.tigris.org/)
    Eclipse 下的 Subversion 插件

  Subway (http://nidaros.homedns.org/subway/)
    Microsoft SCC provider for Subversion

  sourcecross.org (http://www.sourcecross.org/)
    Microsoft SCC provider for Subversion

  Supervision (http://supervision.tigris.org/)
    Subversion 的 Java/Swing 图形化客户端

  Sven (http://www.nikwest.de/Software/#SvenOverview)
    使用 Mac OS X Cocoa 框架开发的 Subversion 图形化客户端

  Svn4Eclipse (http://svn4eclipse.tigris.org/)
    为 Eclipse IDE 设计的 Subversion 插件

  Svn-Up (http://svnup.tigris.org/)
    基于 Java 的 Subversion 以及 IDEA IDE 的插件
  
  TortoiseSVN (http://tortoisesvn.tigris.org/)
    作为微软 Windows 外壳扩展设计的 Subversion 客户端
  
  WorkBench (http://pysvn.tigris.org/)
    在 Subversion 基础上构建的基于 Python 的跨平台软件设计环境

D.2 和语言的绑定

  PySVN (http://pysvn.tigris.org/)
    供 Python 使用的面对对象的 Subversion 客户端 API 项目

  Subversion (http://subversion.tigris.org/)
    供 Python、Perl、和 Java 使用的 Subversion API;对应于核心的 C API

  SVNCPP (http://rapidsvn.tigris.org/)
    供 C++ 的面对对象的 Subversion 客户端 API

D.3 仓库转换工具

  cvs2svn (http://cvs2svn.tigris.org/)
    从 CVS 到 Subversion 的转换

  vss2svn (http://vss2svn.tigris.org/)
    从 Microsoft SourceSafe 到 Subversion 的转换

  Subversion VCP Plugin (http://svn.clkao.org/revml/branches/svn-perl/)
    从 CVS 到 Subversion 转换的 VCP 插件

D.4 更高领域的一些工具

  Kwiki (http://www.kwiki.org/)
    带有 Subversion 备份支持的 Wiki

  Scmbug (http://freshmeat.net/projects/scmbug/)
    集成了漏洞跟踪的软件配置管理系统,支持 Subversion

  Subissue (http://subissue.tigris.org/)
    直接在 Subversion 仓库中跟踪发布

  Subwiki (http://subwiki.tigris.org/)
    使用 Subversion 作为数据仓库 的 Wiki

  svk (http://svk.elixus.org/)
    基于 Subversion 的分散式的 版本控制系统

  submaster (http://www.rocklinux.org/submaster.html)
    基于 Subversion 的分布式的软件开发系统

D.5 仓库浏览工具

  SVN::Web (http://svn.elixus.org/repos/member/clkao/)
    基于 Perl 的 Subversion 仓库 Web 接口

  ViewCVS (http://viewcvs.sourceforge.net/)
    基于 Python 的 CGI 脚本,用来浏览 CVS 和 Subversion 仓库

  WebSVN (http://websvn.tigris.org/)
    基于 PHP 的 Subversion 第三方仓库浏览工具

  Trac (http://projects.edgewall.com/trac)
    基于 Web 的软件项目管理、漏洞跟踪、发布系统,使用版本控制系统接口,并且集成了 Wiki 支持
posted @ 2007-09-04 13:25 黑咖啡 阅读(1174) | 评论 (0)编辑 收藏
A classical book named <thinking in java> for java developer.

Today I plan to reading it ,tow times ,the first time reading in chinese release,the second time in english release.

I hope I can finish it.Just a mark.
posted @ 2007-08-15 15:28 黑咖啡 阅读(746) | 评论 (0)编辑 收藏
According to your description of the file path ,we decide to use a property in configuration files to define the file path instead of save in database. So ,the "PC file path" and the "NK file path" will be defined in configuration file and you can define the file path by yourself.
Otherwise, about the limited character of the input field in page.In the specification of mod.org v2,there are tow types limit,the one is limitless ,for example the summary of a module,the other is only contain english character ,number or identifier,but we don't know a detailed account, which type of identifier can be used and which can't.Right now,thera is a way to do this,we can use the rule of the winodws that used to manage file name(file name can't contain \ / : * ? " < > |).
If this's ok ,we do this .If this's no enough,can you give me a doc for this?

Better use:
According to your description of the file path ,we decide to use a property in configuration files to define the file path instead of saving in database. So ,the "PC file path" and the "NK file path" will be defined in configuration file and you can define the file path by yourself.
Otherwise, about the limited character of the input field in page.In the specification of mod.org v2,there are tow types (limit),the one is limitless ,for example the summary of a module,the other is only contain alphabets, digits or symbol,but we don't know  which type of symbol can be used and which can't.Right now,thera is a solution  that we can use the rule of the winodws that used to manage file name(file name can't contain \ / : * ? " < > |).
Waht's your idea about it? If you have any question please feel free to let me know.
posted @ 2007-07-06 16:04 黑咖啡 阅读(1065) | 评论 (0)编辑 收藏
今天上午在QQ上收到一个陌生人的莫名的消息,出于礼貌,疑问了一下,于是灾难发生了。
电脑杀毒软件(瑞星)自动关闭,并不能打开。
以为是瑞星过期,准备装卡巴斯基,据说卡巴斯基还是比较强的,但是进入卡巴斯基安装文件目录,点击安装文件,文件夹自动关闭,并且IE也会自动关闭。
用同事的机器查看了一下,发现符合“AV终结者”的症状,于是到金山毒霸网站查看了“AV终结者”的相关资料并下载了专杀工具,地址如下:http://www.duba.net/zt/avkiller/
一杀,果然无数病毒。于是一阵猛杀......
杀完以后果然可以开杀毒软件,IE页回复正常。但是问题又出现了:除了C盘可以双击盘符自动打开意外,其他的盘都弹出“打开方式”对话框。
同事告诉我,格盘就好了,我曰:一般高手都不会这么做,菜鸟才会用格的方式来解决问题。
于是问问百度知道。果然找到了方法:
1.找到每个盘下的autorun.inf文件,但是中标以后,在文件夹选项中设置“显示隐藏文件”确认后又被自动设置成“不显示隐藏文件”,看来问题不小。
"我的电脑"—“工具”—“文件夹选项”—设置“显示所有文件和文件夹”后,系统仍然自动设置为“不显示隐藏的文件和文件夹”,无法看到隐藏文件。
解决方法:
“开始”--“运行”输入:regedit,回车后打开注册表编辑器。在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explore\Advanced\
Folder\Hidden\SHOWALL下,将DWORD值CheckValue设为1 (0:为隐藏)。
(注意类型是不是REG_DWORD,如果不是,把checkvalue删除后,新建一个DWORD值为1的CheckedValue项)
这个时候还是看不到autorun.inf,再找百度知道,看到一个方法
运行CMD,打开命令提示窗
转换到D盘,或者是需要打开方式的盘的盘符。
输入dir/a,应该可以看到atuorun.inf这个文件
然后输入attrib autorun.inf -s -h -r,这个命令的意思是取消autorun.inf文件的只读,系统只读,隐藏属性。
然后输入DEL autorun.inf删除这个文件
或者打开这个硬盘分区,手动删除掉autorun.inf这个文件也可以。别的分区依次按照这个方法运行,就可以了。
打开autorun.inf文件看了里面的内容:
[AutoRun]
open=F7C9D214.exe
shell\open=打开(&O)
shell\open\Command=F7C9D214.exe
shell\open\Default=1
shell\explore=资源管理器(&X)
shell\explore\Command=F7C9D214.exe
其中F7C9D214.exe,F7C9D214.exe这两个文件就是专杀工具杀掉的两个病毒文件,所以当你点击盘符的时候这个病毒exe文件就会运行,传染其他的文件和磁盘。
还值得注意的是这种病毒可能是“AV终结者”的变种,带木马盗窃密码,因为我的QQ也被盗窃,IP地址是吉林延边,鄙视这些无耻的鸟人。

删掉autorun.inf文件,重启电脑就可以正常访问了。
posted @ 2007-07-02 17:17 黑咖啡 阅读(887) | 评论 (1)编辑 收藏
function SearchHighlight(mytag) {
    
if (!document.createElement)
    
{
        
return;
    }

    var q 
= "{{$q}}";//要高亮显示的关键字
    var l = document.getElementsByTagName(mytag);
    
if("" == q) return;
    words 
= unescape(q.replace(/+/g,' ')).split(/s+/);
    
for (w=0;w<words.length;w++{
        
for(i=0;i<l.length;i++)
        
{
            var pa 
= new RegExp("("+words[w]+")","ig");
            
if(l.parentNode.parentNode.parentNode.id != "header")//标题中的内容不替换
            l.innerHTML = l.innerHTML.replace(pa,"<span class="searchword">$1</span>");
        }

    }

}

1、正则表达式
2、向后引用
调用方法:
document.onload = SearchHighlight(”a”);//要搜索的标签名称,这里的意思是凡是形如<a></a>的标记中的内容,包含关键字的时候均高亮显示。然后把下面的CSS定义加到你的CSS文件里或者直接加到HTML文件中
.searchword{background-color:yellow;}
那么所有的关键字(不论大小写)将显示为黄色背景。


有待分析!
posted @ 2007-06-26 17:48 黑咖啡 阅读(3401) | 评论 (3)编辑 收藏
无意间从同事那里得到一首歌曲Everybody needs somebody,感觉很棒,于是找到了LOVE PSYCHEDELICO,VeryCD里面有他们的全集下载,喜欢的朋友可以去下载。
 

168839220_6bc6e2acd6_o.jpg

歌手档案:

user posted image

KUMI (人声 & 吉他)

生日 > 1976.4.11 血型 > O
出生地 > 东京都 嗜好 > 旅游

NAOKI (吉他、低音吉他 & 键盘)

生日 > 1973.7.21 血型 > O
出生地 > 静冈县 嗜好 > 绘画


星路历程:

1997 年,两人在青山学院大学 (Aoyama Gakuin University) 的爱乐社创立此团。 首张单曲专辑『Lady Madonna / Yuutsu Naru Spider』於 2000 年 4 月 21 日发行。这张单曲专辑开拓了一个全新的音乐疆域,将 60、70 年代的摇滚乐风以及现代的数位音乐融为一体。 令人印象深刻的吉他乐句,英、日文自由混用的歌词,以及 Kumi 打破传统的独特唱腔,让 LOVE PSYCHEDELICO 的每张新专辑都在日本音乐巿场中引起强烈回响。 他们的第一张专辑『THE GREATEST HITS』、第二张专辑『LOVE PSYCHEDELIC ORCHESTRA』和第三张专辑『LOVE PSYCHEDELICO III』继续在销售排行榜上勇夺佳绩,并已成为巿场上的长销热门专辑。 2004 年 11 月,他们在首次的亚洲巡迴独唱会中登臺演出。

LOVE PSYCHEDELICO的官方网站


专辑曲目

SINGLE

user posted image

专辑名称:LADY MADONNA/Yuutsu Naru Spider
发行时间:2000-4-21
专辑备注:第1张单曲

专辑简介:

LOVE PSYCHEDELICO 开创了一个全新类型的音乐世界,将 60、70 年代的摇滚乐和现代数位音乐合而为一。 这种全新类型的音乐,再加上日、英语自由混用的独特歌唱型态,促成了一种力量饱满、却也优雅细緻的平衡,称为 DELICO GROOVE。

LADY MADONNA/Yuutsu Naru Spider:
这是我们以 DELICO 的名义共同创作的第一首歌曲。 我们之所以创作这首歌,主要是希望能够开创一种全新的日本流行歌曲型态。 『Brown Sugar』是滚石合唱团的代表作,而『You Really Got Me』则是 Van Halen 的代表作;因此,我们也希望能有一首我们自己的流行代表作,让其他人可以这么说:「『LADY MADONNA』是 DELICO 的代表作」。 除了这首歌以外,我们绝不会选择其他歌做为我们的第一首单曲。

因此,除了这首歌以外,我们绝不会选择其他歌做为我们的第一首单曲,而这也是我们以 DELICO 的名义共同创作的第一首歌曲。

LOW:
这首歌的概念源自於 90 年代的 Led Zeppelin 风格。 我们尝试在其中加入一些 Rap,并维持原有的 DELICO 音乐型态。 最后,我们创造出一种独特的音乐,具有数位律动 (Digital Groove) 的节奏型态,却仍保有人的温度。

FLY:
这首歌是在描述一些想要成为羊毛衫 (Cardigans) 乐团的美国音乐家。 这首歌是在我们还在玩乐团时写成的,当时 DELICO 尚未成立。这首歌当时不幸遭到退稿,但 Kumi 仍不死心。最后这首歌总算死里复活,成为 DELICO 的一首创作曲

专辑曲目:

01. LADY MADONNA/Yuutsu Naru Spider
02. LOW
03. FLY

user posted image

专辑名称:Your Song
发行时间:2000-7-5
专辑备注:第2张单曲

专辑简介:

迷幻、原音、数位、类比、英文、日文以及其他各种元素共同形塑了 LOVE PSYCHEDELICO 的独特性格。 他们第二张单曲专辑中的每首歌都具有独一无二的性格,但全都保有 DELICO 特有的律动。

Your Song:
试图终结国际音乐 (主要是西方音乐) 和日本本土音乐之间的争论。 和我们的第一首单曲『LADY MADONNA』一样,这首歌同样具有将曲调流行化的基本概念。 我们想要向世人证明,我们能以原声吉他为主要乐器,传达出 DELICO 的精神所在,而 Bob Dylan 已经向我们证明过这点。

Nostalgic '69:
我们想要透过这首歌曲描绘一种「不负责任的合奏」,以传达出 60 年代晚期的音乐趋势 -「简单狂放」。 合奏是活的,编好的曲子则是死的,而我们喜欢这两者之间的差距。 我们认为这首歌可说是 DELICO 版本的摇滚乐曲。

Futaridake No Groove:
这首歌的概念是「8 Beat 律动」,符合 Club Music 的感觉。 我们想要单纯使用乐器和人声来营造出一种整体感。 . 我们希望其他人能在这首歌中感受到典型的 DELICO 律动。

专辑曲目:

01. Your Song
02. Nostalgic '69
03. Futaridake No Groove

user posted image

专辑名称:Last Smile
发行时间:2000-11-01
专辑备注:第3张单曲

专辑简介:

这是继『LADY MADONNA』和『Your Song』之后的第三张 maxi-single。 这首歌具有 DELICO 独特的律动型态以及深刻动人的歌词,製造出 DELICO 特有的节奏及文字感动。

Last Smile:
我们喜欢这首歌的原因在於,这首歌同时具有重覆性的机械律动,以及乡村民谣的风格;而这两者之间的独特对比则产生了一种伤感的氛围。 这种音乐类型的概念源自於 Neil Young 和 Beck 的粗獷乐风, 同时具有自然和随兴的感觉。 由於受到 Eagles 和 TLC 的感动,我们想将这首歌的重点放在人声和律动感的结合上。

Moonly(单曲版):
这首歌的录製工作对我们构成一大挑战。 录製一首标準的 R&R 单曲一直是我们的长期目标之一,而我们终於藉由这首歌达成这个目标。这为我们的未来奠定了无比的信心。

Wasting:
由於受到 John Lennon 的『Workingclass Hero』一曲感动,我们在录製这张单曲专辑时创作了这首歌。 60 年代时,原声吉他是一种能令人感动的乐器,而我们想要证明这点在今天是否仍然为真。

专辑曲目:

01. Last Smile
02. Moonly(single edit)
03. Wasting

user posted image

专辑名称:Free World
发行时间:2001-5-23
专辑备注:第4张单曲

专辑简介:

Love PSYCHEDELICO 的第四张 Maxi-Single 『Free World』。
这张新的单曲专辑以令人印象深刻的吉他乐句、英日文混用的歌词、以及 Kumi 无章法可循的唱腔,令音乐界为之撼动。 正如同它的标题一样,这些歌是在大家全然不受任何束缚的情况下创作出来的,而我们打算藉由这些歌来邀请并带领您进入一个崭新的 DELICO 世界。

专辑曲目:

01. Free World
02. amp' box
03. "0"

user posted image

专辑名称:I will be with you
发行时间:2001-11-07
专辑备注:第5张单曲

专辑简介:

LOVE PSYCHEDELICO 的第五张单曲专辑『I will be with you』是他们的颠峰之作。 这首歌曲充满了动人的歌词和旋律。 LOVE PSYCHEDELICO 在这首单曲中将融合日文歌词和西式旋律的能力发挥得淋漓尽致,而这首单曲也是最能代表 LOVE PSYCHEDELICO 特有中板乐风的一首曲子。

专辑曲目:

01. I will be with you
02. Merry X'mas

user posted image

专辑名称:Hadaka No Osama
发行时间:2002-07-24
专辑备注:第6张单曲

专辑简介:

撰文:小野田雄 (Yu Onoda)

Hadaka No Osama:
这首歌是在他们的第一支单曲之前写成的,并具有和前一支单曲相同的飘浮感和普罗意识。 这首歌最初听来像是一首再简单不过的乡村民谣,但是当完整的打击乐器 (鼓、手鼓、卡洪鼓、响鼓轮击和手鼓轮击) 加入时,精緻的节奏随即改变了整首歌的走向。 这是一首极为精緻複杂、令人百听不厌的好歌。 此外,在全曲即将告终时,每种乐器开始表现一种独特的情绪,而这样的繁複变化令人忘记了这首歌的长度超过 6 分鐘的事实。

This is a love song:
这首歌的目的是要回应 Neil&Iraiza 第二张专辑『NEW SCHOOL』中的『This is not a love song』一曲。 LOVE PSYCHEDELICO 的备援键盘/吉他手堀江博久 (Hirohisa Horie) 在本曲中担任了钢琴演奏的工作。 主唱的音调在高低之间来回摆荡,而巧妙融入的背景和声则产生了一种流行、舒服的音响效果。

GRAPEFRUITS:
吉他乐句保持在中板速度,而 Kumi 则是一再呐喊着同一句歌词。 这首歌听来虽然像是一首典型的摇滚歌曲,但它简单的结构却令它成为一首流行歌曲。这首歌的味道十分独特,因而成为 DELICO 最迷人的曲目之一。

在发行第二张专辑『LOVE PSYCHEDELICO ORCHESTRA』之后,LOVE PSYCHEDELICO 在展开全国巡迴演出期间,创造了一个只属於他们自己的音乐世界。 如同「一段旅程的结束,将是另一段旅程的起点」这句俗谚所说的一般,随着『Hadaka No Osama』这张单曲专辑的发行,LOVE PSYCHEDELICO 也即将步入一个崭新的世界。

不过,当有人发现这首歌是在他们的第一支单曲之前创作的,而且已经在他们历来的演唱会中表演过许多次时,总令人不免质疑这首歌何以能被称为「崭新的世界」。 然而,值得一提的是,在 LOVE PSYCHEDELICO 成为摇滚巨星之前,他们就在这首歌中对摇滚乐的世界表达了嚮往和讥讽之情。如此看来,他们似乎早在自己有机会能够亲身经历之前,就已经预言了自己日后即将面临的情况。 换句话说,我相信『Hadaka No Osama』能以单曲专辑的形式发行,的确是带着一些宿命的味道。
歌词的定义虽然不甚明确,但这首歌一开始的原声吉他和打击乐,令人不免想起 60 年代的民歌和 Beat Culture (一种青少年文化,以 Jack Kerouac 的小说《On the Road》为代表)。 我们可以在这首歌中体会到 DELICO 的精神,以及存在於他们世界中的同时性 (Synchronicity)。

2002 年,他们将目光放在未来。 这首歌的打击乐部份听来简单,实际上却是迭轨 5 次的成果,足以印证他们在当代的杰出天赋,虽然这点常被评定为「高度技术性」。 其餘的 2 首歌是在 [circle of mind] 巡迴演唱会结束之后写成的,在创作的手法上相当令人耳目一新。 其中一首『This is a love song』的灵感源自於 Neil&Iraiza 的『This is not a love song』,并努力试图掌握英式流行歌的趋势。 与 Yoko Ono 其中一本着作同名的『Grapefruits』则具有令人印象深刻的歌词,以及主唱既非呐喊、亦非饶舌的有趣唱腔。 由这首歌的充分原创性看来,LOVE PSYCHEDELICO 似乎已为自己的音乐闢出一条蹊径。 另外值得一提的是,LOVE PSYHCEDELICO 创造了一个名为「Rosalita」的角色,而这个角色则协助他们开创了一个崭新的歌词世界。 我相信这样的转变将会对他们日后的作品造成重大影响;其影响之深远,就算说「LOVE PSYCHEDELICO 就等同於 GRAPEFRUITS」也不为过。 也就是说,他们的某些特质,与 Yoko Ono 的《Grapefruits》一书所象徵的世界是相通的。 由此看来,我相信这三首歌具有非凡的意义。 他们的首张单曲专辑『LADY MADONNA/Yuutsu Naru Spider』所採用的封面图案是一颗苹果,而「苹果」正是 The Beatles 自创唱片厂牌的名称。 因此,从苹果换成葡萄柚之后,我们或许可以这么说:他们为这个世界带来了全新的音乐魔力果实。

专辑曲目:

01. Hadaka No Osama
02. This is a love song
03. GRAPEFRUITS

user posted image

专辑名称:I am waiting for you
发行时间:2003-01-22
专辑备注:第7张单曲

专辑简介:

撰文:巿川哲史 (Tetsushi Ichikawa)

初次聆听 LOVE PSYCHEDELICO 的第七张单曲专辑时,我以为自己听到的音乐十分耳熟。 这些歌一听就知道是 LOVE PSYCHEDELICO 的新歌。 在每首新歌中都找得到令人无比熟悉的 DELICO 式歌词及特质;与初次聆听他们的音乐相较,这样的熟悉感令我们得以产生更多感受。 我们并未感受到任何震慑或惊讶,而只是在这样的熟悉感中找到了无比的慰藉。

LOVE PSYCHEDELICO 在每首歌中投注了如此多的心力,以致於他们似乎已将自己全然掏空。 商业宣传活动从来不在他们考虑的范围之内,而这样的态度让他们得以创作出能够代表他们自己的作品。 他们再次向世人示范了何谓美好的音乐,并透过『THE GREATEST HITS』这张精选辑表达了他们对音乐的崇高敬意 - 因为音乐是他们存活的惟一凭藉。 在『LOVE PSYCHEDELIC ORCHESTRA』中,他们大胆质疑自己是否并非活在最理想的世代。 这两张专辑的乐风迥然不同,而在发行这两张专辑之后 (这时 Naoki Sato 重新返团,而 Kumi 则已在喜马拉雅山区完成充电),他们再次开始咏唱蓝调,专注地迈向他们对未来的期望。

整张单曲专辑为一种不加修饰的民谣曲风所主导,但『I am waiting for you』一曲仍具有 LOVE PSYCHEDELICO 惯有的一切音乐元素,再加上该曲精巧的歌词,令我彷彿看到一名女子的图像,并希望自己能为该名女子所拯救。 其他曲目的即兴乐风相当令人耳目一新,特别是带有蓝调气息的『another night』一曲。 此外,Kumi 在『Happiness』一曲中不按牌理出牌的唱腔则揭示了人们对於快乐的永恒渴求。

整体而言,我相信这张单曲专辑的歌词和曲风虽然令人更觉耳熟,但也加深了他们的蓝调色彩。 这张单曲专辑收录的都是更加「能言善道」的曲目。 滚石合唱团创作的歌曲一直保有相同的乐风,却始终深受人们喜爱;或许有一天,LOVE PSYCHEDELICO 也会奠定自己的独持乐风也不一定。 「我对过去发生的一切心怀感激。」Naoki 如是说。 而我则想要在这里补上一句:DELICO 乐风发展得越成熟,Kumi 和 Naoki 的风采就越迷人,而我们就必须对音乐之神怀着更深厚的感激之情。

专辑曲目:

01. I am waiting for you
02. Happiness
03. another night

user posted image

专辑名称:My last fight
发行时间:2003-11-05
专辑备注:第8张单曲

专辑简介:

撰文:小野田雄 (Yu Onoda)

LOVE PSYCHEDELICO 究竟是什么? 对於 2003 年的 Kumi 和 Naoki 两人来说,这是一个十分重要的问题。他们在 2002 年举办了两场日本全国巡迴演出,让大家共同目睹他们正以现场乐团的形式持续成长茁壮着,而他们的乐风也在这时发生了变化。 他们似乎是想要将重心转移至现场演出上,并採取一种更直接的途径,但这样的尝试最后却无疾而终。 最后,完成初夏的三场演出之后,他们与主流音乐巿场正式决裂,为的是要回答这个问题:「LOVE PSYCHEDELICO 究竟是什么?」

因此,让我们仔细想想,LOVE PSYCHEDELICO 一直以来究竟是何种类型的团体。 他们过去发表的音乐属於摇滚乐团类型,然而他们并不是乐团,而是二重唱。 此外,就算他们走的是摇滚乐团路线,有时他们的音乐却是数位音乐,常在一个以抽象概念为基础的音轨上进行繁複的迭床架屋工作。 为了在自己的音乐中呈现这样的创意和影像,他们必须让自己的心智保持在无压力的状态,值此同时,他们对自我的认知也开始逐渐模糊。

然而,经过一再反覆的试误过程,Kumi 和 Naoki 终於在『My last fight』一曲中找到了「LOVE PSYCHEDELICO 究竟是什么」这个问题的答案。 他们成功地让自己原本的虚拟影像更加真实,并为自己的音乐注入了更多的深度、色彩以及独特的乐句组合。 他们的音乐足以和毕卡索或 Jackson Pollock 的绘画相提并论。 强调旋律的乐曲轻柔地摇晃着聆听者的感受,而不断重覆的舞曲节奏则刺激着聆听者的感官和精神。 这首歌已儼然成为 LOVE PSYCHEDELICO 的全新身份表徵。 据我所知,这张单曲专辑的製作过程为他们带来了无比的乐趣,而这首歌则是在相当放鬆、毫无压力的情况下製作完成的。 最重要的是,这三首歌将在您的心中縈绕不已,并让您得以窥见 LOVE PSYCHEDELICO 的灵魂深处。

专辑曲目:

01. My last fight
02. fleeing star
03. Dreamer

user posted image

专辑名称:fantastic world
发行时间:2004-12-08
专辑备注:第9张单曲

专辑简介:

撰文:小野田雄 (Yu Onoda)

这张单曲专辑的发行时间距离 LOVE PSYCHEDELICO 发行第二张专辑『LOVE PSYCHEDELIC ORCHESTRA』已有两年又两个月之久。 这时他们重新返回原点,并终於推出第三张专辑『LOVE PSYCHEDELICO III』。 我们在 2004 年年初访问 Kumi 和 Naoki 时,他们显得十分积极且充满能量,因此我当时就有预感,他们将在 2004 年有一番特别的作为。

他们在 2 月份参与了 [Zoku Naniwa Sullivan Show] 的演出,并於 7 月份与新成立的伴奏乐团参加了在横滨和大阪举办的 [Rock Odyssey] 演出。新成立的伴奏乐团成员包括来自 DR. STRANGE LOVE 的 Susumu Osada 和 Takamune Negishi、来自 CORNELIUS 的鼓手 Yuko Araki,以及键盘手崛江博久。 同时,他们也在和另一个伴奏乐团 (与来自 GREAT 3 的高桑圭/白根贤一、来自 SKETCH SHOW 的权藤知彦、以及键盘手崛江博久共同组成) 为即将於 10 月份展开的巡迴演出进行綵排。 虽然他们如此积极,新专辑和单曲的录製情况却不尽如人意。 他们一心想要创作出一种只属於自己的音乐,却从未订下发行日期,因为他们想要在一个能让他们能对成品感到完全满意的环境中进行录製工作。 因此,在没有预订发行日期的情况下,新单曲的发行也就显得遥遥无期 - 一切全取决於录音室内的录製情况。 然而,他们终究还是完成了这首创作,这也是为什么现在我们手中可以握有这张最新单曲专辑 - 『fantastic world』。 他们大约花了 1 个月的时间写出主打歌,并趁着演出和綵排的空档完成录製工作。 他们似乎是在极为放鬆的情况下完成了这首歌的录製工作,并将他们对音乐的热情化为现实。 我相信他们是在尝试结合第二张专辑中的「讯息」以及第三张专辑中富有创意的流行乐句,以找出一种能够传达「爱」的方式。 苦涩的真实感以及如梦似幻的甜美感受共存於这首单曲中,传达出一种更宽广的人类大爱;而『romance』一曲则较偏重个人的爱情。 将这两种元素巧妙地结合在一起,并完成这两首歌的创作,对他们而言是一大挑战 - 虽然这是他们第一次在如此紧凑的时程下完成的作品。 主打歌具有 LOVE PSYCHEDELICO 惯有的细腻和华丽感。 开头的吉他乐句停止之后,Kumi 的歌声便和原声吉他一同响起。 他们的音乐所唤起的情感带有丰富的色彩和温度变化。 另一首曲式简单的歌则是在描述一段悲伤的爱情故事。 每个人对每首歌的印象或有不同,以上只是我个人的观点。 这是 LOVE PSYCHEDELICO 一张和谐、平衡的作品。我不确定哥伦布是否真的说过「地球是圆的」这句话,但这张单曲专辑倒真的是圆的,而它那一再循环的流行乐风确实能够放诸四海皆準。

专辑曲目:

01. fantastic world
02. romance

user posted image

专辑名称:Right now
发行时间:2005-06-16
专辑备注:第10张单曲

专辑简介:

Text by Koh Imazu

“Right now!”, is what it means. I guess I heard they said `It’s the time to express love more openly and straightforward` when the last single “fantastic world” was released. Thinking of that phrase, I started to listen to the sound of their new single. Here comes sequence of synthesizer, then sound of drum machine and synthe- bass. It was REALLY techno. Am I listening to a right CD? When I just started to wonder, I heard Kumi’s voice. Naoki’s guitar sound is along with the repeated part, and yes, I finally realized this is the DELICO world. Well, whatta’ hell!

The song got back to synthe-world. And I calmed down and could start seeing lots sides of this song. For instance, it’s about the beat. You could say you’d be surprised on the play, but it’s a quite groove if you’d lay down on it. And it coincides with Kumi’s vocal well. Like “LADY MADONNA/Yuutsunaru Spider” and “Your Song”, they have a few songs that begin with synthe-drums, and it seems their skills cultivated on these songs are surfaced. Just like “Right now!” It could be a club music with the quality but they haven’t lost their original style and its groove. From the fact, you could describe them as the best mixer for DELICO is themselves.

And of course the lyrics. The part “What is `right now`?” is the key, and these phrases “Don't hide your way” and “running to the another world” are repeated. They also tell us that there is an another world inside of us putting the words “right now” everywhere. Don't hide your way and running to the another world, right now, this single begins with the song has also “Brown-eyed Joe”, a cool band sound music, and raps up with their gospel song “Everyone, everyone” which is also included in the album “Early Times”

From “Right now” to “Everyone, everyone”. This is calling. They are showing us their another world creating it with their new sound making style, then stimulate the listeners. There are their persuasions from the other dimension, not some empty messages, and you could feel the strength and growth of DELICO now.

专辑曲目:

01. Right now
02. Brown-eyed Joe
03. Everyone, everyone

user posted image

专辑名称:Aha !(All We Want)
发行时间:2006-06-28
专辑备注:第11张单曲

专辑简介:

撰文:馒头

英伦风格的摇滚团体Love Psychedelico(爱的魔幻)全新单曲出炉。相隔近一年的三首英文单曲都是非常棒的作品,『FOMA P902iS』的广告歌曲Aha ! (All We Want) 非常的cool!~吉他配合女主音慵懒的声音,好像Folk Hit。

<Help>是我最喜欢的一首歌啦~节奏轻快,尾音拖的非常有个性,是NHK节目『英语でしゃべらナイト』的主题歌。相比较早期的作品,LP似乎摆脱了刻意制造迷幻的意境,而是向Folk靠拢,喜欢这样的风格,非常不错哦!

专辑曲目:

01. Aha!(All We Want)
02. Together
03. HELP!

ALBUM

user posted image

专辑名称:The Greatest Hits
发行时间:2001-01-11
专辑备注:第1张专辑

专辑简介:

2001年1月11日---终于在千呼万唤之下发行了首张专辑「THE GREATEST HITS / 超级精选」,首周即登上Oricon排行榜的冠军宝座,成为日本流行音乐史上第三组没有任何Top 10的单曲但却能在专辑发行时立即勇夺专辑排行冠军的歌手(另外2组分别为"最爱蓝"以及"Tina")。也因为连续两周的冠军让LOVE PSYCHEDELICO的销售量轻松地就突破了百万大关,成为21世纪日本第一组百万歌手。

《THE GREATEST HITS》收录了他们多年来转战东京大小表演场地的一些优秀乐曲,这些带着浓浓复古味道的乡村音乐,将所有聆听的人抽离在面对新世纪的不安与惶恐之外,重新回到属于70年代舒缓、恬适又略带波动的音乐氛围,非常值得一听。

由于乐队塑造的风格特殊,所以尽管是唱的是英文歌,但爱的魔幻(Love Psychedelico)却是现在日本最炙手可热的畅销乐队之一。女主唱因幼小长年居住在国外,因此没有一般日本歌手极严重的日式英语口音,光这点就让他们唱起英文歌比其它乐队好听得多。聆听Love Psychedelico,几乎是无法不被女主唱KUMI的声音吸引,她的声音没有一般日本女声的尖细,唱腔完全向英国靠拢,加上完全的英文发音,大幅跳脱了歌曲中的东洋味。音乐风格走英美硬式摇滚的口味,在旋律及吉他节奏的搭配均听得出两位团员深受时下英美乐队影响。

检视Love Psychedelico的歌词和音乐创作,如果要赋予他们太多的音乐时代感,似乎是太过沉重的要求。尽管只是用着简单的歌词,适度地传达着一点点压抑、一点点放肆的心情反应,能够藉由复古曲风,加进纯熟多彩的音乐元素,表现出如海滩风味、公路式轻松快意的单纯,未尝也不是一件好事。

专辑曲目:

01. LADY MADONNA/Yuutsu Naru Spider
02. Your Song
03. Last Smile(加长混音版)
04. I mean love me
05. Moonly
06. Are you still dreaming ever-Free?
07. I miss you
08. Nostalgic' 69
09. These days
10. LOW(ver.1.1)
11. A DAY FOR YOU

user posted image

专辑名称:LOVE PSYCHEDELICO.Orchestra
发行时间:2002-01-09
专辑备注:第2张专辑

专辑简介:

音乐是什么?

这是一个十分简单、却难以回答的问题。 然而,或许您可以在 LOVE PSYCHEDELICO 专辑中窥见一些答案。 摇滚、蓝调、乡村、电子、原音、数位、类比... 音乐的表现方式虽然令人目不瑕给, 其根基却是不变的。 音乐似乎具有自己独特的真理,而我们似乎可以透过这样的真理窥见人类的本质。 这张专辑是 LOVE PSYCHEDELICO 向世人发出的第一道讯息,并为 21 世纪的音乐掀开了崭新的一页 - 不受任何时间、世代和性别的限制。

专辑曲目:

01. Standing Bird
02. Free World
03. unchained
04. green
05. dry town
06. I will be with you
07. days of days over you
08. You ate it
09. waltz
10. life goes on
11. "0"
12. California

user posted image

专辑名称:Love Psychedelico III
发行时间:2004-02-25
专辑备注:第3张专辑

专辑简介:

撰文:长泽智典 (Tomonori Nagasawa)

对 LOVE PSYCHEDELICO 而言,在他们的首支单曲『LADY MADONNA/Yuutsu Na Spider』一炮而红之后,他们就像是搭上了一班高速列车一样。只是,他们完全不知道这班列车会在哪些站停靠,甚至不知道终点站为何。 在推出第二张专辑『LOVE PSYCHEDELICO ORCHESTRA』之后,LOVE PSYCHEDELICO 总算可以透过这班列车的窗户向外望去,并窥见窗外不断飞逝的风景。 自从推出第一张专辑『THE GREATEST HITS』之后,他们在接下来的 2 年之内继续累积想像力和生命体验,并全数注入下一张专辑中,为这场迷人的旅程再添一笔惊嘆号。

LOVE PSYCHEDELICO 在 2 月 25 日推出他们的第三张专辑『LOVE PSYCHEDELICO III』,从此彻底挣脱了原本束缚他们的重重锁链。 在推出上一张专辑之后的 2 年又 2 个月期间,他们和主流音乐划清界线,全力投入现场演出,并发行了三张单曲专辑:『Hadaka no Osama』、『I am waiting for you』和『My last fight』。 在这场全新的旅程中,已决定和商业主流音乐彻底决裂的 LOVE PSYCHEDELICO 需要一些时间舖设新的轨道,以创作出彻底摆脱伪摇滚气息的歌曲,并进入一个全然幻想的世界。

直到现在,我都记得自己初次聆听这些新歌时感受到的兴奋和震撼。 这些新歌在我耳中重现了 60、70 年代的英式摇滚风情,并开始挥别他们过去几张单曲专辑的原音氛围。

在这张新专辑中,每首曲目的音响效果都相当简单,但在旋律、演唱和表现手法方面则已臻於专业水準。 此外,这张专辑的曲风变化多端;每首曲子都像是一条潺潺流动的小溪,最后共同匯聚成一条宽广而澎湃的大河。 在受到他们如此迷人的音乐感动之后,我由衷希望这条大河能将我带往一个崭新的 LOVE PSYCHEDELICO 世界。

专辑曲目:

01. Everybody needs somebody
02. Mind across the universe
03. My last fight
04. all over love
05. Happiness
06. I am waiting for you
07. fleeing star
08. Hadaka no Osama
09. Silver dust lane
10. Hello
11. Neverland
12. III
13. GRAPEFRUITS

user posted image

专辑名称:Early Times
发行时间:2005-02-09
专辑备注:第4张专辑

专辑简介:

"LOVE PSYCHEDELICO"是由两位日本青山大学毕业的学生组成,分别是KUMI和NAOKI,他们两人在学校的音乐社团认识,进而组成乐队。"没有一个像“爱的魔幻”这么诡异的乐团了,发行的第一张专辑就叫“THE GREATEST HITS”,现在他们出精选辑,就称为“Early Times”。从校园唱到东京都所有LIVE HOUSE,作风低调,乐风独树一格,2000年一出道立即勇夺日本金唱片“最佳新进艺人”与“年度最佳摇滚专辑”大奖的“爱的魔幻”,由主唱KUMI及NAOKI组成,以浓厚的复古摇滚口味,搭配慵懒的乐音,日、英水乳交融的流畅歌词,形成自成一格的独特舒缓氛围,他们的音乐就如同团名一样,是种迷人的“爱的魔幻”,听了就会上瘾。

这张“Early Times”是由KUMI及NAOKI从九张单曲、三张专辑,总共近500万张惊人销售中自选14首经典代表歌,包括在台湾华西街拍摄音乐录影带的出道单曲“LADY MADONNA~忧郁的蜘蛛~”,并加收“Everyone,everyone”、“Rosy”等两首全新作品,所完成的期间限定最强企划精选辑。

专辑曲目:

01. Your Song
02. Free World
03. Everybody needs somebody
04. fantastic world
05. LADY MADONNA~Yuutsu Naru Spider~
06. "O"
07. Life goes on
08. My last fight
09. Standing bird
10. Silver dust lane
11. Last Smile
12. Green
13. neverland
14.A DAY FOR YOU
15.Everyone, everyone
16.Rosy

user posted image

专辑名称:Live Psychedelico
发行时间:2006-03-22
专辑备注:第1张live专辑

专辑简介:

2005年5月27日,Love Psychedelico在日本的武道馆举行了演唱会「IN CONCERT AT BUDOKAN」。《LIVE PSYCHEDELICO》CD便精选了LOVE PSYCHEDELICO于演唱会中,充满节奏感和动感的13首歌曲,让你再一次重温当晚的精彩演出。

专辑曲目:

01. Mind across the universe
02. Everybody needs somebody
03. Free World
04. Last Smile
05. Wasting
06. life goes on
07. These days
08. My last fight
09. Your Song
10. “O”
11. neverland
12. LADY MADONNA~忧鬱なるスパイダー~
13. A DAY FOR YOU

DVD

user posted image

专辑名称:IN CONCERT AT BUDOKAN
发行时间:2005-12-07
专辑备注:第1张tour

专辑曲目:

01. Opening
02. Everybody needs somebody
03. Free World
04. Wasting
05. Standing Bird
06. Last Smile
07. Your Song
08. neverland
09. Mind across the universe
10. fleeing star
11. LADY MADONNA~忧鬱なるスパイダー~
12. fantastic world
13. Everyone, everyone
● Equipment
● Dressing room


posted @ 2007-06-26 15:57 黑咖啡 阅读(871) | 评论 (1)编辑 收藏
评估博客的价值,好玩,可信度未验证 http://web.anyp.cn/value/Default.aspx
posted @ 2007-06-13 16:49 黑咖啡 阅读(988) | 评论 (8)编辑 收藏

Some beauty memory -- this song take me to long long ago -- Yesterday Once More

 

歌手:Carpenter     
When I was young I'd listen to the radio
Waiting for my favorite songs
When they played I'd sing along,
It make me smile.

Those were such happy times and not so long ago
How I wondered where they'd gone.
But they're back again just like a long lost friend
All the songs I love so well.
Every shalala every wo'wo
still shines.

Every shing-a-ling-a-ling that they're starting to sing
so fine

When they get to the part
where he's breaking her heart
It can really make me cry
just like before.
It's yesterday once more.
(Shoobie do lang lang)
Looking bak on how it was in years gone by
And the good times that had
makes today seem rather sad,
So much has changed.

It was songs of love that I would sing to them
And I'd memorise each word.
Those old melodies still sound so good to me
As they melt the years away
Every shalala every wo'wo still shines

Every shing-a-ling-a-ling that they're startingTo sing
so fine
All my best memorise come back clearly to me
Some can even make me cry
just like before.
It's yesterday once more.
(Shoobie do lang lang)
Every shalala every wo'wo still shines.
Every shing-a-ling-a-ling that they're starting to sing
so fine
Every shalala every wo'wo still shines.
Every shing-a-ling-a-ling that they're starting to sing
so fine
posted @ 2007-06-08 11:21 黑咖啡 阅读(610) | 评论 (0)编辑 收藏
局域网内的管理软件,今天上网找了下,发现还是中国人写的比较多,而且功能也越来越强大。
原理都是安装winpcap,使网卡工作在混杂模式下,然后进行相应的操作。
说不定什么时候会用到,把看到的介绍都转过来吧。都没有测试。
1. AnyView(网络警)网络监控系统

软件简介:
是一款企业级的网络监控软件。一机安装即可监控、记录、控制局域网内其他计算机的上网行为。用于防止单位重要资料机密文件等的泄密;监督审查限制网络使用行为;备份重要网络资源文件。主要功能有:
一、网络行为和内容监视:
包括:网站浏览监视、邮件收发监视、聊天行为监视、游戏行为监视、FTP监视、流量监视、自定义监视;
(1)AnyView能实时记录局域网内所有用户浏览过的网页(包括网页标题、网页内容、所属网站、网页大小等),并以网页快照的形式供管理者查看;
(2)AnyView能实时记录局域网内所有收发的邮件(包括POP3/SMTP协议和HTTP协议的邮件),同时检测并记录其所用的IP地址、收发时间、标题、收件人/发件人、附件、内容及邮件大小等信息。
(3)AnyView能实时监控局域网用户对各类聊天工具的使用情况,能检查出在线用户所使用的聊天工具、上下线时间等信息,并保存。
(4)AnyView能实时记录网内所有用户通过FTP协议上传下载的文件(服务地址以及内容)
(5)AnyView能监视所有网络游戏行为,并可以自己定义需要监视的网络游戏;
(6)AnyView能监视用户即时流量,历史流量分析和流量排行
(7)AnyView能自定义被监视的网络应用,比如BT、股票软件、FLASHGET等
二、通用的、全系列、整网络、自定义、端口级的上网行为控制
包括:网站浏览控制、邮件收发控制、聊天行为控制、游戏行为控制、自定义行为控制、端口级控制;所有的控制都可针对3层对象(一个网络、一个分组、一个电脑);都可针对指定的时段;都可针对指定的协议TCP/UDP;可通用的自由定义;全系列端口级别管理;
(1)可禁止浏览所有网站、只允许浏览指定网站(白名单)、禁止浏览指定网站(黑名单)
(2)可禁止收发邮件、只允许收发指定邮局(白名单)、禁止手法指定邮局(黑名单)
(3)可禁止所有的聊天行为(比如QQ、MSN、ICQ、YAHOO、UC、POPO、E话通等),并可以自行增加聊天行为控制列表;
(4)可禁止所有的网络游戏(比如联众、中国游戏中心等等);并可以自行增加网络游戏行为控制列表;
(5)可禁止自定义控制列表,比如股票软件、BT软件等;并发起阻断;
(6)可进行严格的UDP/TCP整个网络段的全系列端口级别的控制,并支持黑名单和白名单功能;
三、内容过滤功能
包括:对不需要的监视的象和行为进行过滤,忽略监视;可针对3种对象操作(一个网络、一个分组、一个电脑);
(1)全部监视、不监视、只监视部分应用
(2)网站过滤白名单和黑名单功能
四、IP和MAC绑定
包括:禁止MAC地址修改、禁止所有IP地址修改、禁止部分IP地址修改;有效防止非法用户访问网络资源;
五、用户管理
包括:分组增加删除、用户名修改、锁定分组刷新、监视对象设置
(1)自动搜索局域网内的电脑,并自动解析出机器名,默认以MAC地址区分用户
(2)允许建立分组并允许刷新分组;方便管理以及权限控制;
(3)允许用户名修改,方便识别和管理,分组权限移动后自然继承新分组权限;
六、其他功能。
(1)采用C/S管理模式,支持分级权限管理。AnyView支持服务器和客户端程序分开,支持多客户连接,允许对不同控制台赋予不同的监控权限。如果是有固定外部IP,可以远程管理和查看;
(2)跨平台监控;被监控电脑也可以是Unix 、Linux 等其他操作系统;
(3)不需要在被监视和管理电脑上安装任何软件,一机运行,整网管理;
(4)支持拦截监视内容和配置文件的的备份、恢复;支持无限多个IP网段监视
(5)采用连接密码管理禁止非法用户连接,采用控制台密码管理禁止非法用户查看;
(6)引擎作为系统服务运行在后台(如IIS一样),不需要登陆和用户干预就可监控;
(7)脱机浏览监视数据功能,附带自动检测连接设备是否HUB的功能;
(8)正式版安装以后,同一网段内,其他机器上的试用版不能正常运行。

2、局域网助手

LanHelper(中文名称“局域网助手”)是Windows平台上强大的局域网管理、扫描、监视工具。LanHelper独特的强力网络扫描引擎可以扫描到您所需要的信息,使用可扩展和开放的XML管理扫描数据,具有远程网络唤醒、远程关机、远程重启、远程执行、发送消息等功能,能够5。同时不需要服务端软件,节省您的时间和金钱,使您的网络管理更加轻松和安全。
LanHelper能扫描到远程计算机非常丰富的各种信息,包括了名称(NetBIOS名或者DNS名)、IP地址、MAC地址、工作组名、用户名称、操作系统类型、服务器类型、备注、共享文件夹、隐藏共享、共享打印机、共享文件夹的属性(是否可写、只读或者密码保护等)、共享备注等,而且由于使用了多线程,每秒钟最快可以扫描上百台计算机。扫描引擎集成的扫描共享文件夹是否可写、只读、密码保护等属性为LanHelper独有的特性,其中扫描可写共享对于预防和协助清除像尼姆达这样难于根除的蠕虫病毒非常有用。
不需要额外安装任何服务端程序,使用LanHelper可以大大简化您的网络管理。“远程唤醒”可以给位于局域网、广域网或者因特网上的计算机发送唤醒命令而使其自动加电启动,可以定时。“远程关机”让系统管理员能够通过网络关闭或者重新启动远程计算机,可以定时。“远程执行”使您可以在远程机器统上执行命令,运行程序或者打开文件,比如使远程机器启动信使服务,或者只是播放一首MP3歌曲等,执行专门设计的“LanHelper集成命令”则可以轻松让远程机器完成关机、锁定、截取屏幕、获取系统信息、窗口管理、进程管理等等各种操作。“刷新状态” 可用于定时监视网络,查看计算机是否在线,以及检测计算机名或者IP地址是否有改动,当指定的事件发生时能够以电子邮件等方式通知管理员。“发送消息”功能可以用非常灵活的方式给用户、计算机、工作组或者整个局域网发送消息。
扫描数据的保存使用XML,在LanHelper后续版本甚至以前版本中都可以使用。即使没有LanHelper,保存的XML文件可以使用IE 浏览器或者其他像MS OFFICE 2002这样支持XML的软件打开。当使用浏览器打开XML文件时,使用XSL编写的样式表文件LHstyle.xsl会将其转换为网页表格,非常便于查看。

3、Easy网管

全面管理局域网内计算机:1.Internet流量监测;2.Internet带宽监测与控制;3.Internet流量日志,实时记录局域网内计算机的Internet流量、流速和带宽占用情况;4.限制可以上网计算机;5.限制访问网站;6.限制上网时间,为一个星期内每天规定不同的上网时间限制;7.监视网内计算机收发邮件,保留邮件摘要副本;8.规定哪些计算机可以使用QQ、在什么时间可以使用QQ;9.控制使用各种聊天软件,包括QQ、MSN Messenger、YAHOO通等;10.远程"任务管理器",实时监测其他计算机运行程序,杀死进程;11.锁其他计算机键盘、鼠标和禁止屏幕保护;12.遥控其他Log Off;13.遥控其他计算机关闭电源Power Off;14.遥控其他计算机重新启动Reboot;15.远程截取工作站屏幕;16.控制运行“联众”等各种网络游戏和各种单机游戏程序;17.控制和管理局域网内计算机上运行程序;18.自动扫描局域网内IP节点,包括网络、工作组、网络打印机、计算机,自动获得IP地址、MAC地址、机器名称、共享目录;19.适合通过代理服务器、路由器、专线等各种方式接入Internet环境;20.IP地址与MAC地址进行帮定,限制私自修改IP地址与MAC地址;21.用户分组管理,每个用户组可以单独分配控制权限;22.自定义网络阻断信息。

4、局域网查看工具(LanSee)

采用多线程技术,搜索速度很快。它将局域网上比较实用的功能完美地融合在一起,比如搜索计算机(包括计算机名,IP地址,MAC地址,所在工作组,用户),搜索共享资源,搜索共享文件,多线程复制文件(支持断点传输),发短消息,高速端口扫描,捕获指定计算机上的数据包,查看本地计算机上活动的端口,远程重启/关闭计算机等,功能十分强大。该软件是一款绿色软件,解压后直接打开运行,无需安装。
posted @ 2007-06-07 13:50 黑咖啡 阅读(1640) | 评论 (0)编辑 收藏
昨天无意在CCTV-音乐听到了这个牛人的演唱会,感觉不错。

 

艺人名称:Elton John 艾尔顿•约翰

专辑名称:Rocket man-The Definitive Hits 世纪琴人-生日精选

上市时间:2007年6月

厂牌:Mercury

主打推荐:

•Candle In The Wind

•Your Song

¤ 世纪琴人 艾尔顿•约翰,2007年3月 六十周岁生日快乐

¤ 40年深琴歌声 陪伴2亿颗心

¤ 黛妃经典、狮子王传奇、滚石杂志百大单曲、35张金唱片25张白金唱片共同祝贺

艺人介绍

1947年3月25日出生于英国的Elton John/艾尔顿•约翰,本名为Reginald Kenneth Dwight。4岁的时候就展现了钢琴方面的过人天赋,11岁时他获得钢琴类的奖学金而进入伦敦皇家音乐学院就读;6年之后,他离开学校开始投入演艺工作。白天,他在一家音乐出版公司打工,一到夜晚,他的生活就更加忙碌精彩:他参与了乐团Bluesology的表演,同时也在伦敦的饭店酒吧里自弹自唱。Bluesology后来还为许多造访英国的大牌美国灵魂歌手如Major Lance、Patti Labelle、the Blue Belles担任伴奏。1966年,曾经提拔过Rod Stewart的英国R&B歌手Long John Baldry更雇用了Bluesology作为自己的专属乐团。

Elton John和他长期的创作搭档Bernie Taupin的合作缘起,是和一则音乐杂志上的Audition广告开始…Elton John看到了这则广告,带着自己平常在饭店表演的曲目参加了Liberty唱片公司的新人选拔活动,评审们十分欣赏他的歌声与琴艺,但是对于他演唱的歌曲却大有意見,因此不幸落选(他还被King Crimson和Gentle Giant唱片公司拒绝过);其中一位评审把同样也参与那次选拔赛的作词家Bernie Taupin(1950年出生于英国Sleaford)的一首作品给了Elton John。6个月后,两个人见了面,开始搭档创作。而结合自Bluesology团员中的Long John与萨克斯风手Elton Dean名字的Elton John开始成为他进军流行乐坛的艺名。John和Taupin的创作后来被知名音乐出版公司Dick James相中,以每人每周10英镑的价格雇用他们为公司专属的词曲创作者。1969年Elton John发行了首张个人专辑《Empty Sky》, 开始创造他不朽的传奇,他一首接一首脍炙人口的经典情歌,凸现了他不凡的音乐创作才能、展露了他诚恳精湛的歌声魅力、更记录了他璀璨辉煌的艺术生涯。深刻隽永的歌词、流畅悦耳的旋律, Elton John动人的情歌实在太多, 30多年的光阴,让一个襁褓中的婴儿长大成人,求学 、就业、恋爱、失恋,甚至结婚生子。对于执著于好音乐的Elton John,他则选择将人生中最黄金的阶段奉献给乐坛,创作出一首首久经传唱的好歌…

空前绝后的超強个人音乐纪录

根据Billboard统计,Elton John从《Honky Chateau》到《Rock Of The Westies》,连续7张专辑拿下排行冠军,创下单一艺人最高纪录。

专辑《Captain Fantastic And The Brown Dirt Cowboy》于1975年6月7日首周入榜就空降排行榜第一,这是Billboard排行史上第一人,紧接着《Rock Of The Westies》也重复这项光荣纪录。

为悼念英国王妃黛安娜而第三度发行的《Candle In The Wind》1997全球总销售突破3300万张,是史上最畅销、同时也是销售速度最快的单曲。

全美唱片销售超过6千万张,为“全美最畅销的摇滚艺人”

1970~1999年,创下连续30年每年都有单曲打进Billboard流行单曲榜Top40的惊人纪录

Elton John葛莱美奖得奖纪录

第29届 最佳流行合唱,得奖作品“That’s What Friends Are For”

第34届最佳编曲,得奖作品“Basque”

第37届 最佳流行男歌手,得奖作品“Can You Feel The Love Tonight”

第40届 最佳流行男歌手,得奖作品“Candle In The Wind”

第42届Grammy Legend Award传奇贡献奖

第43届 最佳音乐剧专辑,得奖作品《Elton John And Tim Rice’s Aida》

专辑介绍

吉他主宰摇滚乐坛的1970年代,艾尔顿•约翰以钢琴创作的流行音乐改变了这个潮流,写下了钢琴唱作的传奇。

在驰骋近半世纪的乐坛里程中,艾尔顿•约翰不断开创惊人纪录:超过2亿张的唱片销售,坐拥6座葛莱美奖(包括2000年葛莱美传奇奖)、奥斯卡、金球奖、东尼奖、全美音乐奖与全英音乐奖杰出贡献奖,入列摇滚名人堂,荣膺大英帝国颁赠司令官荣誉勋章,英国女皇册封为爵士。从披头四约翰伦农到当代都会灵魂女声艾莉西亚凯斯,艾尔顿强的琴音传奇源远流长,不断启发每个世代的音乐唱作者。舞台下的艾尔顿强更热心公益,在1992年创立了「艾尔顿强艾滋病慈善基金会E.J.A.F.」,至今已提供超过1亿美元的救助基金。

艾尔顿•约翰曾说过:「最让表演者为难的就是要在光彩夺目的舞台人生与自己生活中找到一个平衡点。」半世纪过去,艾尔顿•约翰做到了!音乐舞台上的他以脍炙人口的经典名曲触动无数乐迷的生活灵感与激情,人生舞台上的他以永不妥协的精神努力活出自己。2007年将在纽约麦迪逊花园广场大开生日演唱派对的他,特以精选大碟【世纪琴人-生日精选】庆祝自己的60岁生日,用音乐回顾精彩人生。

珍藏艾尔顿•约翰音乐旅程中每个重要时刻的代表作,【世纪琴人-生日精选】收录了18首排行名曲,“Your Song”、“Candle In The Wind” 、 “Sorry Seems To Be The Hardest Word”等5首名曲及2004-2006年间于拉斯韦加斯著名的「Caesar's Palace」所举行的「The Red Piano演唱会」中演唱“Bennie And The Jets”、“Rocket Man”等5首歌曲

posted @ 2007-06-01 10:47 黑咖啡 阅读(691) | 评论 (0)编辑 收藏

Annotation
Hibernate Annotation
Json

posted @ 2007-05-28 17:07 黑咖啡 阅读(346) | 评论 (0)编辑 收藏
Form developerworks china

http://www.ibm.com/developerworks/cn/java/j-javares.html
posted @ 2007-05-28 14:29 黑咖啡 阅读(452) | 评论 (0)编辑 收藏

由于pragmatic programmer对中国IP的封锁,国内不能在该网站下载到随书的源代码。
今天请一位美国朋友帮忙才得到

在这里和大家分享,希望大家能够更好的学习Rails
由于blog空间不支持大文件上传,只能分做几个小文件。

rails_code.part1.rar
rails_code.part2.rar
rails_code.part3.rar


在此,感谢Andrew Fung的帮助
posted @ 2007-05-17 14:44 黑咖啡 阅读(1011) | 评论 (5)编辑 收藏
一 ntfs分区挂载

1.运行:
#yum install ntfs-3g
2.以root身份新建文件/sbin/mount.ntfs
代码:
#!/bin/sh export LANG=en_US.UTF-8 exec /sbin/mount.ntfs-3g "$@"
(此命令执行期间出现问题,但还是建了这个文件,不知道命令什么地方有问题)
然后执行
代码:
#chmod a+x /sbin/mount.ntfs
3.#尝试挂载本地ntfs,
先查看分区信息:
#/sbin/fdisk -l
查看需要挂载的ntfs分区,如:/dev/hda1
然后在/mnt目录下建立一个文件夹(winc),用来存放挂载的NTFS分区:
#mkdir /mnt/winc
然后挂载:
#mount -t ntfs-3g -o nls=utf8,umask=000 /dev/hda1 /mnt/winc
依次添加就是了.
4.自动挂载在/etc/fstab中加入类似:
/dev/hda1 /mnt/winc ntfs-3g defaults 0 0

2 fat32分区挂载
通过fdisk -l ,我们也知道了 /dev/hda2是FAT32格式的;
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)

Linux对FAT32的支持是可读可写的,所以没有必要再安装什么模块之类的;

1.我们要建一个挂载点的目录,比如是在/mnt/目录下建一个wind的目录:

[root@localhost beinan]# mkdir /mnt/wind


2.挂载 /dev/hda2 到/mnt/wind上

[root@localhost beinan]# mount -t vfat -o iocharset=utf8,umask=000 /dev/hda2 /mnt/wind/

看一下是不是挂载好了?
[root@localhost beinan]# df -lh
Filesystem 容量 已用 可用 已用% 挂载点
/dev/hda8 11G 5.9G 4.5G 57% /
/dev/shm 236M 0 236M 0% /dev/shm
/dev/hda1 5.9G 3.2G 2.7G 55% /mnt/winc
/dev/hda2 16G 8.1G 7.7G 52% /mnt/wind

看来是挂载好了;应该进去看看;
[root@localhost beinan]#cd /mnt/wind
[root@localhost beinan]#ls -lh
drwxrwxrwx 3 root root 8.0K 7月 27 11:45 抓图
drwxrwxrwx 2 root root 8.0K 8月 12 10:21 测试文件
drwxrwxrwx 4 root root 8.0K 7月 27 11:45 电脑硬件
drwxrwxrwx 5 root root 8.0K 7月 27 11:45 网际快车

中文支持没有问题;这是我机器中的;

3.如何开机自动加载FAT文件系统的分区;

我们要根据磁盘的位置,上面我们看到了是/dev/hda1,对不对?所以我在/etc/fstab文件中找加如下的一行;
/dev/hda2 /mnt/wind vfat umask=000,nls=utf8




posted @ 2007-05-15 17:28 黑咖啡 阅读(1149) | 评论 (0)编辑 收藏
作为一个linux初学者,安装自然是第一部,但是没有用过grub的人显然对这个工具一无所知,简单来说grub就是一个引导工具,引导启动硬盘不同空间上的不同系统。
安装grub其实很简单,不必过多知道grub的原理,作为工具,知道怎么用就行。
首先
下载grub工具包,包括一个boot文件夹和一个grldr文件,并将他们都解压到C盘根目录。
然后右击我的电脑>属性>高级>设置>编辑,在其中加入 c:\grldr="FC" ,同时timeout=5,这里也写个大点的数,多显几秒选择菜单,保存。
再打开解压在C盘下的\boot\grub中的menu.lst文件看
title FC6
        root (hd0,4)
        kernel /isolinux/vmlinuz
        initrd /isolinux/initrd.img
对于这个参数需要说明一下,其中的4,指的是D盘,以此,5指E盘,以此类推。4这个参数所指的盘是你放FC6安装文件的盘,我用的是CD镜像文件(共6个,据说DVD镜像需要解压到硬盘,而CD镜像不需要,没有验证DVD镜像)。注意,镜像文件要放在fat32格式下的盘里面。
isolinux这个目录是我们提取文件所放的文件夹,vmlinuz和initrd.img 两个文件一般放在第一个CD镜像里面,可以从里面提取出来。
上面的这些参数都是很重要的参数,如果没根据实际情况配正确,安装不会成功。
所以,解释一下上面的参数含义就是,所有镜像是放在D盘(由参数4决定),从镜像中提取的两个文件vmlinuz和initrd.img放在D盘下面的isolinux目录。

基本安装要点就是上面这些。

Good luck !
posted @ 2007-05-15 09:47 黑咖啡 阅读(947) | 评论 (0)编辑 收藏
很简单的2条命令,但是对于新手来说,就是不知道。

记录如下:
gem uninstall rails
gem install rails --version '=1.2.2'

会看文档才是天道。
文档的某一个地方一定有这个命令。
posted @ 2007-05-14 18:03 黑咖啡 阅读(553) | 评论 (0)编辑 收藏
今天对照着《Agile Web Development with Rails》,在cmd中输入入:...\depot> mysql depot_development <db/create.sql,提示错误:ERROR: 1045 <28000>: Access denied for user 'ODBC'@'localhost'[/email] <using password: NO>.

解决方法一:运行MySQL Server Instance Configuration Wizard,在“Please set the security options”一步,勾上“Create An Anonymous Account”

解决方法二:在命令行中,运行:...\depot> mysql -u <输入用户名,例如root> -p depot_development <db/create.sql,这时会提示你输入密码,输入即可。其中选项-p表示要求输入密码。
posted @ 2007-05-11 15:57 黑咖啡 阅读(11010) | 评论 (0)编辑 收藏
在网上找了很久,在RadRails上看了安装方法,但是最后安装失败。并且在C盘temp目录下面产生了一个4.8G的垃圾文件。不知道何故。

于是直接去sf上面下载了一个RadRails,和eclipse界面一样。

是一个单独的工具,不是作为eclipse插件运行。

相关配置可以看 RadRails配置 一文

插件应用还要继续研究研究。
posted @ 2007-05-10 14:39 黑咖啡 阅读(535) | 评论 (0)编辑 收藏

RadRails是基于eclipse平台的Ruby on Rails(ROR) IDE. 熟悉eclipse的开发人员很容易使用. 下面简单介绍一下RadRails在WindowsXP下面的安装, 配置.

1. 安装RadRails

1.1 安装JRE, 下载页面http://java.sun.com/javase/downloads/index_jdk5.jsp
1.2 安装Ruby One-Click Installer, 下载页面http://www.ruby-lang.org/en/downloads/
1.3 安装Rails, Windows CMD(开始-->运行-->cmd) 中运行"gem install rails --include-dependencies"
1.4 安装RadRails, 下载页面http://www.aptana.com, 最好下载standalone版本

2. 配置RadRails

配置RadRails应该是最容易出问题的地方,下面将分类说明Ruby,Rails,Rake的配置方法. 本指南中Ruby安装在"D:\ruby", 根据情况修改成个人的Ruby安装目录

2.1 配置Ruby

2.1.1配置Interpreters
打开"Windows-->Preferences", 选择"Ruby-->Installed Interpreters" , 点击"Add"出现的提示框中

代码
  1. //any name you like   
  2. Interpreters Name: Ruby    
  3. Location: D:\ruby\bin\ruby.exe   

 

2.1.2配置Ri/rdoc
打开"Windows-->Preferences", 选择"Ruby-->Ri/rdoc"

代码
  1. //bin目录下面的rdoc文件,没有扩展名,不是rdoc.bat   
  2. RDoc path: D:\ruby\bin\rdoc   
  3. //bin目录下面的ri文件,没有扩展名,不是ri.bat   
  4. Ri path: D:\ruby\bin\ri   

 

2.2 配置Rails和Rake
打开"Windows-->Preferences", 选择"Rails-->Configuration"

代码
  1. //bin目录下面的rails文件, 没有扩展名, 不是rails.bat   
  2. Rails Path: D:\ruby\bin\rails   
  3. //bin目录下面的rake文件, 没有扩展名, 不是rake.bat. 如果没有rake文件,运行gem update rake(安装) 或者 gem install rake(升级)    
  4. Rake Path: D:\ruby\bin\rake   
  5. //bin目录下面的mongrel_rails文件, 没有扩展名. 如果没有,运行gem install mongrel 安装   
  6. Mongrel Path: D:\ruby\bin\mongrel_rails   

 

3. 总结
安转RadRails很简单,但是配置还是很容易出问题, 特别是几个path, 除了ruby.exe有扩展名以外, 其他的都没有扩展名. 初学者很容易出问题, 再次强调一遍

posted @ 2007-05-10 14:27 黑咖啡 阅读(1010) | 评论 (0)编辑 收藏
2007年5月8日,8:36
本来要看看汽车板块,却不能用搜索功能,状况分别如下:
sohu
啥问题显而易见,sohu放假?
Tom


不知道是网站的问题还是我的OS的问题。

sina


这个本田的广告始终关闭不了,开发人员是猪吗?汗颜!!
posted @ 2007-05-08 08:46 黑咖啡 阅读(347) | 评论 (1)编辑 收藏
从一窝松狮中挑出一只最好的小仔,在我的概念里要比其他品种容易得多,因为一个六至九周的小松狮基本上就是他成年后的翻版。无论你想挑选一只宠物级犬还是赛级犬,如果有机会从几窝小仔中挑选显然会容易得多。假设我们想挑选一只未来的冠军。你自己并没有繁殖一窝小仔,所以你没有机会从他们出生时就观察他们,小松狮的体形几乎每天都有变化,主要是因为毛发的生长而非身体结构的变化,以及好的繁殖者的筛选。即使是一个微小的缺陷,在长期来看都有可能是一个灾难需要谨记的一条是,没有一只单独喂养的小仔会成长成一只伟大的犬。如果想要一只小犬更好地成长,一只跟他年龄相仿的犬的陪伴和竞争是不可或缺的。如果我想要一只真正的比赛级犬,我非常重视繁殖和血统。繁殖松狮的历史已久,足够可以使松狮的结构和体形发展得相当完美,人们可以从优良的犬舍繁殖的小犬中进行挑选,因为他们有机会和条件建立和保持品种标准。从一窝小仔中挑选一只冠军犬的机会有多少呢?我在英格兰得出了这样的结论,我发现这样的一个比例:如果父母或是祖父母均不是冠军犬,机会只有8000:1;如果祖父母中有一只冠军犬,比例大约是6000:1;如果祖父母均是冠军犬,比例大约是4000:1;如果母亲是冠军犬,比例大约是200:1;如果父亲是冠军犬,比例大约是50:1;如果父母均是冠军犬,比例大约是25:1,如此,你可以看到优秀血统繁殖的优越性。如果一只小犬没有符合我对血统的要求,无论这只小犬看起来多少有冠军相,我都不会选择他。我在谈论的是为了犬种标准的保持,繁殖最符合标准的犬,为了犬种的未来发展,而不是为了在一个比赛中获奖。当然,以上两点是可以结合在一起,繁殖最佳的小犬。即使你成功地繁殖了一只冠军犬,你并没有多大的贡献。试想一样,将你的母犬与一只冠军犬相配,得到的却是一只二流犬(第一代的优点并没有在下一代身上得到体现),那该是多少失望的事。
现在回到我们关注的要点。假设这一窝小犬是肯定健康的。观察、挑选一只看起来最有前途的,让他在桌上站直。首先检查他的牙齿和嘴。牙齿是水平、剪状咬合的,上齿应该在下齿前方紧密地配合(覆盖)下齿,不得有空隙。很少看到松狮有歪曲的嘴,也就是说,颚部有角度,请仔细检查有无这种缺陷,我曾见过几个例子。嘴型有缺陷的都应淘汰,小犬嘴型不好的很少有越长越好,多半是越长越坏。检查眼睛,在这个年龄段的眼型有很大的参考意义。即使是色泽很深的眼睛,如果眼形是大而圆的,也应淘汰。淘汰深凹的眼睛。三角眼是比较理想的。鼻子应是宽的,鼻孔应是黑色。
然后检查色素沉着,淘汰所有舌头有色斑的,即使在这样的年龄段,也不应有这样的现象。很无情地,我认为这种色素缺乏是进化上的倒退,即使在成长后期有所改善也应淘汰。我们应该繁殖色素沉淀很好的小犬,在任何一个时期的淡化都是不可取的。现在检查耳朵,相对来说,在幼犬时期这一点是非常重要的,但也比较难以确定。我发现,在成年期比较理想的耳朵大部分是直到约十周龄才竖起来的。使小犬面向你,头抬起,用手指放在耳朵中部,用点力轻轻地抬起耳朵,耳朵应该自然竖起(即使随继又垂下)。淘汰薄的、耳根高的、紧靠在一起的耳朵。头骨应是平坦的,在与口鼻部交际处有轻微的转折。圆的头骨(有时候在眼睛上部形成一个肿块),会向口鼻部发展,在成年时使前脸变长。颈部非常重要,淘汰那些看起来象是“插上去”的颈部,颈部应呈略微的弓形,与身体水平线成65度角,这样可以使松狮在运动中保持幽雅的姿态。
现在来看看肩部,它决定胸部的宽度。肩膀要成一个角度或是很好地倾斜,如果不是这样,会导致一个很不好的结果:竖立的肩部。这样检查前部:触摸肩胛的顶部,轻轻地放低颈部使肩胛更突出,在这个年龄段,肩胛间应有半英寸的间隔,这样在成年时会有一英寸半的间隔。如果间隔不足,前部就会显窄。如果肩胛没有间隔,可以肯定将来前腿会成“罗圈”形。
腿部骨骼应该是圆而粗壮的,骨量好的小犬在幼犬期会有“有节的膝盖”,那是成年后骨量好的重要标志。淘汰很直而细的腿骨,虽然在这个时期看起来相当不错,但成年后多半不会很好。仔细检查前腿有无伸展趋势。如果脚趾呈角度伸出,多半是长成窄胸或是薄足的标志。即使在最幼年的时期,足部也应是圆而紧凑的。后腿应该象前肢一样直,从尾根部直到地面。很直的腿,如果象惠比特那样分开,也应淘汰。尾根很重要,尾根跟后足的前部应成一线,尾根过低是不可取的,因其破坏了一只顶级犬的平衡。肋骨应很好地向后伸展,使腰部越小越好。肋应是蛋形而不是桶形。在这个时期毛色并不重要,一个判别的方法是检查其尾部毛色。
现今的与身体相比硕大的头部在十九世纪二十年代并不那么明显。那时,狐狸似的脸和狭窄的头骨是非常普遍的,特别是母犬。头骨:标准中对头骨的描述:“头骨平坦、宽阔,转折很小,在眼部以下很好地膨胀变大”。也就是说,当你抚摸头骨时,它应该尽可能的平坦。为了更好地理解,拿一根直尺,放在耳后面和眼部的折皱以下,沿着口鼻部,口鼻应该几乎成一直线,在尺下只有很小的空隙。在双眼和双耳间在横竖两个方向都是非常平坦的。在第一次世界大战后所谓的“圆脑袋”非常常见。这个词用来描述枕骨部(在耳朵后面的头骨)是圆的。这是一个非常严重的缺陷,因为在头骨的顶部根本不该有任何曲线。因为毛发的生长,头部显得比标准描述的有更明显的突起,但近距离的仔细观察可以证实应该是没有此类突起耳朵的位置:松狮的耳朵是一个显著的特征,很多很好的松狮因为过大的耳朵或是耳根过高而降格。如果你的小犬的一只耳朵比你期望的要大,不用惊讶你的第一印象中他的两只耳朵都偏大并且耳根过高。那么耳朵会比较靠拢,并且竖立不足。很难用文字描述耳根的正确部位。也许理想的位置是指耳朵的内侧和眼睛内侧恰好成一直线,这也重申了宽口鼻(和眼睛位置宽度相似)的重要性。现今我们很难看到很薄的耳朵,那些无论看起来还是摸起来都很薄的耳朵。在某些血系,特别是深红色系中,耳朵常常小并且位置相当理想,但缺乏丰厚的毛发让耳朵显得更完美。
颈部:总是有人喜欢比较长的颈部。引用标准“颈部丰满、强壮,很好地与肩部连接,略弓”。在些并未提到长度。这里说的“丰满”意思提颈部的周长只比头骨略小。因为丰厚的被毛和鬃毛,松狮的颈部显得有些短,与犬的身体一起成一个和谐的整体。对那些喜欢长颈部的人来说,并没有意识到长的颈部常常意味着较长的背部(这两者总是同时出现,这一点已经得到了充分的证明)。颈部与身体的连接非常重要,因其破坏或是加强松狮的整体平衡。颈部与身体的连接不能看起来象是“插”上去的,或是给人不稳定的感觉。
颈部的项端应该很好地延伸至肩部(被称作“马肩隆”的部位)。当你伸手触摸时,感觉应是结实,并且在两肩交合处几乎没有“结合点”的感觉(即连接是相当平滑的)。肩部的布置重要到可以当作一个单独的课题来讨论。在标准描述中提到颈部就是“略弓”,这常常起到一些误导作用,因为当你仔细检查颈部时,只有在和头骨紧靠的部位才会“略弓”。这一点在松狮洗澡时特别清楚,这时湿毛发向下披到肩部。
头部:松狮的头部是最有特点的,与其他品种均无法相比。任何一个裁判都会认为松狮特有的表情是个明显的特征,和狐狸犬类的其他犬种有所区别。有人可能会说,眼睛的位置也相当重要。标准中描述“眼睛,深色,小,杏仁形(淡黄褐色、乳酪色、淡蓝色可以接受)”。“深色”,那么多深?纯黑或是榛棕色。“小”,那么多小?
此主题相关图片我认为在红色底色上的非常黑色的眼睛对脸部表情有所损坏。而对黑松狮一般都倾向于非常深黑的眼睛,这并不是说深榛色不允许,有很多黑色的冠军犬就是这种眼睛。浅色的眼睛在黑松狮身上,任何情况下都是不可取的。我们都同意眼睛应是杏仁形,有些时候也称“三角眼”。但“小”是什么,多小才算小?一个非常小的眼睛放在很大的头骨上看起来有些古怪,但圆形的眼睛肯定是不可取的。
在标准中并未提及现在非常常见的深凹的眼睛。一只眼睛不深凹的现代松狮没人会喜欢,这样的说法是不对的。眼睛的形状和颜色只是一部分,还有其他的一些因素。比如说,视线就非常重要,他应该没着口鼻的顶部线的,不应该象猪一样向上或是象温顺的绵羊一样向下。现在松狮的脸部特征更明显,就是特有的在口鼻部和眼部周围的折皱和毛发的结果。如果没有这些,一只松狮会被称作“扁脸”。此外,在双眼间隔的中间部位,会有向上的明显的毛发形成的折皱,这是非常具有吸引力的特征,并且对一只松狮的头部来说相当重要。
posted @ 2007-04-29 09:50 黑咖啡 阅读(388) | 评论 (0)编辑 收藏
www.open-open.com 上面有部分统计,不知道是否全。

个人觉得比较好的:
BBS:jforum 美中不足的是官方没有简体中文版,但是有繁体版,不知为何?某些社区有自己翻译简体中文版。
http://www.jforum.net/index.jsp

Blog:Roller Weblogger ,sun的blog社区所使用的blog系统。个人感觉配置比较复杂。
http://rollerweblogger.org/project/

posted @ 2007-04-28 13:58 黑咖啡 阅读(1495) | 评论 (0)编辑 收藏
native2ascii是sun java sdk提供的一个工具。用来将别的文本类文件(比如*.txt,*.ini,*.properties,*.java等等)编码转为Unicode编码。为什么要进行转码,原因在于程序的国际化。

用法:native2ascii [-reverse] [-encoding 编码] [输入文件 [输出文件]]

-[options]:表示命令开关,有两个选项可供选择
-reverse:将Unicode编码转为本地或者指定编码,不指定编码情况下,将转为本地编码。
-encoding encoding_name:转换为指定编码,encoding_name为编码名称。

[inputfile [outputfile]]
inputfile:表示输入文件全名。
outputfile:输出文件名。如果缺少此参数,将输出到控制台
posted @ 2007-04-28 13:42 黑咖啡 阅读(7873) | 评论 (0)编辑 收藏
BlogJava版面终于调整过来了。现在看起来舒服多了。

最近有点空,关注Struts 2 ,Groovy/Grails

新技术真是层出不穷啊。

Ruby/Rails VS Groovy/Grails

对于Java程序员来说,后者的优势无容置疑。
posted @ 2007-04-18 18:24 黑咖啡 阅读(289) | 评论 (0)编辑 收藏
平庸的生活让人堕落,平凡的生活让人乏味。

近几天来什么都不想干,做什么事情都不能好好静下来。又是一个多事之秋,走的走,去的去,看着一片萧条的景象,虽然和我关系不大,但是看了不免心里觉得寒酸。

每天无所事事,带来的就是乏味,空虚。丝毫没有刚开始时的那种充实,有干劲。也许呆在一个地方呆久了就是这样的结果,我终究不适合“流水作业”。

还得走下去,充电,飞吧。
posted @ 2007-03-09 11:02 黑咖啡 阅读(312) | 评论 (0)编辑 收藏
linux版本介绍,给新手一个好的开始。

点击下载

保存记录,以备后用。

blog没有上传附件功能吗?很是不方便。
posted @ 2007-02-01 14:50 黑咖啡 阅读(322) | 评论 (0)编辑 收藏

      时间飞逝,2006很快就过去了。往昔不再回首,写下2007的目标,也是2007的开篇,希望自己能有更大的进步。

      2006是打基础的一年,基本熟悉了java的结构,语法,以及特性,但是还需要深入。

      2007是提升技术的一年,培养重点在编程思想,设计,构架。同时语言也要跟上,英语要进一步加强,日语是个新的领域,压力比较大,希望能有好的结果。

      希望2007年年中的时候自己会有一个飞跃。

posted @ 2007-01-26 15:16 黑咖啡 阅读(352) | 评论 (0)编辑 收藏

本文发表于程序员杂志2006年第5期
“ 敏捷软件开发宣言:我们正在通过亲身实践和帮助其他人实践,揭示更好的软件开发方法,通过这项工作,我们认为:
人和交流胜过过程和工具
可工作的软件胜过面面俱到的文档
客户协作胜过合同谈判
响应变化胜过遵循计划
虽然右项也有价值,但是我们认为左项更重要。 ”
—— Kent Beck , Mike Beedle , Arie van Bennekum , Alistair Cockburn , Ward Cunningham , Martin Fowler , James Grenning , Jim Highsmith , Andrew Hunt , Ron Jeffries , Jon Kern , Brian Marick , Robert C. Martin , Steve Mellor , Ken Schwaber , Jeff Sutherland , Dave Thomas
 
敏捷软件开发这个词在 2006 年的中国软件界听起来仍然显得有些陌生。自 2001 年敏捷联盟被发起以来,敏捷方法的实践经验和理论研究都在不断的更新。而我国的大多数程序员还是只能在书本上读到敏捷的好处,很难在项目中进行实践。这其中的原因,主要是缺乏拥有实际敏捷项目经验的人来带领实施敏捷。虽然敏捷开发是种实践行为,很难从书本上直接学习,不过多数程序员了解敏捷,却都是先从书本开始的。无论结果怎样,从认识到实践的过程是免不了的。
 
敏捷软件开发之方法论篇
大家都知道敏捷软件开发方法包括了多种方法论,主要有: SCRUM , Crystal, 特征驱动软件开发( FDD ),自适应软件开发( ASD ),以及最著名的极限编程 (XP) 。这些方法论分别在不同的著作上专门论述过:
SCRUM :《 Agile Software Development with Scrum 》 by Ken Schwaber, Mike Beedle ,《 Agile Project Management With Scrum 》 by Ken Schwaber
FDD: 《 Java Modeling in Color with UML 》 by Peter Coad, 《 A Practical Guide to Feature-Driven Development 》 ( 特征驱动开发 ) by Stephen R Palmer, John M. Felsing,
Crystal: 《 Crystal Clear 》 by Alistair Cockburn
ASD: 《 Adaptive Software Development 》(自适应软件开发) by James A. Highsmith
 
其中尤以 XP 系列的书籍居多。人民邮电出版社的一系列极限编程系列丛书,在国内引进较早。在还没有统一敏捷词汇的情况下,引发了一批敏捷先锋人士的热情,是我国程序员的敏捷启蒙教材。这些书包括《 Extreme Programming Explained 》(解析极限编程),《 Extreme Programming Examined 》(极限编程研究),《 Extreme Programming Installed 》 ( 极限编程实施 ) ,《 Extreme Programming Explored 》(探索极限编程),《 Extreme Programming Applied 》(应用极限编程)《 Extreme Programming in Practice 》(极限编程实践),《 Planning Extreme Programming 》(规划极限编程)等,这些书有的是作者的 XP 实践论文,有些是对 XP 项目的介绍,其中,值得推荐的是下面两部著作。
 
《 Extreme Programming Explained: Embrace Change 》 by Kent Beck
第一版中译版:《解析极限编程:拥抱变化》, 唐东铭, 人民邮电出版社
第二版中译版: 雷剑文,电子工业出版社
作为 XP 的开山之作,目前已经出版了第二版。在第一版中, Kent Beck 对 XP 作了详细的描述。从当前软件开发的现状和问题谈起,从需求的变化到如何拥抱变化,给出了 XP 的四项价值观和十二项实践。对于想了解敏捷的来龙去脉的人,此书属于必读之类。在第二版, Kent 根据几年来的实践,为 XP 增加了一项价值观:尊重,并增加了原则的概念,同时增加和删改了一些实践。
该书第一版是程序员的宣言,这和 Kent 的背景很有关系。随后 XP 经历了五六年的发展和实践, Kent 自己也逐渐意识到,这样的观点太狭隘了。因此就有了第二版,与其说这是技术书籍,到更像是纯粹意义的软工书籍。期间也可以看出 XP 的体系更加完备。这其中尤为突出的是把人放到了更为重要的地位。
 
《 Extreme Programming in Practice 》 by James Newkirk, Robert C. Martin
中译版:《极限编程实践》, 王钧, 人民邮电出版社
读过了一些列的 XP 书籍,程序员们都会觉得 XP 非常好,但到底如何才能开始实施 XP 呢?还不是太清楚。本系列中的这本书用一个完整的小项目作例子,从头到尾教给人如何敏捷开发,是一本不可多得的实践教材。如果想直接实施 XP 开发,这本书可以给你很大启示。
 
 
敏捷软件开发之实践篇
一、极限编程最佳实践
由于极限编程是如此的流行,多数敏捷团队都会或多或少的借鉴一些 XP 中的敏捷实践,而 XP 的每一个敏捷实践也确实值得大书特书,而其中最著名的是测试驱动开发和重构实践:
 
《 Test-Driven Development 》 by Kent Beck
中译版:《测试驱动开发》, 崔凯,中国电力出版社
测试驱动开发是 Kent Beck 另一部力作。 “Clean Code That Works” 是敏捷开发的目标之一,那么如何达到这个目标? TDD 给出了一种方式。测试实质上是需求。由需求产生出的代码肯定是能够工作的功能代码,而要实现 Class 本身的可测试性,就不得不写出高度解耦合的 Clean 的代码。本书从一个 Money 的例子入手,从最初的一点需求开始,逐步增加需求,完成整个货币系统的代码。后面又给出了 Unit Test 中的一些最佳实践和模式供参考。
然而,本书的教导意义比其实践意义更突出。作为一本 TDD 的教程或入门教材,这本书无疑是最佳的,其中提出的一些最佳实践更是值得经常阅读来温习。本书面向的是单元测试,而实际开发中面对的数据库测试, Web 测试等问题并不属于单元测试的范畴。因此读者并不能从中直接进入到实战。
另一本同名书《 Test Driven Development: A Practical Guide 》由 Davis Astels 撰写,他将该书看作是 Kent 著作的补充,重点阐述利用 TDD 开发所必要的技术和工具上,因此对实际开发更具实用性。
 
《 Refactoring: Improving the Design of Existing Code 》 by Martin Fowler
中译版:《重构:改善既有代码的设计》,侯捷,熊节,中国电力出版社
重构这本书的意义在于,他提供了一种让你写出更加优美代码的能力。在测试的保证下,重构能够发挥强大的威力。敏捷团队中,不断的重构出简单且高效的代码才能够保持拥抱不断变化的需求。后来的一本书《 Refactoring to Patterns 》(从重构到模式) by Joshua Kerievsky ,更是将重构的威力发挥到极限。
重构曾被称为软件开发图书的双璧,另一本书是《 Design Patterns 》 ( 设计模式 ) by GoF 。当然,对现在的软件开发这二者已经不是最重要的。 Thought Works 的首席科学家 Martin Fowler 总结了朋友们的各种实践心得,写出了这本书。从几年后的目光来看,这本书中的多数实践都被各种 IDE 做到了操作菜单中。虽然 IDE 提供了大量重构功能,但仅靠 IDE 是无法写出简洁美妙代码的,多数的敏捷团队重构工作做得还是不够。
 
另外有一本专门介绍结对编程的书,《 Pair Programming Illuminated 》(结对编程技术) by by Laurie Williams and Robert Kessler ,指出了为什么要结对?并从各种不同水平不同性格的程序员结对情况来讨论该实践的优劣。对此有兴趣的程序员不妨一读。
 
二、敏捷软件开发实践
自从 2001 年敏捷联盟成立以来,单独推广极限编程的书变少了,而统一口径推广敏捷的书变得越来越多。两本同名的敏捷软件开发都是不可多得的好书,
 
《 Agile Software Development : Principles, Patterns, and Practices 》 by Robert C. Martin
中译版:《敏捷软件开发:原则,模式与实践》,邓辉, 清华大学出版社
被业内人士称为 Uncle Bob 的 Robert C Martin 在沉寂几年后写出了这部书。该书可以算是从软件开发角度对敏捷方法阐述的最详细和全面的一本。之前的敏捷书籍多是关注于过程改进,而对如何从技术角度实施讲的比较少。本书一开始先介绍了敏捷联盟和敏捷开发过程。之后详细论述了面向对象设计的原则,这些原则是本书的精华之一。后面通过几个项目介绍了如何将设计模式应用于项目中。
Uncle Bob 不愧是实践的大师,写出来的书也是拥有很强的实践意义。在敏捷团队的办公桌上,应当常备此书,一来可作为参考查询,二来可以作为新成员的必读书目。
 
《 Agile Software Development 》 by Alistair Cockburn
中译版:《敏捷软件开发》,俞涓,人民邮电出版社
这本书更加适合管理者来阅读。 Alistair 从项目人数和交流难易程度,将敏捷的各种方法划分了其适用范围。人数多的或分布式项目就需要靠其他手段来加强交流,人数少的就可以靠 pair programming 等进行面对面的交流。交流和反馈是敏捷的核心。同时 Alistair 也介绍了一下他提出的 Crystal 方法族。
 
三 . 敏捷项目管理和敏捷需求分析
在推广敏捷一段时间后,敏捷社群也意识到,多数书籍更像是面向开发人员,过于技术化,难以吸引项目经理或主管。因此,一批面向管理者视角的书也开始浮出水面,这些书包括:
《 Agile and Iterative Development 》(敏捷迭代开发) by Craig Larman
《 Lean Software Development 》( 敏捷 软件开发工具 — 精益开发方法 ) by Mary Poppendieck
《 Agile Software Development Ecosystems 》(敏捷软件开发生态系统) by Jim Highsmith
书中从各种角度比较和分析各种敏捷方法的优劣,异同,起源,适用范围等。这些书对于一个项目主管决策使用何种过程来在自己的团队中实践敏捷有很好的参考作用。
 
近两年,人们开始逐渐意识到敏捷开发的侧重点不仅仅是开发过程和开发实践,还包括对需求和项目管理等其他相关方面的实践。一些相关的书籍也悄然出现在人们的视野:
《 Agile Project Management 》(敏捷项目管理) by Jim Highsmith
《 User Stories Applied 》 by Mike Cohn
《 Agile Estimating and Planning 》 by Mike Cohn
《 Agile Requirements & User Stories 》 by Louis Molnar
这些书不同于以往强调新方法,新过程的书目。敏捷项目管理类的书主要介绍如何管理敏捷团队,如何计划要开发的需求,如何为客户提供最大的价值。介绍敏捷需求分析的书主要帮助商务分析师或项目经理挖掘和分析用户需求,写出用户故事,评估和计划用户故事等。人们已经意识到,各种方法论的实质是相同的,都是提供商业价值,减少浪费,增加交流,快速反馈。因此不需要着重于区分是使用了那种方法。对项目经理来说,不同的项目或团队应当采用适应其特殊情况的方法,而这些方法的基本原则是相同的。
 
四 . 敏捷软件开发新方向
对架构师或程序员来说,近年来的技术进展,也使得敏捷开发有了新的研究方向:
《 Agile Web Development with Rails 》 by Dave Thomas, David Hansson, Leon Breedt, and Mike Clark
该书是获得 2006JOLT 奖的书,讲得是采用 Ruby on Rails 这个 Web 开发工具新贵来快速开发 Web 项目,从而达到快速反馈拥抱变化的目的。
《 Refactoring Databases 》 by Scott W Ambler
此书是 Scott 的新作,延续和继承了《 Agile Modeling 》(敏捷建模)和《 Agile Database Techniques 》(敏捷数据)的思想。在敏捷开发过程中,作为持久化最常见技术的数据库如果不能够敏捷,怎么能够适应一次次迭代和一次次发布的修改呢?书中介绍了如何进行数据库演化,如何保证升级后数据库数据的正确性,以及最佳实践。
posted @ 2006-12-14 15:10 黑咖啡 阅读(463) | 评论 (0)编辑 收藏
  1 public   class  DrpToOAInfo  {
  2  @PersistenceContext
  3  EntityManager entityManager;
  4  
  5   private   final   static  String CONFIGURETION_FILE  =   " send_message_zh.properties " ;
  6   private   static  Properties properties  =   null ;
  7  
  8   public   static  Properties readConfiguretion()
  9   {
 10    if  (properties  ==   null )
 11    {
 12     try
 13     {
 14     properties  =   new  Properties();
 15     ClassLoader cl  =  Thread.currentThread().getContextClassLoader();
 16     InputStream inputStream  =   null ;
 17      if  (cl  !=   null )
 18      {
 19      inputStream  =  cl.getResourceAsStream(CONFIGURETION_FILE);
 20     }
 21      if  (inputStream  !=   null )
 22      {
 23      properties.load(inputStream);
 24      inputStream.close();
 25     }
 26    }
 27     catch  (Exception e)
 28     {
 29     e.printStackTrace();
 30    }
 31   }
 32    return  properties;
 33  }
 34  
 35  
 36   /** */ /**
 37   * 
 38   *  @param  type  接收者类型
 39   *  @param  id    接收者id
 40   *  @param  name  接收者名称
 41   *  @param  contentVariable  内容中的变动部分
 42   *  @param  url IP地址、端口号、项目
 43   *  @param  value 生产计划单号
 44   *  @param  configureInformType 通知类型
 45    */
 46   public   static   void  sendMessage( int  type, 
 47                    String id, 
 48                    String name, 
 49                    Object[] contentVariable, 
 50                    String url,
 51                    Object[] value,
 52                    String configureInformType)
 53   {
 54   String applictionName  =   "" ;
 55   String content  =   "" ;
 56   String URL  =   "" ;
 57   ReceiveType rt  =  ReceiveType.DEPARTMENT;
 58   
 59    // 读取资源文件
 60   Properties properties  =  readConfiguretion();
 61   applictionName  =  properties.getProperty( " system.module.appliction.name " );
 62   content  =  MessageFormat.format(properties.getProperty(configureInformType), contentVariable);
 63
 64   URL  =  url  +  MessageFormat.format(properties.getProperty(configureInformType  +   " .url " ), value);;
 65   
 66   
 67    if (type  ==   0 )
 68    {
 69    rt  =  ReceiveType.PEOPLE;
 70   }
 71    if (type  ==   1 )
 72    {
 73    rt  =  ReceiveType.DEPARTMENT;
 74   }
 75    if (type  ==   2 )
 76    {
 77    rt  =  ReceiveType.ROLE;
 78   }
 79
 80   System.out.println( " ****************************************** " );
 81   System.out.println( " * 类型: " + rt);
 82   System.out.println( " * ID: " + id);
 83   System.out.println( " * 接收者名称: " + name);
 84   System.out.println( " * 内容: " + content);
 85   System.out.println( " * url: " + URL);
 86   System.out.println( " ****************************************** " );
 87         StartupMessage sm  =   new  StartupMessage(applictionName, rt, " 117 " ,  " tonywu " , id, name, content, URL);
 88
 89   SendMessage s  =   new  SendMessage(); 
 90   s.sendMessage(sm);
 91  }
 92  
 93   /** */ /**
 94   * 从request中得到地址中的参数,
 95   *  @param  taskID  接收者类型
 96   *  @param  processorID    处理者ID
 97   *  @param  processorName  处理者名称
 98   *  @param  processorTime  处理时间
 99    */
100   public   static   void  overMessage(String[] processorInfo)
101   {
102 //   读取资源文件
103   Properties properties  =  readConfiguretion();
104   String applictionName  =  properties.getProperty( " system.module.appliction.name " );
105 //   Calendar date = Calendar.getInstance();
106 //   String t = date.get(Calendar.YEAR)+"-"+date.get(Calendar.MONTH)+"-"+date.get(Calendar.DATE);
107   BeOverMessage bm  =   new  BeOverMessage(applictionName, processorInfo[ 1 ],
108                                    " 117 " ,  " tonywu " , new  Date());
109
110   System.out.println( " ****************************************** " );
111   System.out.println( " * taskID类型: " + processorInfo[ 1 ]);
112   System.out.println( " * processorIDID: " + processorInfo[ 2 ]);
113   System.out.println( " * processorName接收者名称: " + processorInfo[ 3 ]);
114   System.out.println( " * 时间: " + new  Date());
115   System.out.println( " ****************************************** " );
116
117   SendMessage s  =   new  SendMessage(); 
118   s.sendMessage(bm);
119  }
120 }
121


几乎所有的系统都需要通过获取配置/资源文件来方便配置系统
但怎样获取资源文件呢
java的应用通常把配置文件和工程中的其他class放在一起(如log4j),原因是可以方便的使用classLoader的 getResourceAsStream()方法获取资源(其实java内部就是这样来
load class的),下面是一个简单例子:
比如你把文件(abc.properties)放到com.yourcompany.common包里面,在确保classpath包括该包的情况
下就可以按下面的方法获取资源
ClassLoader cl = this.getClass().getClassLoader();
InputStream is = cl.getResourceAsStream("com/yourcompany/"+abc.properties)
进一不,如果abc.properties是一个标准的properties文件的话,比如其内容如下
messageA = Ok!
还可以这样获取配置信息
Properties props = new Properties();
props.load(is);
String messageA = props.getProperty("messageA ");
则messageA== "Ok"
当然properties也可以是XML格式,只要他符合http://java.sun.com/dtd/properties.dtd的规范并且包含
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">的DOCTYPE declaration,就可以用props.loadFromXML(InputSteam in)方法载入property
ps:property 也提供store()和storeToXML方法保存属性
关于classLoader也可以看看 

classloader相关基础知识
    JVM
    jvm是jre里头一个动态连接函数库,jdk里面的jre一般用于运行java本身的程序,比如javac,等等.programfiles下面的jre用于运行用户编写的java程序.
    JRE下的bin\client 或者 bin\server 的jvm.dll就是JVM了

    当一台机器上有多个jvm可选择的时候,jvm的选择步骤:
    1)当前目录有没有jre目录(不准确),
    2)父目录下的jre子目录
    3)注册表HEKY_LOCAL_MACHINE\SoftWare\Java\Java Runtime Environment\
    所以当运行的是jdk\bin\java.exe的时候,用的jre是bin的父目录jdk下面的jre\
    运行java.exe找到了jre后有一个验证程序,验证jre和java.exe的版本是否一致,如果不一致则会发生错误


    java -verbose:class Main 显示调用的详细信息


    classloader的两种载入方式:1)pre-loading预先载入,载入基础类 2)load-on-demand按需求载入
    只有实例化一个类才会被classloader载入,仅仅申明并不会载入


    java动态载入class的两种方式:
    1)implicit隐式,即利用实例化才载入的特性来动态载入class
    2)explicit显式方式,又分两种方式:
    1)java.lang.Class的forName()方法
    2)java.lang.ClassLoader的loadClass()方法


    static块在什么时候执行?
    1)当调用forName(String)载入class时执行,如果调用ClassLoader.loadClass并不会执行.forName(String,false,ClassLoader)时也不会执行.
    2)如果载入Class时没有执行static块则在第一次实例化时执行.比如new ,Class.newInstance()操作
    3)static块仅执行一次



    Class类的实例.
    >>Class类无法手工实例化,当载入任意类的时候自动创建一个该类对应的Class的实例,
    >>某个类的所有实例内部都有一个栏位记录着该类对应的Class的实例的位置.,
    >>每个java类对应的Class实例可以当作是类在内存中的代理人.所以当要获得类的信息(如有哪些类变量,有哪些方法)时,都可以让类对应的Class的实例代劳.java的Reflection机制就大量的使用这种方法来实现
    >>每个java类都是由某个classLoader(ClassLoader的实例)来载入的,因此Class类别的实例中都会有栏位记录他的ClassLoader的实例,如果该栏位为null,则表示该类别是由bootstrap loader载入的(也称root laoder),bootstrap loader不是java所写成,所以没有实例.

    原生方法:forName0()等方法,native修饰符


    自定义ClassLoader:
    如实例化一个URLClassLoader. URLClassLoader ucl = new URLClassLoader(new URL[]{new URL("file:/e:/bin/")}),URLClassLoader优先找当前目录,再在url中找.class加载.URL中别忘在最后加"/"表示目录


    各个java类由哪些classLoader加载?
    1)java类可以通过实例.getClass.getClassLoader()得知
    2)接口由AppClassLoader(System ClassLoader,可以由ClassLoader.getSystemClassLoader()获得实例)载入
    3)ClassLoader类由bootstrap loader载入


    ClassLoader hierachy:
    jvm建立->初始化动作->产生第一个ClassLoader,即bootstrap loader->bootstrap loader在sum.misc.Launcher类里面的ExtClassLoader,并设定其Parent为null->bootstrap loader载入sun.misc.Launcher$AppClassLoader,并设定其parent为ExtClassLoader(但是AppClassLoader也是由bootstrap loader所载入的)->AppClassLoader载入各个xx.class,xx.class也有可能被ExtclassLoader或者bootstrap loader载入.
    >>自定义的ClassLoader的.getParent()是AppClassLoader.parent和他的加载器并没有关系
    >>ExtClassLoader和AppClassLoader都是URLClassLoader的子类.AppClassLoader的URL是由系统参数java.class.path取出的字符串决定,而java.class.path由 运行java.exe时 的-cp或-classpath或CLASSPATH环境变量决定
    >>ExtClassLoader查找的url是系统变量java.ext.dirs,java.ext.dirs默认为jdk\jre\lib\ext
    >>Bootstrap loader的查找url是sun.boot.class.path
    >>在程序运行后调用System.setProperty()来改变系统变量并不能改变以上加载的路径,因为classloader读取在System.setProperty之前.sun.boot.class.path是在程序中写死的,完全不能修改

    委派模型
    当classloader有类需要载入时先让其parent搜寻其搜寻路径帮忙载入,如果parent找不到,在由自己搜寻自己的搜寻路径载入,ClassLoader hierachy本来就有这种性质



    NoClassDefFoundError和ClassNotFoundException
    NoClassDefFoundError:当java源文件已编译成.class文件,但是ClassLoader在运行期间在其搜寻路径load某个类时,没有找到.class文件则报这个错
    ClassNotFoundException:试图通过一个String变量来创建一个Class类时不成功则抛出这个异常
posted @ 2006-12-08 17:25 黑咖啡 阅读(4041) | 评论 (1)编辑 收藏
123 application/vnd.lotus-1-2-3
3gp video/3gpp
aab application/x-authoware-bin
aam application/x-authoware-map
aas application/x-authoware-seg
ai application/postscript
aif audio/x-aiff
aifc audio/x-aiff
aiff audio/x-aiff
als audio/X-Alpha5
amc application/x-mpeg
ani application/octet-stream
asc text/plain
asd application/astound
asf video/x-ms-asf
asn application/astound
asp application/x-asap
asx video/x-ms-asf
au audio/basic
avb application/octet-stream
avi video/x-msvideo
awb audio/amr-wb
bcpio application/x-bcpio
bin application/octet-stream
bld application/bld
bld2 application/bld2
bmp application/x-MS-bmp
bpk application/octet-stream
bz2 application/x-bzip2
cal image/x-cals
ccn application/x-cnc
cco application/x-cocoa
cdf application/x-netcdf
cgi magnus-internal/cgi
chat application/x-chat
class application/octet-stream
clp application/x-msclip
cmx application/x-cmx
co application/x-cult3d-object
cod image/cis-cod
cpio application/x-cpio
cpt application/mac-compactpro
crd application/x-mscardfile
csh application/x-csh
csm chemical/x-csml
csml chemical/x-csml
css text/css
cur application/octet-stream
dcm x-lml/x-evm
dcr application/x-director
dcx image/x-dcx
dhtml text/html
dir application/x-director
dll application/octet-stream
dmg application/octet-stream
dms application/octet-stream
doc application/msword
dot application/x-dot
dvi application/x-dvi
dwf drawing/x-dwf
dwg application/x-autocad
dxf application/x-autocad
dxr application/x-director
ebk application/x-expandedbook
emb chemical/x-embl-dl-nucleotide
embl chemical/x-embl-dl-nucleotide
eps application/postscript
eri image/x-eri
es audio/echospeech
esl audio/echospeech
etc application/x-earthtime
etx text/x-setext
evm x-lml/x-evm
evy application/x-envoy
exe application/octet-stream
fh4 image/x-freehand
fh5 image/x-freehand
fhc image/x-freehand
fif image/fif
fm application/x-maker
fpx image/x-fpx
fvi video/isivideo
gau chemical/x-gaussian-input
gca application/x-gca-compressed
gdb x-lml/x-gdb
gif image/gif
gps application/x-gps
gtar application/x-gtar
gz application/x-gzip
hdf application/x-hdf
hdm text/x-hdml
hdml text/x-hdml
hlp application/winhlp
hqx application/mac-binhex40
htm text/html
html text/html
hts text/html
ice x-conference/x-cooltalk
ico application/octet-stream
ief image/ief
ifm image/gif
ifs image/ifs
imy audio/melody
ins application/x-NET-Install
ips application/x-ipscript
ipx application/x-ipix
it audio/x-mod
itz audio/x-mod
ivr i-world/i-vrml
j2k image/j2k
jad text/vnd.sun.j2me.app-descriptor
jam application/x-jam
jar application/java-archive
jnlp application/x-java-jnlp-file
jpe image/jpeg
jpeg image/jpeg
jpg image/jpeg
jpz image/jpeg
js application/x-javascript
jwc application/jwc
kjx application/x-kjx
lak x-lml/x-lak
latex application/x-latex
lcc application/fastman
lcl application/x-digitalloca
lcr application/x-digitalloca
lgh application/lgh
lha application/octet-stream
lml x-lml/x-lml
lmlpack x-lml/x-lmlpack
lsf video/x-ms-asf
lsx video/x-ms-asf
lzh application/x-lzh
m13 application/x-msmediaview
m14 application/x-msmediaview
m15 audio/x-mod
m3u audio/x-mpegurl
m3url audio/x-mpegurl
ma1 audio/ma1
ma2 audio/ma2
ma3 audio/ma3
ma5 audio/ma5
man application/x-troff-man
map magnus-internal/imagemap
mbd application/mbedlet
mct application/x-mascot
mdb application/x-msaccess
mdz audio/x-mod
me application/x-troff-me
mel text/x-vmel
mi application/x-mif
mid audio/midi
midi audio/midi
mif application/x-mif
mil image/x-cals
mio audio/x-mio
mmf application/x-skt-lbs
mng video/x-mng
mny application/x-msmoney
moc application/x-mocha
mocha application/x-mocha
mod audio/x-mod
mof application/x-yumekara
mol chemical/x-mdl-molfile
mop chemical/x-mopac-input
mov video/quicktime
movie video/x-sgi-movie
mp2 audio/x-mpeg
mp3 audio/x-mpeg
mp4 video/mp4
mpc application/vnd.mpohun.certificate
mpe video/mpeg
mpeg video/mpeg
mpg video/mpeg
mpg4 video/mp4
mpga audio/mpeg
mpn application/vnd.mophun.application
mpp application/vnd.ms-project
mps application/x-mapserver
mrl text/x-mrml
mrm application/x-mrm
ms application/x-troff-ms
mts application/metastream
mtx application/metastream
mtz application/metastream
mzv application/metastream
nar application/zip
nbmp image/nbmp
nc application/x-netcdf
ndb x-lml/x-ndb
ndwn application/ndwn
nif application/x-nif
nmz application/x-scream
nokia-op-logo image/vnd.nok-oplogo-color
npx application/x-netfpx
nsnd audio/nsnd
nva application/x-neva1
oda application/oda
oom application/x-AtlasMate-Plugin
pac audio/x-pac
pae audio/x-epac
pan application/x-pan
pbm image/x-portable-bitmap
pcx image/x-pcx
pda image/x-pda
pdb chemical/x-pdb
pdf application/pdf
pfr application/font-tdpfr
pgm image/x-portable-graymap
pict image/x-pict
pm application/x-perl
pmd application/x-pmd
png image/png
pnm image/x-portable-anymap
pnz image/png
pot application/vnd.ms-powerpoint
ppm image/x-portable-pixmap
pps application/vnd.ms-powerpoint
ppt application/vnd.ms-powerpoint
pqf application/x-cprplayer
pqi application/cprplayer
prc application/x-prc
proxy application/x-ns-proxy-autoconfig
ps application/postscript
ptlk application/listenup
pub application/x-mspublisher
pvx video/x-pv-pvx
qcp audio/vnd.qcelp
qt video/quicktime
qti image/x-quicktime
qtif image/x-quicktime
r3t text/vnd.rn-realtext3d
ra audio/x-pn-realaudio
ram audio/x-pn-realaudio
rar application/x-rar-compressed
ras image/x-cmu-raster
rdf application/rdf+xml
rf image/vnd.rn-realflash
rgb image/x-rgb
rlf application/x-richlink
rm audio/x-pn-realaudio
rmf audio/x-rmf
rmm audio/x-pn-realaudio
rmvb audio/x-pn-realaudio
rnx application/vnd.rn-realplayer
roff application/x-troff
rp image/vnd.rn-realpix
rpm audio/x-pn-realaudio-plugin
rt text/vnd.rn-realtext
rte x-lml/x-gps
rtf application/rtf
rtg application/metastream
rtx text/richtext
rv video/vnd.rn-realvideo
rwc application/x-rogerwilco
s3m audio/x-mod
s3z audio/x-mod
sca application/x-supercard
scd application/x-msschedule
sdf application/e-score
sea application/x-stuffit
sgm text/x-sgml
sgml text/x-sgml
sh application/x-sh
shar application/x-shar
shtml magnus-internal/parsed-html
shw application/presentations
si6 image/si6
si7 image/vnd.stiwap.sis
si9 image/vnd.lgtwap.sis
sis application/vnd.symbian.install
sit application/x-stuffit
skd application/x-Koan
skm application/x-Koan
skp application/x-Koan
skt application/x-Koan
slc application/x-salsa
smd audio/x-smd
smi application/smil
smil application/smil
smp application/studiom
smz audio/x-smd
snd audio/basic
spc text/x-speech
spl application/futuresplash
spr application/x-sprite
sprite application/x-sprite
spt application/x-spt
src application/x-wais-source
stk application/hyperstudio
stm audio/x-mod
sv4cpio application/x-sv4cpio
sv4crc application/x-sv4crc
svf image/vnd
svg image/svg-xml
svh image/svh
svr x-world/x-svr
swf application/x-shockwave-flash
swfl application/x-shockwave-flash
t application/x-troff
tad application/octet-stream
talk text/x-speech
tar application/x-tar
taz application/x-tar
tbp application/x-timbuktu
tbt application/x-timbuktu
tcl application/x-tcl
tex application/x-tex
texi application/x-texinfo
texinfo application/x-texinfo
tgz application/x-tar
thm application/vnd.eri.thm
tif image/tiff
tiff image/tiff
tki application/x-tkined
tkined application/x-tkined
toc application/toc
toy image/toy
tr application/x-troff
trk x-lml/x-gps
trm application/x-msterminal
tsi audio/tsplayer
tsp application/dsptype
tsv text/tab-separated-values
tsv text/tab-separated-values
ttf application/octet-stream
ttz application/t-time
txt text/plain
ult audio/x-mod
ustar application/x-ustar
uu application/x-uuencode
uue application/x-uuencode
vcd application/x-cdlink
vcf text/x-vcard
vdo video/vdo
vib audio/vib
viv video/vivo
vivo video/vivo
vmd application/vocaltec-media-desc
vmf application/vocaltec-media-file
vmi application/x-dreamcast-vms-info
vms application/x-dreamcast-vms
vox audio/voxware
vqe audio/x-twinvq-plugin
vqf audio/x-twinvq
vql audio/x-twinvq
vre x-world/x-vream
vrml x-world/x-vrml
vrt x-world/x-vrt
vrw x-world/x-vream
vts workbook/formulaone
wav audio/x-wav
wax audio/x-ms-wax
wbmp image/vnd.wap.wbmp
web application/vnd.xara
wi image/wavelet
wis application/x-InstallShield
wm video/x-ms-wm
wma audio/x-ms-wma
wmd application/x-ms-wmd
wmf application/x-msmetafile
wml text/vnd.wap.wml
wmlc application/vnd.wap.wmlc
wmls text/vnd.wap.wmlscript
wmlsc application/vnd.wap.wmlscriptc
wmlscript text/vnd.wap.wmlscript
wmv audio/x-ms-wmv
wmx video/x-ms-wmx
wmz application/x-ms-wmz
wpng image/x-up-wpng
wpt x-lml/x-gps
wri application/x-mswrite
wrl x-world/x-vrml
wrz x-world/x-vrml
ws text/vnd.wap.wmlscript
wsc application/vnd.wap.wmlscriptc
wv video/wavelet
wvx video/x-ms-wvx
wxl application/x-wxl
x-gzip application/x-gzip
xar application/vnd.xara
xbm image/x-xbitmap
xdm application/x-xdma
xdma application/x-xdma
xdw application/vnd.fujixerox.docuworks
xht application/xhtml+xml
xhtm application/xhtml+xml
xhtml application/xhtml+xml
xla application/vnd.ms-excel
xlc application/vnd.ms-excel
xll application/x-excel
xlm application/vnd.ms-excel
xls application/vnd.ms-excel
xlt application/vnd.ms-excel
xlw application/vnd.ms-excel
xm audio/x-mod
xml text/xml
xmz audio/x-mod
xpi application/x-xpinstall
xpm image/x-xpixmap
xsit text/xml
xsl text/xml
xul text/xul
xwd image/x-xwindowdump
xyz chemical/x-pdb
yz1 application/x-yz1
z application/x-compress
zac application/x-zaurus-zac
zip application/zip 
 
posted @ 2006-12-04 16:40 黑咖啡 阅读(675) | 评论 (0)编辑 收藏
     摘要: 下面的代码表现出使用set 带来的好处。  1public class TaskTemplate {  2    private String id;  3    private String title;  4    private String detail;  5      6    private Set<TaskTemplate> preconditions;  7    p...  阅读全文
posted @ 2006-12-01 10:25 黑咖啡 阅读(360) | 评论 (0)编辑 收藏
Coding 生涯已经有1年4个月了,虽然比较熟悉公司框架,用起来还比较熟练,但是回头想想,其实自己还是停留在新手阶段,与刚出学校的那些“大侠”们不相上下。特别是昨天看到我们的CTO-BridGu(相信去过javaeye的朋友没有不知道这个名字的吧)给我改写的一段程序以后,感觉自己的程序是那么的幼稚。丝毫没有professional的感觉,很是惭愧!
这个功能是一个解析String生成function的功能,当然格式要求非常严格的,而且格式验证也是一个不可缺少,而且是非常重要的环节。
不知道你看到这个功能脑子里面想到是什么样的解决方案呢?我没有多想,拿起来就当String来处理,split, substring etc.

看看程序吧:
下面是我的方法,暂且说是方法吧:
 1    public void addFunction(String prototype,Long comId)throws AlpineException{
 2        ModDao dao = (ModDao)this.getDao("modDao");
 3        Components com = this.findByPrimaryKey(Components.class, comId);
 4        Functions function = new Functions();
 5        function.setComponent(com);
 6        prototype = delDupSpace(prototype);
 7        String[] funTtemp = prototype.split("\n");
 8        String fun = funTtemp[0];
 9        if(fun.indexOf("(") == -1||fun.indexOf(")") == -1){
10            throw new AlpineException(ErrorCode.FUNCTION_FORMAT_ERROR);
11        }
12        String funHead = fun.substring(0,fun.indexOf("("));
13        String[] typeAndHead = funHead.split(" ");
14        if(typeAndHead.length < 1){
15            throw new AlpineException(ErrorCode.FUNCTION_FORMAT_ERROR);
16        }else{
17            if(typeAndHead.length >1){
18                function.setReturnType(typeAndHead[0]);
19                function.setFunctionName(typeAndHead[typeAndHead.length-1]);
20            }else{
21                function.setReturnType("void");
22                function.setFunctionName(typeAndHead[0]);
23            }
24            if(fun.indexOf("//") != -1){
25                String exp = fun.substring(fun.indexOf(";")+1);
26                exp = exp.replaceAll("&#13;", "");
27                function.setExplanation(exp);
28            }
29            this.insert(function);
30    
31            String paStr = fun.substring(fun.indexOf("(")+1, fun.indexOf(")"));
32            if(!StringHelper.isEmpty(paStr)){
33                String[] pas = paStr.split(",");
34                for (int i = 0; i < pas.length; i++) {
35                    Parameters parameter = new Parameters();
36                    String[] pars = pas[i].split(" ");
37                    if(pars.length < 2 || pars.length > 3){
38                        throw new AlpineException(ErrorCode.FUNCTION_FORMAT_ERROR);
39                    }else{
40                        if(pars.length == 2){
41                            Parameters paDup = dao.getParameterByPaName(pars[1], function.getId());
42                            if(paDup != null)
43                                throw new AlpineException(ErrorCode.FUNCTION_FORMAT_ERROR);
44                                
45                            parameter.setParameterName(pars[1]);
46                            parameter.setParameterType(pars[0]);
47                            parameter.setInOrOut("In");
48                        }
49                        if(pars.length == 3){
50                            Parameters paDup = dao.getParameterByPaName(pars[2], function.getId());
51                            if(paDup != null)
52                                throw new AlpineException(ErrorCode.FUNCTION_FORMAT_ERROR);
53                            
54                            parameter.setParameterName(pars[2]);
55                            parameter.setParameterType(pars[1]);
56                            if(pars[0].contains("In"))
57                                parameter.setInOrOut("In");
58                            if(pars[0].contains("Out"))
59                                parameter.setInOrOut("Out");
60                        }
61                        parameter.setFunction(function);
62                        this.insert(parameter);
63                        parameter.setOrderF(parameter.getId());
64                        this.update(parameter);
65                    }
66                }
67            }
68            
69            for (int i = 1; i < funTtemp.length; i++) {//start 1
70                String[] paTemp = funTtemp[i].split(":");
71                if(paTemp.length == 2){
72                    Parameters parameter = dao.getParameterByPaName(paTemp[0].trim(),function.getId());
73                    if(parameter != null){
74                        parameter.setExplanation(paTemp[1]);
75                        this.update(parameter);
76                    }
77                }
78            }
79        }
80    }
以下是BirdGu的方案:
  1public class FunctionParser {
  2    public static class Token {
  3        private TokenType type;
  4        private String content;
  5        public Token(TokenType type, String content) {
  6            super();
  7            this.type = type;
  8            this.content = content;
  9        }
 10        public String getContent() {
 11            return content;
 12        }
 13        public TokenType getType() {
 14            return type;
 15        }
 16        
 17        
 18    }
 19    
 20    private enum TokenType {symbol, leftParenthese, rightParenthese, inOutFlag, comment, comma};
 21    private enum TokenParseStatus {start, inSymbol, comment1, inOutFlag};
 22
 23    private interface ParseStatus {
 24        public ParseStatus process (Functions function, Token token, Stack<String> symbolStack)
 25        throws InvalidSyntaxException;
 26    }
 27    
 28    private static final ParseStatus START = new ParseStatus() {
 29        public ParseStatus process(Functions function, Token token, Stack<String> symbolStack)
 30        throws InvalidSyntaxException {
 31            if (token.getType() == TokenType.symbol) {
 32                symbolStack.push(token.getContent());
 33                return GOT_FIRST_SYMBOL;
 34            } 
 35            throw new InvalidSyntaxException (token);
 36        }
 37    };
 38    
 39    private static final ParseStatus GOT_FIRST_SYMBOL = new ParseStatus () {
 40        public ParseStatus process(Functions function, Token token, Stack<String> symbolStack) throws InvalidSyntaxException {
 41            if (token.getType() == TokenType.leftParenthese) {
 42                function.setReturnType("void");
 43                function.setFunctionName(symbolStack.pop());
 44                return WAITING_FIRST_ARG;
 45            } else if (token.getType() == TokenType.symbol) {
 46                function.setFunctionName(token.getContent());
 47                function.setReturnType(symbolStack.pop());
 48                return BEFORE_ARG_DEF;
 49            } 
 50            throw new InvalidSyntaxException (token);
 51        }
 52    };
 53    
 54    private static final ParseStatus BEFORE_ARG_DEF = new ParseStatus () {
 55        public ParseStatus process(Functions function, Token token, Stack<String> symbolStack) throws InvalidSyntaxException {
 56            if (token.getType() == TokenType.leftParenthese) {
 57                return WAITING_FIRST_ARG;
 58            }
 59            throw new InvalidSyntaxException (token);
 60        }
 61    };
 62    
 63    private static final ParseStatus WAITING_FIRST_ARG = new ParseStatus () {
 64
 65        public ParseStatus process(Functions function, Token token, Stack<String> symbolStack) throws InvalidSyntaxException {
 66            if (token.getType() == TokenType.rightParenthese) {
 67                return AFTER_ARG_DEF;
 68            } else if (token.getType() == TokenType.symbol) {
 69                symbolStack.push(token.getContent());
 70                return GOT_ARG_TYPE;
 71            } else if (token.getType() == TokenType.inOutFlag) {
 72                symbolStack.push (token.getContent());
 73                return GOT_IN_OUT_FLAG;
 74            }
 75            throw new InvalidSyntaxException (token);    
 76        }
 77    };
 78    
 79    private static final ParseStatus GOT_IN_OUT_FLAG = new ParseStatus () {
 80        public ParseStatus process(Functions function, Token token, Stack<String> symbolStack) throws InvalidSyntaxException {
 81            if (token.getType() == TokenType.symbol) {
 82                symbolStack.push(token.getContent());
 83                return GOT_ARG_TYPE;
 84            }
 85            throw new InvalidSyntaxException (token);    
 86        }
 87    };
 88    
 89    private static final ParseStatus GOT_ARG_TYPE = new ParseStatus () {
 90        public ParseStatus process(Functions function, Token token, Stack<String> symbolStack) throws InvalidSyntaxException {
 91            if (token.getType() == TokenType.symbol) {
 92                Parameters param = new Parameters ();
 93                param.setParameterName(token.getContent());
 94                param.setParameterType(symbolStack.pop());
 95                String inOutFlag = "In";
 96                if (!symbolStack.isEmpty()) {
 97                    inOutFlag = symbolStack.pop();
 98                }
 99                param.setInOrOut(inOutFlag);
100                function.adParameter(param);
101                return GOT_ARG_VALUE;
102            }
103            throw new InvalidSyntaxException (token);    
104        }
105    };
106    
107    private static final ParseStatus GOT_ARG_VALUE = new ParseStatus () {
108        public ParseStatus process(Functions function, Token token, Stack<String> symbolStack) throws InvalidSyntaxException {
109            if (token.getType() == TokenType.rightParenthese) {
110                return AFTER_ARG_DEF;
111            } else if (token.getType() == TokenType.comma) {
112                return WAITING_ARG;
113            }
114            throw new InvalidSyntaxException (token);    
115        }
116    };
117    
118    private static final ParseStatus WAITING_ARG = new ParseStatus () {
119        public ParseStatus process(Functions function, Token token, Stack<String> symbolStack) throws InvalidSyntaxException {
120            if (token.getType() == TokenType.symbol) {
121                symbolStack.push(token.getContent());
122                return GOT_ARG_TYPE;
123            } else if(token.getType() == TokenType.inOutFlag) {
124                symbolStack.push(token.getContent());
125                return GOT_IN_OUT_FLAG;
126            }
127            return null;
128        }
129    };
130    
131    private static final ParseStatus AFTER_ARG_DEF = new ParseStatus () {
132        public ParseStatus process(Functions function, Token token, Stack<String> symbolStack) throws InvalidSyntaxException {
133            if (token.getType() == TokenType.comment) {
134                function.setExplanation(token.getContent());
135                return END;
136            }
137            throw new InvalidSyntaxException (token);
138        }
139    };
140    
141    private static final ParseStatus END = new ParseStatus () {
142        public ParseStatus process(Functions function, Token token, Stack<String> symbolStack) throws InvalidSyntaxException {
143            throw new InvalidSyntaxException (token);
144        }
145    };
146    
147    private StringBuffer currentLine;
148    private int index;
149    private Functions function;
150    
151    public Functions parse(String content) throws InvalidSyntaxException {
152        if (StringHelper.isEmpty(content)) {
153            throw new IllegalArgumentException ("content is empty.");
154        }
155        StringTokenizer tokenizer = new StringTokenizer (content, "\n");
156        String line = tokenizer.nextToken();
157        parseFirstLine (line);
158        while (tokenizer.hasMoreTokens()) {
159            line = tokenizer.nextToken();
160            parseParamLine (line);
161        }
162        return function;
163    }
164    
165    private void parseFirstLine (String line) throws InvalidSyntaxException {
166        currentLine = new StringBuffer (line);
167        index = 0;
168        function = new Functions ();
169        Token token;
170        ParseStatus status = START;
171        Stack<String> stack = new Stack<String> ();
172        while ( (token = nextToken()) != null) {
173            status = status.process(function, token, stack);
174        }
175        if (status != AFTER_ARG_DEF && status != END) 
176            throw new InvalidSyntaxException ("Function hasn't finished properly.");
177    }
178
179    private void parseParamLine (String line) 
180    throws InvalidSyntaxException {
181        int idx = line.indexOf(':');
182        if (idx < 0) {
183            throw new InvalidSyntaxException ("Expected ':' from parameter line.");
184        }
185        String paramName = line.substring(0, idx);
186        String comment = line.substring(idx + 1);
187        Parameters param = function.getParameter (paramName);
188        if (paramName == null)
189            throw new InvalidSyntaxException ("Unknown parameter:'paramName'");
190        param.setExplanation(comment);
191    }
192    
193    private Token nextToken () throws InvalidSyntaxException {
194        if (index >= currentLine.length())
195            return null;
196        StringBuffer buf = new StringBuffer ();
197        TokenParseStatus status = TokenParseStatus.start;
198        while (index < currentLine.length ()) {
199            char ch = currentLine.charAt(index);
200            if (status == TokenParseStatus.start) {
201                if (isSymbolLetter(ch)) {
202                    status = TokenParseStatus.inSymbol;
203                    buf.append(ch);
204                    ++ index;
205                } else if (ch == '(') {
206                    ++ index;
207                    return new Token (TokenType.leftParenthese, "(");
208                } else if (ch == ')') {
209                    ++ index;
210                    return new Token (TokenType.rightParenthese, ")");
211                } else if (ch == ',') {
212                    ++ index;
213                    return new Token (TokenType.comma, ",");
214                } else if (ch == ' ' || ch == '\t') {
215                    ++ index;
216                } else if (ch == '[') {
217                    status = TokenParseStatus.inOutFlag;
218                    ++ index;
219                } else if (ch == ';') {
220                    ++ index;
221                    String str = currentLine.substring(index);
222                    index = currentLine.length();
223                    return new Token (TokenType.comment, str);
224                } else {
225                    throw new InvalidSyntaxException ("Enexpected character: " + ch);
226                }
227            } else if (status == TokenParseStatus.inSymbol) {
228                if (isSymbolLetter(ch)) {
229                    buf.append(ch);
230                    ++ index;
231                } else {
232                    return new Token (TokenType.symbol, buf.toString());
233                } 
234            } else if (status == TokenParseStatus.inOutFlag) {
235                if (isSymbolLetter(ch)) {
236                    buf.append (ch);
237                    ++ index;
238                } else if ( ch == ']') {
239                    ++ index;
240                    String str = buf.toString ();
241                    if (! ("In".equals(str) || "Out".equals(str))) {
242                        throw new InvalidSyntaxException ("Invalid in/out flag.");
243                    }
244                    return new Token (TokenType.inOutFlag, str);
245                }
246            }
247        }
248        if (status == TokenParseStatus.inSymbol) {
249            return new Token (TokenType.symbol, buf.toString());
250        }
251        return null;
252    }
253
254    private boolean isSymbolLetter(char ch) {
255        return Character.isLetter(ch) || Character.isDigit(ch);
256    }
257}

相比之下,第一种方法相形见绌。
想必这也是很多“大鸟”找不到合适人选的原因吧。
上面两种方法不用多说,大家一看就知道好在哪里,同时还是编程思想的截然不同。
posted @ 2006-12-01 10:13 黑咖啡 阅读(446) | 评论 (0)编辑 收藏
Oracle的Blob字段比较特殊,他比long字段的性能要好很多,可以用来保存例如图片之类的二进制数据。

  写入Blob字段和写入其它类型字段的方式非常不同,因为Blob自身有一个cursor,你必须使用cursor对blob进行操作,因而你在写入Blob之前,必须获得cursor才能进行写入,那么如何获得Blob的cursor呢?

  这需要你先插入一个empty的blob,这将创建一个blob的cursor,然后你再把这个empty的blob的cursor用select查询出来,这样通过两步操作,你就获得了blob的cursor,可以真正的写入blob数据了。

  看下面的JDBC的demo,把oraclejdbc.jar这个二进制文件写入数据库表javatest的content字段(这是一个blob型字段)

  import java.sql.*;
  import java.io.*;
  import oracle.sql.*;
  public class WriteBlob {

  public static void main(String[] args) {

  try {
  DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
  Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","fankai","fankai");
  conn.setAutoCommit(false);

  BLOB blob = null;

  PreparedStatement pstmt = conn.prepareStatement("insert into javatest(name,content) values(?,empty_blob())");
  pstmt.setString(1,"fankai");
  pstmt.executeUpdate();
  pstmt.close();

  pstmt = conn.prepareStatement("select content from javatest where
  }
posted @ 2006-11-10 11:45 黑咖啡 阅读(2261) | 评论 (1)编辑 收藏

我用过的2个:

1.xtreexloadtree,总体来说,实现还不错,提供了一次性构建树,和动态加载树(生成指定格式的XML才可以),改变Style,功能中等,用法中等.

2.yuitreeview,这也是不错的实现,是Yahoo提供的,支持一次性构建,动态构建,改变Style,Menu样式等等,功能很多,但用法比较复杂


没用过,只是听说的

3.dtree,比较中规中矩的一个实现,用法简单,不支持动态加载。



还有其他的好的js,大家可以补充。

posted @ 2006-11-09 16:13 黑咖啡 阅读(771) | 评论 (0)编辑 收藏
   

 
Oracle8i中使用Java语言来开发存储过程
本篇文章来源与时代朝阳数据库(原晓通数据库)培训部Oracle 资料库。
在Oracle8i之前,开发人员只能使用PL/SQL来开发存储过程。而在Oracle8i之中,不仅可以使用原有的PL/SQL开发存储过程,而且也可以使用Java语言来开发存储过程。本篇文章将简单介绍关于这方面的知识,包括以下内容:
 
l         存储过程简介;
l         Java存储过程
l         Java存储过程的开发步骤
l         使用Java开发过程;
l         使用Java开发函数;
l         使用Java开发包;
l         使用Java开发触发器;
l         使用Java开发对象方法;
l         使用JDeveloper开发JSP。 存储过程简介
存储过程是存储在数据库中的一段存储程序。当创建存储过程时,系统会对其进行编译,并将执行代码存储到数据库中。
 
1.         设计存储过程的方针
 
l         在定义存储过程时,要使用其完成单一、相对集中的任务。
l         在定义存储过程时,不要定义已经由其它特征所提供功能的过程。例如,不要定义强制数据完整性的过程(使用完整性约束)。
 
2.         存储过程的优点
1)        安全性
 
当创建了存储过程之后,可以将执行该过程的权限授予其它用户,从而使得他可以执行特定的数据库操作,而不能访问其它模式对象(例如表)。例如,你可以将执行过程(更新表)的权限授予其它用户,但不授予它们直接访问该表的权限。
 
2)        性能
 
l         存储过程只被发送到数据库一次,相对于SQL语句或PL/SQL块而言,其网络通信量更小。
l         当调用存储过程时,数据库会直接运行该存储过程,无需进行编译。相对于SQL语句或PL/SQL块而言,其执行速度更快。
 
3)        内存分配
 
存储过程充分利用了Oracle共享内存的能力。在将存储过程装载到内存中后,多个用户可以同时调用该存储过程,从而降低了应用对Oracle的实际内存需求。
 
4)        生产力
 
存储过程提高了开发生产力。通过将公共集合编写为存储过程,避免了冗余代码,从而提高了开发生产力。例如,我们可以编写用于插入、更新、删除AUTHS表的过程,此后应用可以直接调用这些过程,而无需重写SQL语句。当管理数据的方法发生变化时,只需要修改过程,而不需要对应用进行任何修改。 Java存储过程
在以前的Oracle版本中,开发存储过程是通过PL/SQL来完成的。而在Oracle8i版本中,我们不仅可以使用PL/SQL开发存储过程,而且还可以使用Java语言来开发存储过程。
 
1.         PL/SQL与Java存储过程比较
 
与PL/SQL相比,使用Java语言开发存储过程有以下优点:
 
l         Java语言具有更强大的运算能力,提供了更多的运算方法。当要完成进行复杂运算的存储过程时,使用JSP将是你最好的选择。
l         PL/SQL只能用于Oracle数据库,而Java语言可以应用于更多的数据库系统(如Sybase、DB2、Informix等等),所以Java存储过程将具有更好的兼容性、可移植性。
 
2.         JSP分类
Java存储过程包括过程、函数、触发器以及对象方法四种类型。
 
3.         调用JSP的四种方法
 
l         CALL语法;
l         DML语句;
l         PL/SQL块、子程序、包;
l         由触发器隐含调用。 Java存储过程的开发步骤
1.         编写Java源代码
 
当开发Java存储过程时,首先应该编写Java源代码。如下图所示:
注意事项:
 
l          当以public方式声明类时,类名必须与其文件名完全一致。
l          只有public static方法可以作为Java存储过程。
 
2.         装载Java代码及类到Oracle8i数据库中
在编写了Java源代码之后,接下来应该将Java代码及相应的Java类装载到Oracle8i数据库中。如下图所示:
装载Java代码及类到RDBMS有以下两种方法:
 
l         使用loadjava工具,通过该工具可以快速装载Java源代码(.java)、Java二进制代码(.class)以及Java打包文件(.jar)。
l         使用CREATE Java、ALTER Java装载Java代码。
 
其中,前一种方法相对简单,并且我们推荐你使用这种方法。
 
3.         生成调用说明
 
在装载了Java类之后,接下来应该生成对public static方法的调用说明,最终完成Java存储过程的开发工作。如下图所示:
 
完成上述步骤之后,就完成了Java存储过程的开发工作,然后就可以调用并执行该Java存储过程了。 使用Java开发过程
过程用于执行某种操作。需要注意的是,过程所对应的Java方法返回值必须为空(void)。本节以创建用于插入、修改和删除AUTHS表的JSP为例,说明使用Java开发过程的方法。如下图所示:
下面讲述完成上述任务的方法及过程:
 
1.         编写Java源代码
 
程序清单如下(manipulate_auths.java):
 
/* 导入Java类 */
import java.sql.*;
import java.io.*;
import oracle.jdbc.driver.*;
 
/* 主类 */
public class manipulate_auths {
 
  public static void insert_auths
    (String code,String name,int sex,String birthdate,String entry_date_time)
  throws SQLException {
 
    /* 建立到数据库的缺省连接 */
    Connection conn = new OracleDriver().defaultConnection();
    /* 构造动态SQL语句 */
String sql = "INSERT INTO auths
 (author_code,name,sex,birthdate,entry_date_time) " +
                 "VALUES (?,?,?,?,?)";
    /* 使用try ... catch语句抓取并抛出例外 */
    try {
      /* 准备动态SQL语句 */
      PreparedStatement pstmt = conn.prepareStatement(sql);
      /* 设置动态SQL参数值 */
      pstmt.setString(1, code);
      pstmt.setString(2, name);
      pstmt.setInt(3, sex);
      pstmt.setString(4, birthdate);
      pstmt.setString(5, entry_date_time);
      /* 执行动态SQL语句 */
      pstmt.executeUpdate();
      /* 关闭动态SQL语句 */
      pstmt.close();
    } catch (SQLException e) { }
  }
 
  public static void delete_auths (String code)
  throws SQLException {
 
    /* 建立到数据库的缺省连接 */
    Connection conn = new OracleDriver().defaultConnection();
    /* 构造动态SQL语句 */
    String sql = "DELETE FROM auths  WHERE author_code = ?";
    /* 使用try ... catch语句抓取并抛出例外 */
    try {
      /* 准备动态SQL语句 */
      PreparedStatement pstmt = conn.prepareStatement(sql);
      /* 设置动态SQL参数值 */
      pstmt.setString(1, code);
      /* 执行动态SQL语句 */
      pstmt.executeUpdate();
      /* 关闭动态SQL语句 */
      pstmt.close();
    } catch (SQLException e) { }
  }
 
  public static void modify_salary (String code,float salary)
  throws SQLException {
 
    /* 建立到数据库的缺省连接 */
    Connection conn = new OracleDriver().defaultConnection();
    /* 构造动态SQL语句 */
    String sql = "UPDATE auths SET salary = ? WHERE author_code = ?";
    /* 使用try ... catch语句抓取并抛出例外 */
    try {
      /* 准备动态SQL语句 */
      PreparedStatement pstmt = conn.prepareStatement(sql);
      /* 设置动态SQL参数值 */
      pstmt.setFloat(1, salary);
      pstmt.setString(2, code);
      /* 执行动态SQL语句 */
      pstmt.executeUpdate();
      /* 关闭动态SQL语句 */
      pstmt.close();
    } catch (SQLException e) { }
  }
}
2.         装载Java代码及类到Oracle8i数据库中
 
在编写了Java源代码之后,就可以将Java对象装载到Oracle8i数据库中了。下面是完成这项任务的方法:
 

 
3.         发行Java,生成调用说明
 
在装载了Java类后,就可以发行该Java类,并生成调用其方法的过程说明了。下面是完成该项任务的方法:
 




 
4.         调用JSP
在生成了调用Java方法的过程说明之后,我们就可以调用JSP了。例如:
 

使用Java开发函数
函数用于返回特定数据。本节将通过创建用于返回作者的文章标题,以及某种类型的文章个数为例,说明使用Java开发函数的方法。如下图所示:
 
 
下面讲述完成上述任务的方法和过程。
 
1.         编写Java源代码
 
程序清单如下(query_article.java):
 
/* 导入Java类 */
import java.sql.*;
import java.io.*;
import oracle.jdbc.driver.*;
 
/* 主类 */
public class query_article {
 
  public static String auths_article(String code)
  throws SQLException {
 
    /* 建立到数据库的缺省连接 */
    Connection conn = new OracleDriver().defaultConnection();
    /* 构造动态SQL语句 */
    String sql1 = "SELECT name FROM auths WHERE author_code=?";
    String sql2 = "SELECT title FROM article WHERE author_code=?";
    /* 声明并初始化auths_article变量 */
    String auths_article = new String();
    /* 使用try ... catch语句抓取并抛出例外 */
    try {
      /* 准备动态SQL语句 */
      PreparedStatement pstmt = conn.prepareStatement(sql1);
      /* 设置动态SQL参数值 */
      pstmt.setString(1, code);
      /* 执行查询,并将结果保存到结果集中 */
      ResultSet rset = pstmt.executeQuery();
      /* 循环获取并处理结果集数据 */
      while(rset.next())
        auths_article =auths_article + rset.getString(1);
      /* 关闭结果集 */
      rset.close();
      /* 关闭动态SQL语句 */
      pstmt.close();
    } catch (SQLException e) {}
    auths_article = auths_article + "所编写文章的标题如下:\n";
 
    try {
      /* 准备动态SQL语句 */
      PreparedStatement pstmt = conn.prepareStatement(sql2);
      /* 设置动态SQL参数值 */
      pstmt.setString(1, code);
      /* 执行查询,并将结果保存到结果集中 */
      ResultSet rset = pstmt.executeQuery();
      /* 循环获取并处理结果集数据 */
      while(rset.next()) {
        auths_article =auths_article + "    " + rset.getString(1) + "\n";
      }
      /* 关闭结果集 */
      rset.close();
      /* 关闭动态SQL语句 */
      pstmt.close();
    } catch (SQLException e) {}
    return auths_article;
  }
 
  public static String query_type_article_number(String code)
  throws SQLException {
 
    /* 建立到数据库的缺省连接 */
    Connection conn = new OracleDriver().defaultConnection();
    /* 构造动态SQL语句 */
    String sql = "SELECT count(*) FROM article WHERE article_code IN "
       + "(SELECT article_code FROM article_type WHERE type_code=?)";
    String article_number = new String("类型为" + code + "的文章共有 ");
    /* 使用try ... catch语句抓取并抛出例外 */
    try {
      /* 准备动态SQL语句 */
      PreparedStatement pstmt = conn.prepareStatement(sql);
      /* 设置动态SQL参数值 */
      pstmt.setString(1, code);
      /* 执行查询,并将结果保存到结果集中 */
      ResultSet rset = pstmt.executeQuery();
      /* 循环获取并处理结果集数据 */
      while(rset.next())
        article_number = article_number + rset.getString(1) + "篇";
      /* 关闭结果集 */
      rset.close();
      /* 关闭动态SQL语句 */
      pstmt.close();
    } catch (SQLException e) {}
    return article_number;
  }
}
 
2.         装载Java代码及类到Oracle8i数据库中
 
在编写了Java源代码之后,就可以将Java对象装载到Oracle8i数据库中了。下面是完成这项任务的方法:

 
3.         发行Java,生成调用说明
 
在装载了Java类后,就可以发行该Java类,并生成调用其方法的函数说明了。下面是完成该项任务的方法:
 


 
4.         调用JSP
 
在生成了调用Java方法的函数说明之后,就可以调用这些函数了。例如:
 
使用Java开发
Java类用于封装Java方法,与此类似,包用于封装过程和函数等。本节将通过创建用于管理表subject的包为例,说明使用Java开发包的方法。如下图所示:
 

 
下面讲述完成上述任务的方法和过程。
 
1.         编写Java源代码
 
程序清单如下(manage_subject.java):
 
/* 导入Java类 */
import java.sql.*;
import java.io.*;
import oracle.jdbc.driver.*;
 
/* 主类 */
public class manage_subject {
 
  public static String query_subject()
  throws SQLException {
    /* 建立到数据库的缺省连接 */
    Connection conn = new OracleDriver().defaultConnection();
    /* 构造SQL语句 */
    String sql = "SELECT * FROM subject";
    /* 声明并初始化subject变量 */
    String subject = new String();
    /* 使用try ... catch语句抓取并抛出例外 */
    try {
      /* 创建Statement对象 */
      Statement stmt = conn.createStatement();
      /* 执行SQL语句,并将查询结果赋给结果集 */
      ResultSet rset = stmt.executeQuery(sql);
      /* 循环获取并处理结果集变量 */
      while(rset.next())
        subject = subject + rset.getString(1) + "\n";
      /* 关闭结果集 */
      rset.close();
    } catch (SQLException e) {}
    return subject;
  }
 
  public static void insert_subject(String subject)
  throws SQLException {
 
    /* 建立到数据库的缺省连接 */
    Connection conn = new OracleDriver().defaultConnection();
    /* 构造动态SQL语句 */
    String sql = "INSERT INTO subject VALUES(?)";
    /* 使用try ... catch语句抓取并抛出例外 */
    try {
      /* 准备动态SQL语句 */
      PreparedStatement pstmt = conn.prepareStatement(sql);
      /* 设置动态SQL参数值 */
      pstmt.setString(1, subject);
      /* 执行动态SQL语句 */
      pstmt.executeUpdate();
      /* 关闭动态SQL语句 */
      pstmt.close();
    } catch (SQLException e) {}
  }
 
  public static void delete_subject(String subject)
  throws SQLException {
 
    /* 建立到数据库的缺省连接 */
    Connection conn = new OracleDriver().defaultConnection();
    /* 构造动态SQL语句 */
    String sql = "DELETE FROM subject WHERE subject=?";
    /* 使用try ... catch语句抓取并抛出例外 */
    try {
      /* 准备动态SQL语句 */
      PreparedStatement pstmt = conn.prepareStatement(sql);
      /* 设置动态SQL参数值 */
      pstmt.setString(1, subject);
      /* 执行动态SQL语句 */
      pstmt.executeUpdate();
      /* 关闭动态SQL语句 */
      pstmt.close();
    } catch (SQLException e) {}
  }
 
  public static void update_subject(String old_subject,String new_subject)
  throws SQLException {
 
    /* 建立到数据库的缺省连接 */
    Connection conn = new OracleDriver().defaultConnection();
    /* 构造动态SQL语句 */
    String sql = "UPDATE subject SET subject=? WHERE subject=?";
    /* 使用try ... catch语句抓取并抛出例外 */
    try {
      /* 准备动态SQL语句 */
      PreparedStatement pstmt = conn.prepareStatement(sql);
      /* 设置动态SQL参数值 */
      pstmt.setString(1, new_subject);
      pstmt.setString(2, old_subject);
      /* 执行动态SQL语句 */
      pstmt.executeUpdate();
      /* 关闭动态SQL语句 */
      pstmt.close();
    } catch (SQLException e) {}
  }
}
 
2.         装载Java代码及类到Oracle8i数据库中
 
在编写了Java源代码之后,就可以将Java对象装载到Oracle8i数据库中了。下面是完成这项任务的方法:
 


 
3.         发行Java,生成调用说明
 
在装载了Java类后,就可以发行该Java类,并生成调用其方法的包了。下面是完成该项任务的方法:



4.         调用JSP
 
在生成了调用Java方法的包后,就可以调用这些方法所对应的函数和过程了。例如:
 




使用Java开发触发器
触发器是一段存储程序,当执行特定修改操作时,会触发它,并执行其中的存储程序。下面以记载表AUTHS作者工资更新情况的触发器为例,说明使用Java开发触发器的方法。如下图所示:
 


 
下面讲述完成上述任务的方法和过程。
 
1.         编写Java源代码
 
程序清单如下(trigger.java):
 
/* 导入Java类 */
import java.sql.*;
import java.io.*;
import oracle.jdbc.driver.*;
/* 主类 */
public class trigger {
 
  public static void log_salary(String name,float old_sal,float new_sal)
  throws SQLException {
 
    /* 建立到数据库的缺省连接 */
    Connection conn = new OracleDriver().defaultConnection();
    String sql = "INSERT INTO salary_audit VALUES(?,?,?)";
 
    /* 使用try ... catch语句抓取并抛出例外 */
    try {
      PreparedStatement pstmt = conn.prepareStatement(sql);
      pstmt.setString(1, name);
      pstmt.setFloat(2, old_sal);
      pstmt.setFloat(3, new_sal);
      pstmt.executeUpdate();
      pstmt.close();
    } catch (SQLException e) {}
  }
}
 
2.         装载Java代码及类到Oracle8i数据库中
 
在编写了Java源代码之后,就可以将Java对象装载到Oracle8i数据库中了。下面是完成这项任务的方法:
 


3.         发行Java,生成调用说明
 
在装载了Java类后,就可以发行该Java类,并生成调用其方法的过程说明及触发器了。下面是完成该项任务的方法:




 
4.         调用JSP
 
在创建了触发器之后,当修改作者工资时会自动调用其中的存储程序。例如:
 

使用Java开发对象方法
对象类型是一种用户自定义的数据结构,它可以将数据类型、函数以及过程封装到该数据结构中。对象方法是指对象类型中的函数和过程,本节将以获取和增加对象工资信息为例,说明使用Java开发对象方法的方法。如下图所示:

 
下面讲述完成上述任务的方法及过程:
 
1.         编写Java源代码
 
程序清单如下(object_type.java):
 
/* 导入Java类 */
import java.sql.*;
import java.io.*;
import oracle.sql.*;
import oracle.jdbc.driver.*;
import oracle.oracore.*;
import oracle.jdbc2.*;
import java.math.*;
 
/* 主类,实现了SQLData接口 */
public class object_type implements SQLData {
 
  /* 声明private变量,它们对应于对象类型的属性 */
  private String code;
  private String name;
  private BigDecimal sex;
  private BigDecimal salary;
 
  /* 方法get_name():对象类型的方法,用于获取对象姓名 */
  public String get_name() {
    return name;
  }
 
  /* 方法get_salary():对象类型的方法,用于获取对象工资 */
  public BigDecimal get_salary() {
    BigDecimal sal = salary;
    return sal;
  }
  /* 方法raise_salary():对象类型的方法,用于增加对象工资 */
  public void raise_salary(BigDecimal raise) {
    salary = salary.add(raise);
  }
 
  /* 以下程序段实现了接口SQLData */
  String sql_type;
  public String getSQLTypeName() throws SQLException {
    return sql_type;
  }
 
  public void readSQL(SQLInput stream, String typeName) throws SQLException {
    sql_type = typeName;
    code = stream.readString();
    name = stream.readString();
    sex = stream.readBigDecimal();
    salary = stream.readBigDecimal();
  }
 
  public void writeSQL(SQLOutput stream) throws SQLException {
    stream.writeString(code);
    stream.writeString(name);
    stream.writeBigDecimal(sex);
    stream.writeBigDecimal(salary);
  }
}
 
2.         装载Java代码及类到Oracle8i数据库中
 
在编写了Java源代码之后,就可以将Java对象装载到Oracle8i数据库中了。下面是完成这项任务的方法:
 


 
3.         发行Java,生成调用说明
 
在装载了Java类后,就可以发行该Java类,并生成调用其方法的相应对象方法了。下面是完成该项任务的方法:
 



 
4.         调用JSP
 
在创建了对象类型及对象方法之后,就可以调用这些对象方法了。例如:
 
使用JDeveloper开发JSP
本节以创建用于操纵ARTICLE表的JSP为例,说明使用JDeveloper 2.0开发JSP的方法。如下图所示:

这里只简单介绍使用JDeveloper开发JSP的过程和步骤,而关于如何使用JDeveloper请读者参见相关手册。
 
1.         准备工作
 
1)        选择“File—> New Workspace”,创建名称为jsp.jws的工作组。如下图所示:
 

 
2)        选择“File—>New Project”,此时会启动新项目创建向导,并显示如下对话框:
 

 
3)        选中“Create an <Empty Project>”,然后单击“Next”,此时会显示如下对话框:

 
4)        如上图所示,在“Project Name”框中键入“article”,项目路径框中键入“d:\jsp”,然后单击“Next”,此时会显示如下对话框:
 

 
5)        在上图的对话框中键入你所需要的信息,然后单击“Next”,此时会显示如下对话框:
 

 
6)        单击“Finish”,完成项目的创建过程,此时的图形界面如下:
 

 
2.         编写Java源代码
 
在完成了准备工作之后,我们就可以编写Java源代码了。步骤如下:
 
1)        选择“File—>New”,此时会弹出如下对话框:
 


 
2)        如上图所示,选中“Class”,然后单击“OK”,此时会弹出如下对话框:
 

 
3)        如上图所示,在“Class Name”框中键入“article”,选中“Style”中的“Public”,然后单击“OK”,此时会增加名称为“article.java”的节点。如下图所示:
 

 
4)        双击“article.java”节点,会显示编辑工作区。如下图所示:
 

 
5)        然后,在编辑工作区中编写如下的Java源代码(article.java):
 
/* 导入Java类 */
import java.sql.*;
import java.io.*;
import oracle.jdbc.driver.*;
 
/* 主类 */
public class article {
 
  public static String query_article(String code)
  throws SQLException {
    /* 建立到数据库的缺省连接 */
    Connection conn = new OracleDriver().defaultConnection();
    /* 构造动态SQL语句*/
    String sql = "SELECT author_code,title FROM article " +
                  "WHERE article_code = ?";
    /* 声明String变量article_info,该变量将用于存储文章信息 */
    String article_info = new String();
 
    /* 使用try ... catch语句抓取并抛出例外 */
    try {
      /* 准备动态SQL语句 */
      PreparedStatement pstmt = conn.prepareStatement(sql);
      /* 设置动态SQL参数值 */
      pstmt.setString(1, code);
      ResultSet rset = pstmt.executeQuery();
      /* 循环获取并处理结果 */
      while(rset.next()) {
        article_info = "作者代码:  " + rset.getString(1) + "\n";
        article_info = article_info + "文章标题:  " +
                          rset.getString(2);
      }
      /* 关闭结果集 */
      rset.close();
      /* 关闭动态SQL语句 */
      pstmt.close();
    } catch (SQLException e) {}
    return article_info;
  }
 
  public static void insert_article(String article_code,
      String author_code,String secrate_level,String pub_date)
  throws SQLException {
    /* 建立到数据库的缺省连接 */
    Connection conn = new OracleDriver().defaultConnection();
    /* 构造动态SQL语句 */
    String sql = "INSERT INTO article (article_code,author_code," +
                    "secrate_level,pub_date) VALUES (?,?,?,?)";
    /* 使用try ... catch语句抓取并抛出例外 */
    try {
      /* 准备动态SQL语句 */
      PreparedStatement pstmt = conn.prepareStatement(sql);
      /* 设置动态SQL参数值 */
      pstmt.setString(1, article_code);
      pstmt.setString(2, author_code);
      pstmt.setString(3, secrate_level);
      pstmt.setString(4, pub_date);
      pstmt.executeUpdate();
      /* 关闭动态SQL语句 */
      pstmt.close();
    } catch (SQLException e) {}
  }
 
  public static void delete_article (String code)
  throws SQLException {
    /* 建立到数据库的缺省连接 */
    Connection conn = new OracleDriver().defaultConnection();
    /* 构造SQL语句 */
    String sql = "DELETE FROM article  WHERE article_code = ?";
    /* 使用try ... catch语句抓取并抛出例外 */
    try {
      /* 准备动态SQL语句 */
      PreparedStatement pstmt = conn.prepareStatement(sql);
      /* 设置动态SQL参数值 */
      pstmt.setString(1, code);
      pstmt.executeUpdate();
      /* 关闭动态SQL语句 */
      pstmt.close();
    } catch (SQLException e) {}
  }
 
  public static void update_article (String code,String secrate_level)
  throws SQLException {
    /* 建立到数据库的缺省连接 */
    Connection conn = new OracleDriver().defaultConnection();
    /* 构造动态SQL语句 */
    String sql = "UPDATE article SET secrate_level = ?" +
                  " WHERE article_code = ?";
    /* 使用try ... catch语句抓取并抛出例外 */
    try {
      /* 准备动态SQL语句 */
      PreparedStatement pstmt = conn.prepareStatement(sql);
      /* 设置动态SQL参数值 */
      pstmt.setString(1, secrate_level);
      pstmt.setString(2, code);
      pstmt.executeUpdate();
      /* 关闭动态SQL语句 */
      pstmt.close();
    } catch (SQLException e) {}
  }
}
 
3.         配置并发行JSP
 
步骤如下:
 
1)        选择“Project—>Deploy—>New Profile”,此时会弹出如下对话框:
 

 
2)        如上图所示,选中“Deploy Java Classes and Stored Procedure to Oracle8i”,然后单击“Next”,此时会弹出如下对话框:
 

 
3)        单击“Next”,此时会弹出如下对话框:
 

 
4)        单击“Next”,此时会显示如下对话框:
 

 
5)        单击“Next”,此时会显示如下对话框:
 

 
6)        清除“Default Database Package”框,然后单击“Next”,此时会显示如下对话框:
 

 
7)        单击“New”创建数据库连接,此时会弹出如下对话框:
 

 
该对话框用于配置数据库连接信息,按照你的数据库设置来配置相应参数。完成数据库连接的配置后,单击“Test Connection”测试配置是否正确。如果配置不正确,则修改配置参数。
 
8)        单击“OK”,此时会弹出如下对话框:
 

 
在该对话框中显示了相应的数据库连接信息。
 
9)        单击“Next”,此时会弹出如下对话框:
 

 
10)     单击“Finish”,此时会弹出如下对话框:
 

 
11)     单击“No”退出配置,然后在主窗口中选中配置文件“Profile1.prf”,单击鼠标右键,此时会显示如下弹出菜单:
 

 
12)     从弹出菜单中选择“Properties”,此时会显示如下对话框:
 

 
13)     选择“Methods”页,此时的对话框如下所示:
 

 
14)     如上图所示,选中Publish下的所有单选框,然后单击“Done”,此时会显示如下对话框:
 

 
15)     单击“Yes”,会开始配置和发行JSP,并最终显示如下界面:
 

 
16)     单击“Done”,此时会显示如下信息框:
 

 
17)     单击“OK”,这样我们就完成了配置和发行JSP的全部过程了。然后,我们就可以调用JSP完成相应任务了。
 
4.         调用JSP
 
在创建了基于Java的函数和过程之后,就可以调用这些函数和过程了。方法如下:
 





posted @ 2006-08-16 15:18 黑咖啡 阅读(308) | 评论 (0)编辑 收藏
Oracle开发人员 JAVA存储过程
利用Java存储过程简化数据库操作

作者:Kuassi Mensah

利用Java存储过程沟通SQL、XML、Java、J2EE和Web服务。

存储过程(stored procedure)允许将运行于数据库层中的持久性逻辑与运行于中间层中的商务逻辑有效地分离开来。这种分离可以降低整个应用程序的复杂性,并提供其重用性、安全性、性能和可伸缩性。

但是,妨碍存储过程广泛采用的一个主要障碍是不同数据库厂商使用各种专有的、且依赖于数据库的实现语言。使用基于Java的存储过程可以解决这一问题。Oracle已经实现了ANSI标准,这些标准规定了从SQL中将静态Java方法作为过程或函数进行调用的能力。这种实现被简单地称作"Java存储过程"。

在本文中,你将了解基于Java的存储过程如何帮助简化商务逻辑、提高其性能,并扩展数据库的功能。本文将介绍Oracle如何在数据库内启用基于Java的存储过程。还会介绍Java存储过程如何访问数据,以及如何创建基本Java存储过程。

选择PL/SQL还是Java

在考虑Oracle存储过程时,你可能会想到PL/SQL。不过,从Oracle8i开始,Oracle已经在数据库中支持Java,从而为存储过程提供了不同于PL/SQL的开放式和可移植的方法。我可以听到"$64 000问题":"我如何在PL/SQL和Java之间做出选择?我是否应当忘记已经学习的所有PL/SQL相关知识,而变为一个Java天地的新手?"

两种语言都适用于数据库编程,都有自己的优点和弱点。在决定选择哪一种语言时,可以参考下面根据经验得出的通用规则:


对于要求与SQL进行无缝集成的数据库中心来说则逻辑使用PL/SQL,从而完成对数据库对象、类型和特性的访问。


出于与数据库的无关性考虑时,可以选择Java作为开放式的语言来取代PL/SQL,同时也为了集成和沟通SQL、XML、J2EE和Web服务等各个领域。
OralceJVM使得Java可以运行在数据库中

从Oracle8i版本1(Oralce8.1.5)开始,Oracle便提供紧密集成的Java虚拟机(JVM),JVM支持Oralce的数据库会话期结构。任何数据库对话期都可以在第一Java代码调用时启动一个虚拟上专用的JVM,后续的用户可以使用这一已经存在的支持Java的会话期。事实上,所有会话共享同一JVM代码并保持"仅静态"的私有状态,而垃圾则收集在单个对话期空间内,从而为各个Java对话期提供了和SQL操作相同的对话期隔离和数据完整性能力。这里,不需要为了数据完整性而进行单独的Java支持的过程。这一基于对话期的结构提供了较小的内存占用率,并使OracleJVM具有与Oracle数据库一样的线性SMP可伸缩性。

创建Java存储过程

要将Java方法转换为Java存储过程需要几个步骤,包括:用loadjava实用程序将Java类加载到数据库中,利用调用规范(Call Spec)发布Java方法,将Java方法、参数类型和返回类型映射到其SQL的对应部分。下面部分说明如何完成这些步骤。

我将使用一个简单的Hello类,它有一个方法Hello.world(),返回字符串"Hello world":


public class Hello { public static String world () { return "Hello world"; } }
Loadjava 实用程序

Loadjava是加载Java源文件、Java类文件和Java资源文件的实用程序,它可以用来验证字节码,并将Java类和JAR文件布置到数据库中。它既可以通过命令行调用,也可以通过包含于DBMS_JAVA类中的loadjava()方法调用。为了加载我们的Hello.class示例,输入:


loadjava -user scott/tiger Hello.class

从Oracle9i版本2开始,loadjava允许通过为包含在被处理的类中的方法创建相应的Call Specs来自动将Java类发布为存储过程。Oracle为开发、测试、调试和布置Java存储过程提供了Oracle9i JDeveloper。

The Resolver Spec

基于JDK的JVM在列于CLASSPATH中的目录中查找类引用,并对其进行解析。因为Oracle数据库类存在于数据库模式中,所以OracleJVM利用数据库解析器(resolver)通过列于Resolver Spec中的模式查找并解析类引用。与CLASSPATH不同(CLASSPATH可以应用于所有的类),Resover Spec根据每类的情况进行应用。缺省解析器首先在加载类的模式中搜寻类,然后在公共同义词(public synonyms)中搜索。


 loadjava -resolve <myclass>
你可能需要指定不同的解析器,也可以在使用loadjava时强制进行解析,从而在布置时确定可能在以后运行时发生的任何问题。


loadjava -resolve -resolver "((* SCOTT) (foo/bar/* OTHERS) (* PUBLIC))"
Call Spec和存储过程调用

为了从SQL中调用Java方法(以及从PL/SQl和JDBC中调用),必须首先通过Call Spec发布公共静态方法,它为SQL定义方法采用的参数以及返回的SQL类型。

在我们的例子中,我们将利用SQL*Plus连接到数据库,并为Hello.world()定义一个顶级Call Spec:


SQL> connect scott/tiger SQL> create or replace function helloworld return VARCHAR2 as language java name 'Hello.world () return java.lang.String'; / Function created.
可以像下面这样调用Java存储过程:


SQL> variable myString varchar2[20]; SQL> call helloworld() into :myString; Call completed. SQL> print myString; MYSTRING --------------------- Hello world
Java存储过程可以通过其Call Spec从以下各项中进行调用:SQL DML语句(INSERT, UPDATE、DELETE、SELECT、CALL、EXPLAIN PLAN、LOCK TABLE和MERGE)、PL/SQL块、子程序、程序包以及数据库触发器。Call Spec的美妙之处在于存储过程实现可以从PL/SQL转换为Java,反之亦可,这一点对于请求者是透明的。

Call Spec从实现语言中(PL/SQL或Java)中抽象出调用界面,因而使之能够在原有应用程序和新的基于Java/J2EE的应用程序之间共享商务逻辑。但是,在从Java客户程序调用在数据库驻留的Java类时,你可能不希望通过PL/SQL包装器(wrapper)。在以后的版本中,Oracle计划提供一种机制,它可以使开发人员略过Call Spec。

高级数据访问控制

Java存储过程可用于控制和限制对Oracle数据的访问,其方法是只允许用户通过存储过程管理数据,而存储过程在其调用者的权限内执行,而不能对表本身进行访问。例如,你可以在特定时间内禁止更新数据,或者使管理者只具有查询工资数据的权利,而不能进行更新,或者记录所有的访问并通知某一安全机构。

原有应用程序与J2EE应用程序之间的数据逻辑共享

因为原有应用程序与J2EE应用程序都通过Call Spec调用存储过程,所以J2EE和非J2EE应用程序可以共享相同的数据逻辑。由于有了Call Spec,所以不用考虑所用的是何种实现语言(无论是PL/SQL还是Java),该数据逻辑都可以共享。

为BMP实体Bean自动生成主关键字

在对EJB实体bean应用BMP时,一个bean实例可以由自动生成的与新插入的数据相关联的主关键字惟一确定,它是ejbCreate()的返回值。可以利用一个插入相应数据的存储过程在一个数据库操作中检索ejbCeater()中的该值,并检索或计算主关键字。作为另一种方法,也可以利用JDBC3.0的RETURN_GENERATED_KEYS特性,以一个SQL语句插入该数据并检索相应的关键字(或ROWID)。但是,存储过程方法在各个JDBC驱动器版本和数据库之间更具可移植性。

可以用以下三个步骤实现这一模式:
>
创建一个Java存储过程,在公共GenPk类中定义一个公共静态Java方法insertAccount()。此方法将插入数据、计算惟一的关键字(通过发出一个序列号),并返回计算出的关键字作为主关键字。


定义Call Spec


CREATE OR REPLACE PROCEDURE insertAccount(owner IN varchar, bal IN number, newid OUT number) AS LANGUAGE JAVA NAME 'GenPK.insertAccount( java.lang.String [])'; /


在ejbCreate()内调用存储过程


Public AccountPK ejbCreate(String ownerName, int balance) throws CreateException { try { CallableStatement call = conn.prepareCall{ "{call insertAccount(?, ?, ?)}"}; return new AccountPK(accountID); } }
为CMP实体Bean定制主关键字查找器

查找器方法(Finder methods)用于检索已存在的EJB实体bean实例。主关键字查找器使你能够检索惟一标识的EJB实例。对于CMP实体bean,EJB容器根据声明描述,自动生成主关键字查找器findByPrimaryKey()方法。但是,在某些情况下,可能需要更多的控制,例如可能需要专门的查找器,如findByStoredProcKey()。在这些情况下,你可以结合使用Java存储过程和对象关系框架(如Oracle9i应用服务器[Oracle9iAS] TopLink)来实现定制的主关键字查找器方法。在将EJB查找器定义为REDIRECT或NAMED查找器后,TopLink将生成一个SQL查询用于检索bean实例。

数据驱动的EJB调用

在数据驱动体系结构中,商务逻辑调用可以作为数据库操作(如插入、更新或删除)的结果来触发。实现该数据逻辑的Java存储过程可以被声明为数据库触发器,用以调用运行于中间层J2EE应用服务器的EJB。EJB的调用既可以采用J2EE1.3兼容的服务器通过Interoperable Inter-ORB Protocol(IIOP)标准远程方法调用(remote method invocation,RMI)实现,也可以通过销售商特定的传输协议(如Oracle9iAS/Oc4J的ORMI,或者通过BEA WebLogic的T3)用RMI来实现。每个应用服务器提供商在提供基于IIOP的RMI,以提供互操作性的同时,都有其自己优化的协议。Oracle9iAS同时支持基于IIOP的RMI调用和基于ORMI协议的RMI调用。

数据驱动的消息传送

Oracle9i数据库嵌入了Advanced Queuing(AQ,高级排队),它是一种集成的、稳定、可靠、安全、可扩展和事务处理式的消息排队框架。Oracle通过标准的Java消息传送系统(Java Messaging System,JMS)API为Java开发人员提供AQ功能。Java存储过程可以通过JMS接口调用AQ操作,从而能够实现快速、在会话期内、可扩展的、数据驱动的消息传送。

Java存储过程可以利用JMS调用AQ操作。可以用以下4个步骤实现这一模式:


创建并启动JMS Queue(为此,可以将以下一些操作嵌入SQL脚本内):


execute dbms_aqadm.create_queue_table(queue_table => 'queue1', queue_payload_type => 'SYS.AQ$_JMS_TEXT_MESSAGE', comment => 'a test queue', multiple_consumers => false, compatible => '8.1.0'); execute dbms_aqadm.create_queue( queue_name => 'queue1', queue_table => 'queue1' ); execute dbms_aqadm.start_queue(queue_name => 'queue1');


创建Java存储过程(代码摘录如下):


public static void runTest(String msgBody) { try { // get database connection ora_drv = new OracleDriver(); db_conn = ora_drv.defaultConnection(); // setup sender (cf online code sample) .. // create message s_msg = s_session.createTextMessage(msgBody); // send message sender.send(s_msg); s_session.commit(); // receive message r_msg = (TextMessage) receiver.receive(); r_session.commit(); // output message text String body = r_msg.getText(); System.out.println("message was '"+body+"'"); ..} }


创建Call Spec:


create or replace procedure jmsproc (t1 IN VARCHAR) as language java name 'jmsSample.main (java.lang.String[])'; /


调用存储过程:


call jmsproc('hello');
数据库辅助的Web发布(缓冲失效)

各应用程序结构必须面对的一个共同问题是如果可靠地将数据库信息进行缓存,以提高整个系统的性能。JCACHE是一种即将公布的标准规范(JSR 107),它可以解决这一问题。它说明了一种对Java对象临时在内存中进行缓存的方法,包括对象的创建、共享访问、假脱机(spooling)、失效、各JVM的一致性等。它可被用于缓存JSP内最经常读取的数据,如产品目录和价格列表。利用JCACHE,多数查询的反应时间会因为有缓存的数据而加快(内部测试表明反应时间大约快15倍)。

为了跟踪原始数据的所有变化,并刷新已缓存的数据,Java存储过程会作为一个触发器被附加在一个表上。这个表的任何变化都会自动调用该存储过程,后者再调出一个已定义的JSP使JCACHE对象失效,该对象将其状态映射到该数据库表。在失效时,紧跟其后的查询将强制缓存器根据数据库的数据进行更新。 下面的步骤
阅读关于Java存储过程的更多信息
本文摘自白皮书"释放Java存储过程的能量(Unleash the Power of Java Stored Procedures)",可以在以下位置找到该白皮书:
otn.oracle.com/tech/java/java_db/pdf/
OW_30820_JAVA_STORED_PROC_paper.PDF

Oracle9i数据库第2版中的新PL/SQL特性
otn.oracle.com/tech/pl_sql/pdf/
Paper_30720_Doc.pdf

Resolver Spec
otn.oracle.com/docs/products/oracle9i/
doc_library/release2/java.920/a96659.pdf

OracleJVM and Java 2 Security
otn.oracle.com/docs/products/oracle9i/
doc_library/release2/java.920/a96656.pdf

下载代码
练习本文中的代码示例:
otn.oracle.com/sample_code/tech/
java/jsp/Oracle9iJSPSamples.html

了解作为Web服务的存储过程
otn.oracle.com/tech/webservices
 


扩展数据库的功能

在数据库中直接运行Java代码的一个妙处就在于要实现新的功能,只需要简单地加载代码或库,并利用Call Spec制作可用于SQL、PL/SQL、Java、J2EE和非Java API的进入点(公共静态方法)。Oracle9i数据库用户可以很容易地扩展数据库

功能。Oracle自己利用这种能力来获得新的应用程序和工具包,如XML Developer Kits(XDKs)。

沟通SQL、PL/SQL、Java、J2EE、.NET和XML

Oracle XDK是用Java编写的,并将其公共方法可用作Java存储过程,从而扩展了数据库的XML可编程能力。SQL、PL/SQL、Java、J2EE和非Java(.NET)商务逻辑都能够访问XML分析器、XSLT处理器、XPath引擎和XML SQL Utility(XSU)。

XML分析器可以通过xmlparser和xmldom包进行访问。XSU是一种Java实用程序,它可以由SQL查询结果或JDBC ResultSet生成XML文档,并将XML文档中的数据写入数据库表或视图中。利用XSU,XML输出可以输出为文本、Dom树或DTS。通过dbms_xmlquery和dbms_xmlsave包,XSU即可用于PL/SQL。

结论

Oracle数据库与Java VM的集成可以创建可移植、功能强大和与数据库无关的数据逻辑和持续性逻辑(persistence logic)。运行于中间层的商务逻辑和运行于数据库层的数据逻辑之间的分离提高了应用程序的可扩展性、灵活性和可维护性。

posted @ 2006-08-16 11:55 黑咖啡 阅读(257) | 评论 (0)编辑 收藏

什么是存储过程呢?

定义:

      将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。

讲到这里,可能有人要问:这么说存储过程就是一堆SQL语句而已啊?

Microsoft公司为什么还要添加这个技术呢?

那么存储过程与一般的SQL语句有什么区别呢?

存储过程的优点:

1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次  就编译一次,所以使用存储过程可提高数据库执行速度。

2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。

3.存储过程可以重复使用,可减少数据库开发人员的工作量

4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权

存储过程的种类:

     1.系统存储过程:以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作,

                               如 sp_help就是取得指定对象的相关信息
  2.扩展存储过程   以XP_开头,用来调用操作系统提供的功能

                              exec master..xp_cmdshell 'ping 10.8.16.1'

   3.用户自定义的存储过程,这是我们所指的存储过程

   常用格式

   Create procedure procedue_name

   [@parameter data_type][output]

   [with]{recompile|encryption}

   as

        sql_statement

解释: 

output:表示此参数是可传回的

with {recompile|encryption}

recompile:表示每次执行此存储过程时都重新编译一次

encryption:所创建的存储过程的内容会被加密

如:

   表book的内容如下

   编号    书名                           价格

   001      C语言入门                   $30

   002      PowerBuilder报表开发  $52

 实例1:查询表Book的内容的存储过程

   create proc query_book

      as

      select * from book

   go

   exec query_book

 实例2:加入一笔记录到表book,并查询此表中所有书籍的总金额

   Create proc insert_book

   @param1 char(10),@param2 varchar(20),@param3 money,@param4 money output

   with encryption  ---------加密

   as

   insert book(编号,书名,价格) Values(@param1,@param2,@param3)
   select @param4=sum(价格) from book
  go

  执行例子:
  declare @total_price money
  exec insert_book '003','Delphi 控件开发指南',$100,@total_price
  print '总金额为'+convert(varchar,@total_price)
  go
存储过程的3种传回值:
   1.以Return传回整数
   2.以output格式传回参数
   3.Recordset
传回值的区别:
       output和return都可在批次程式中用变量接收,而recordset则传回到执行批次的客户端中 

实例3:设有两个表为Product,Order,其表内容如下:
      Product
           产品编号       产品名称    客户订数    
            001             钢笔         30        
            002             毛笔         50        
            003             铅笔         100       
      Order 
           产品编号         客户名     客户订金
            001              南山区      $30
            002              罗湖区      $50
            003              宝安区      $4
请实现按编号为连接条件,将两个表连接成一个临时表,该表只含编号.产品名.客户名.订金.总金额,
总金额=订金*订数,临时表放在存储过程中

代码如下:
     Create proc temp_sale
     as
       select a.产品编号,a.产品名称,b.客户名,b.客户订金,a.客户订数* b.客户订金 as总金额
       into #temptable from Product a inner join Order b on a.产品编号=b.产品编号
    if  @@error=0
       print 'Good'
    else
       print 'Fail'
     go

posted @ 2006-08-16 11:53 黑咖啡 阅读(226) | 评论 (0)编辑 收藏
1、线程 新建线程运行机制。

2、File IO  文件建立,读写,删除。 
posted @ 2006-07-31 17:44 黑咖啡 阅读(240) | 评论 (0)编辑 收藏
     摘要: 1 /**/ /*   2  * Made In GamVan.com   3  * Created on 2005年3月18日, 下午8:37   4 ...  阅读全文
posted @ 2006-07-27 13:03 黑咖啡 阅读(321) | 评论 (0)编辑 收藏
文件的建立/检查与删除

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>文件的建立、检查与删除</title>
</head>
<body>
<%
String path=request.getRealPath("");
//out.println(path);
File f=new File(path,"File.txt");
//out.println(f);
//out.println(f.exists());

if(f.exists()){//检查File.txt是否存在
f.delete();//删除File.txt文件
out.println(path + "\\File.txt 存在,已删除。");
}else{
f.createNewFile();//在当前目录下建立一个名为File.txt的文件
out.println(path + "\\File.txt 不存在,已建立。");//输出目前所在的目录路径
}
%>

  目录的建立/检查与删除

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>目录的建立/检查与删除</title>
</head>
<body>
<%
String path=request.getRealPath("");
path=path + "\\Sub";//将要建立的目录路径
File d=new File(path);//建立代表Sub目录的File对象,并得到它的一个引用
if(d.exists()){//检查Sub目录是否存在
d.delete();
out.println("Sub目录存在,已删除");
}else{
d.mkdir();//建立Sub目录
out.println("Sub目录不存在,已建立");
}
%>
</body>
</html>

  如何在JSP中处理虚拟目录

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>JSP中如何处理虚拟目录</title>
</head>
<body>
取得虚拟目录对应的磁盘路径<br>
Web站点主目录的位置为<font color=#ff0000><%=request.getRealPath("/")%></font><br>
JSP网页所在的目录位置<font color=#ff0000><%=request.getRealPath("./")%></font><br>
JSP网页所在目录上一层目录的位置<font color=#ff0000><%=request.getRealPath("../")%></font><br>
</body>
</html>

文件属性的取得

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.Date,java.io.*"%>
<html>
<head>
<title>文件属性的取得</title>
</head>
<body>
<%
String path=request.getRealPath("/");
File f=new File(path,"ReadData.txt");
if(f.exists()){
%>
<%=f.getName()%>的属性如下:<br><br>
文件长度为:<%=f.length()%>
<%=f.isFile()?"是文件":"不是文件"%><br>
<%=f.isDirectory()?"是目录":"不是目录"%><br>
<%=f.canRead()?"可读取":"不可读取"%><br>
<%=f.canWrite()?"可写入":"不可写入"%><br>
<%=f.isHidden()?"是隐藏文件":"不是隐藏文件"%><br>
文件的最后修改日期为:<%=new Date(f.lastModified())%><br>
<%
}else{
f.createNewFile();//在当前目录下建立一个名为ReaData.txt的文件
%>
<%=f.getName()%>的属性如下:<br><br>
文件长度为:<%=f.length()%>
<%=f.isFile()?"是文件":"不是文件"%><br>
<%=f.isDirectory()?"是目录":"不是目录"%><br>
<%=f.canRead()?"可读取":"不可读取"%><br>
<%=f.canWrite()?"可写入":"不可写入"%><br>
<%=f.isHidden()?"是隐藏文件":"不是隐藏文件"%><br>
文件的最后修改日期为:<%=new Date(f.lastModified())%><br>
<%
}
%>
</body>
</html>

  取出目录中文件的方法

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>取出目录中文件的方法--列出目录中的文件</title>
</head>
<body>
<%
String path=request.getRealPath("/");
File d=new File(path);//建立当前目录中文件的File对象
File list[]=d.listFiles();//取得代表目录中所有文件的File对象数组
out.println("<font color=#ff0000>" + path + "目录下的文件:</font><br>");
for(int i=0;i<list.length;i++){
if(list<I>.isFile()){
out.println(list<I>.getName() + "<br>");
}
}
out.println("<br><font color=#ff0000>" + path + "目录下的目录:</font><br>");
for(int i=0;i<list.length;i++){
if(list<I>.isDirectory()){
out.println(list<I>.getName() + "<br>");
}
}
%>
</body>
</html>

判断是否为空白文件

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>判断是否为空白文件</title>
</head>
<body>
<%
String path=request.getRealPath("/");
out.println(path);
FileReader fr=new FileReader(path + "\\AtEnd.txt");//建立FileReader对象,并实例化为fr
//对FileReader类生成的对象使用read()方法,可以从字符流中读取下一个字符。
if(fr.read()==-1)//判断是否已读到文件的结尾
{
out.print("AtEnd.txt文件中没有数据<br>");
}else{
out.println("AtEnd.txt文件中有数据");
}
fr.close();
%>
</body>
</html>
    <B>读取所有的文件数据</B>
<ccid_nobr>
<table width="400" border="1" cellspacing="0" cellpadding="2"
bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">
<tr>
<td bgcolor="e6e6e6" class="code" style="font-size:9pt">
<pre><ccid_code> <%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*,java.lang.*"%>
<html>
<head>
<title>读取所有的文件数据</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileReader fr=new FileReader(path + "\\ReadData.txt");
//关键在于读取过程中,要判断所读取的字符是否已经到了文件的末尾,
并且这个字符是不是文件中的断行符,即判断该字符值是否为13。
int c=fr.read();//从文件中读取一个字符
//判断是否已读到文件结尾
while(c!=-1){
out.print((char)c);//输出读到的数据
c=fr.read();//从文件中继续读取数据
if(c==13){//判断是否为断行字符
out.print("<br>");//输出分行标签
fr.skip(1);//略过一个字符
//c=fr.read();//读取一个字符
}
}
fr.close();
%>
</body>
</html>

  一行一行读取数据

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>文件读取</title>
</head>
<body>
<%
String path=request.getRealPath("");//取得当前目录的路径
FileReader fr=new FileReader(path + "\\file\\inc\\t.txt");//建立FileReader对象,并实例化为fr
BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象,并实例化为br
String Line=br.readLine();//从文件读取一行字符串
//判断读取到的字符串是否不为空
while(Line!=null){
out.println(Line + "<br>");//输出从文件中读取的数据
Line=br.readLine();//从文件中继续读取一行数据
}
br.close();//关闭BufferedReader对象
fr.close();//关闭文件
%>
</body>
</html>
略过文件中的字符不读取

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>略过字节不读取</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileReader fr=new FileReader(path + "\\ReadData.txt");
fr.skip(2);//跳过2个字节
int c=fr.read();//读取一个字节
while(c!=-1){
out.print((char)c);
c=fr.read();
}
fr.close();
%>
</body>
</html>

  将数据写入文件

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>将数据写入文件</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileWriter fw=new FileWriter(path + "\\WriteData.txt");//建立FileWriter对象,并实例化fw
//将字符串写入文件
fw.write("大家好!");
fw.write("本书是《JSP编程技巧》");
fw.write("请多多指教!");
fw.write("email:stride@sina.com");
fw.close();

FileReader fr=new FileReader(path + "\\WriteData.txt");
BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象,并实例化为br
String Line=br.readLine();
//读取一行数据
out.println(Line + "<br>");
br.close();//关闭BufferedReader对象
fr.close();
%>
</body>
</html>

  将写入文件的数据分行

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>将写入文件的数据分行</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileWriter fw=new FileWriter(path + "\\WriteData.txt");
BufferedWriter bw=new BufferedWriter(fw);
bw.write("大家好!");
bw.write("本书是《JSP编程技巧》。");
bw.newLine();//断行
bw.write("请多多指教!");
bw.newLine();//断行
bw.write("email: stride@sina.com");
bw.flush();//将数据更新至文件
fw.close();//关闭文件流
out.println("写入文件内容为:<br>");
FileReader fr=new FileReader(path + "\\WriteData.txt");
BufferedReader br=new BufferedReader(fr);
String Line=br.readLine();//读取一行数据
while(Line!=null){
out.println(Line + "<br>");
Line=br.readLine();
}
fr.close();
%>
</body>
</html>

  如何将数据追加写入到文件

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>将写入文件的数据分行</title>
</head>
<body>
<%
String path=request.getRealPath(".");
RandomAccessFile rf=new RandomAccessFile(path + "\\WriteData.txt","rw");
//定义一个类RandomAccessFile的对象,并实例化
rf.seek(rf.length());//将指针移动到文件末尾
rf.writeBytes("\nAppend a line to the file!");
rf.close();//关闭文件流
out.println("写入文件内容为:<br>");
FileReader fr=new FileReader(path + "\\WriteData.txt");
BufferedReader br=new BufferedReader(fr);//读取文件的BufferedRead对象
String Line=br.readLine();
while(Line!=null){
out.println(Line + "<br>");
Line=br.readLine();
}
fr.close();//关闭文件
%>
</body>
</html></I></I></I></I>

posted @ 2006-07-27 13:00 黑咖啡 阅读(372) | 评论 (0)编辑 收藏
取得虚拟目录对应的磁盘路径:

Web站点主目录的位置为<%=request.getRealPath("/")%
JSP网页所在的目录位置<%=request.getRealPath("./")%>
JSP网页所在目录上一层目录的位置<%=request.getRealPath("../")%>
posted @ 2006-07-27 12:58 黑咖啡 阅读(422) | 评论 (0)编辑 收藏
(Bloger注)自我感觉一个初学者,在经历了一段时间的编程实践以后,应该花时间整体了解一下我们开发中所用到的技术和相关领域的发展情况。开阔视野是进步的一个必不可少的功课。

J2EE学习者越来越多,J2EE本身技术不断在发展,涌现出各种概念,本文章试图从一种容易理解的角度对这些概念向初学者进行解释,以便掌握学习J2EE学习方向。

  首先我们需要知道Java和J2EE是两个不同概念,Java不只是指一种语言,已经代表与微软不同的另外一个巨大阵营,所以Java有时是指一种软件系统的流派,当然目前主要是.NET和Java两大主流体系。

  J2EE可以说指Java在数据库信息系统上实现,数据库信息系统从早期的dBase、到Delphi/VB等C/S结构,发展到B/S(Browser浏览器/Server服务器)结构,而J2EE主要是指B/S结构的实现。

  J2EE又是一种框架和标准,框架类似API、库的概念,但是要超出它们。如果需要详细了解框架,可先从设计模式开始学习。

  J2EE是一个虚的大的概念,J2EE标准主要有三种子技术标准:WEB技术、EJB技术和JMS,谈到J2EE应该说最终要落实到这三个子概念上。

  这三种技术的每个技术在应用时都涉及两个部分:容器部分和应用部分,Web容器也是指Jsp/Servlet容器,你如果要开发一个Web应用,无论是编译或运行,都必须要有Jsp/Servlet库或API支持(除了JDK/J2SE以外)。

  Web技术中除了Jsp/Servlet技术外,还需要JavaBeans或Java Class实现一些功能或者包装携带数据,所以Web技术最初裸体简称为Jsp/Servlet+JavaBeans系统。

  谈到JavaBeans技术,就涉及到组件构件技术(component),这是Java的核心基础部分,很多软件设计概念(设计模式)都是通过JavaBeans实现的。

  JavaBeans不属于J2EE概念范畴中,如果一个JavaBeans对象被Web技术(也就是Jsp/Servlet)调用,那么JavaBeans就运行在J2EE的Web容器中;如果它被EJB调用,它就运行在EJB容器中。

  EJB(企业JavaBeans)是普通JavaBeans的一种提升和规范,因为企业信息系统开发中需要一个可伸缩的性能和事务、安全机制,这样能保证企业系统平滑发展,而不是发展到一种规模重新更换一套软件系统。

  至此,JavaBeans组件发展到EJB后,并不是说以前的那种JavaBeans形式就消失了,这就自然形成了两种JavaBeans技术:EJB和POJO,POJO完全不同于EJB概念,指的是普通JavaBeans,而且这个JavaBeans不依附某种框架,或者干脆可以说:这个JavaBeans是你为这个应用程序单独开发创建的。

  J2EE应用系统开发工具有很多:如JBuilder、Eclipse等,这些IDE首先是Java开发工具,也就是说,它们首要基本功能是可以开发出JavaBeans或Java class,但是如果要开发出J2EE系统,就要落实到要么是Web技术或EJB技术,那么就有可能要一些专门模块功能(如eclipse需要lomboz插件),最重要的是,因为J2EE系统区分为容器和应用两个部分,所以,在任何开发工具中开发J2EE都需要指定J2EE容器。

  J2EE容器分为WEB容器和EJB容器,Tomcat/Resin是Web容器;JBoss是EJB容器+Web容器等,其中Web容器直接使用Tomcat实现的。所以你开发的Web应用程序可以在上面两种容器运行,而你开发的Web+EJB应用则只可以在JBoss服务器上运行,商业产品Websphere/Weblogic等和JBoss属于同一种性质。

  J2EE容器也称为J2EE服务器,大部分时它们概念是一致的。

  如果你的J2EE应用系统的数据库连接是通过JNDI获得,也就是说是从容器中获得,那么你的J2EE应用系统基本与数据库无关,如果你在你的J2EE应用系统耦合了数据库JDBC驱动的配置,那么你的J2EE应用系统就有数据库概念色彩,作为一个成熟需要推广的J2EE应用系统,不推荐和具体数据库耦合,当然这其中如何保证J2EE应用系统运行性能又是体现你的设计水平了。

  衡量J2EE应用系统设计开发水平高低的标准就是:解耦性;你的应用系统各个功能是否能够彻底脱离?是否不相互依赖,也只有这样,才能体现可维护性、可拓展性的软件设计目标。

  为了达到这个目的,诞生各种框架概念,J2EE框架标准将一个系统划分为WEB和EJB主要部分,当然我们有时不是以这个具体技术区分,而是从设计上抽象为表现层、服务层和持久层,这三个层次从一个高度将J2EE分离开来,实现解耦目的。

  因此,我们实际编程中,也要将自己的功能向这三个层次上靠,做到大方向清楚,泾渭分明,但是没有技术上约束限制要做到这点是很不容易的,因此我们还是必须借助J2EE具体技术来实现,这时,你可以使用EJB规范实现服务层和持久层,Web技术实现表现层;

  EJB为什么能将服务层从Jsp/Servlet手中分离出来,因为它对JavaBeans编码有强制的约束,现在有一种对JavaBeans弱约束,使用Ioc模式实现的(当然EJB 3.0也采取这种方式),在Ioc模式诞生前,一般都是通过工厂模式来对JavaBeans约束,形成一个服务层,这也是是Jive这样开源论坛设计原理之一。

  由此,将服务层从表现层中分离出来目前有两种可选架构选择:管理普通JavaBeans(POJO)框架(如Spring、JdonFramework)以及管理EJB的EJB框架,因为EJB不只是框架,还是标准,而标准可以扩展发展,所以,这两种区别将来是可能模糊,被纳入同一个标准了。 但是,个人认为:标准制定是为某个目的服务的,总要牺牲一些换取另外一些,所以,这两种架构会长时间并存。

  这两种架构分歧也曾经诞生一个新名词:完全POJO的系统也称为轻量级系统(lightweight),其实这个名词本身就没有一个严格定义,更多是一个吸引人的招牌,轻量是指容易学习容易使用吗?按照这个定义,其实轻量Spring等系统并不容易学习;而且EJB 3.0(依然叫EJB)以后的系统是否可称为轻量级了呢?

  前面谈了服务层框架,使用服务层框架可以将JavaBeans从Jsp/Servlet中分离出来,而使用表现层框架则可以将Jsp中剩余的JavaBeans完全分离,这部分JavaBeans主要负责显示相关,一般是通过标签库(taglib)实现,不同框架有不同自己的标签库,Struts是应用比较广泛的一种表现层框架。

  这样,表现层和服务层的分离是通过两种框架达到目的,剩余的就是持久层框架了,通过持久层的框架将数据库存储从服务层中分离出来是其目的,持久层框架有两种方向:直接自己编写JDBC等SQL语句(如iBatis);使用O/R Mapping技术实现的Hibernate和JDO技术;当然还有EJB中的实体Bean技术。

  持久层框架目前呈现百花齐放,各有优缺点的现状,所以正如表现层框架一样,目前没有一个框架被指定为标准框架,当然,表现层框架现在又出来了一个JSF,它代表的页面组件概念是一个新的发展方向,但是复杂的实现让人有些忘而却步。

  在所有这些J2EE技术中,虽然SUN公司发挥了很大的作用,不过总体来说:网络上有这样一个评价:SUN的理论天下无敌;SUN的产品用起来撞墙;对于初学者,特别是那些试图通过或已经通过SUN认证的初学者,赶快摆脱SUN的阴影,立即开溜,使用开源领域的产品来实现自己的应用系统。

  最后,你的J2EE应用系统如果采取上面提到的表现层、服务层和持久层的框架实现,基本你也可以在无需深刻掌握设计模式的情况下开发出一个高质量的应用系统了。

  还要注意的是: 开发出一个高质量的J2EE系统还需要正确的业务需求理解,那么域建模提供了一种比较切实可行的正确理解业务需求的方法,相关详细知识可从UML角度结合理解。

  当然,如果你想设计自己的行业框架,那么第一步从设计模式开始吧,因为设计模式提供你一个实现JavaBeans或类之间解耦参考实现方法,当你学会了系统基本单元JavaBean或类之间解耦时,那么系统模块之间的解耦你就可能掌握,进而你就可以实现行业框架的提炼了,这又是另外一个发展方向了。

  以上理念可以总结为一句话:
J2EE开发三件宝: Domain Model(域建模)、patterns(模式)和framework(框架)。

  推荐一套高质量的J2EE开源系统: JPestore
  
  如果初学者没有理解,欢迎继续讨论,大胆提出你心中的疑问。

posted @ 2006-07-20 17:23 黑咖啡 阅读(211) | 评论 (0)编辑 收藏
     摘要: 你所需要做的就是:按照你的需求配置Tomcat,只要你正确配置,Tomcat一般都能适合你的要求。下面是一系列关于Tomcat的配置技巧,这些技巧源自于我的书:《Tomcat权威指南》,希望对你有所帮助。 Jason Brittain   1. 配置系统管理(Admin Web Application)  大多数商业化的J2EE服务器都提供一个功能强大的管理界面,且大都采用易于理解的Web应用界面...  阅读全文
posted @ 2006-07-20 16:09 黑咖啡 阅读(269) | 评论 (0)编辑 收藏

连续几天安装配置和连接Mysql数据库,今天终于成功了,回想这几天,
真的是甜酸苦辣都有,单mysql就重装了不下10次,而在eclipse上编写的连接数据库的程序总是报错.我都已经down了oracal准备放弃mysql了,不过...
就象电视剧演的那样,转机总是在这个时候出现,先是看到了saulzy关于mysql4.1.11版本的安装介绍,接着又找到了一款不错的mysql 界面插件,
最后在网友的帮助下把mysql的JDBC驱动配好并连通了.一连5天,日子真不好过阿,不过这个过程中,
我也觉得自己学到不少东西,呵呵,反正都撑过来了,就要继续往前走.现在,就这几天弄的总结一下,希望对同是正在学习JAVA技术的同道中人能有帮助.

我曾写过一篇叫<<配置Eclpise+tomcat并实现JSP的编写与部署>>,现在写的这些算是它的后续.

一.    软件下载
Mysql
下载版本:4.1.11
http://dev.mysql.com/downloads/mysql/4.1.html

JDBC驱动
下载版本:3.1.8
http://dev.mysql.com/downloads/connector/j/3.1.html

Mysql界面插件:mysql-front
下载版本镜像:HongKong(我下回来安装就是中文版了)
http://www.mysqlfront.de/download.html

二.    软件安装
1.安装mysql
    就如我上面所说的,我是参考了saulzy的文章,现在给出saulzy这篇文章的连接:
http://blog.csdn.net/saulzy/archive/2005/04/23/359648.aspx
里面图文并茂,说得非常清楚
(在这里再一次感谢saulzy)

2.JDBC驱动:mysql-connector-java-3.1.8
这只是一个压缩包,并不需要安装,只要将其解压,我么使用的是文件夹mysql-connector-java-3.1.8里的文件:mysql-connector-java-3.1.8-bin.jar.

3. Mysql界面插件:mysql-front
这是一个安装程序,按照提示安装就可以了.

三.    环境配置
 首先,我要说明的是我现在
tomcat的安装路径是: D:\Program Files\Java\Tomcat
  JDK的安装路径是:D:\Program Files\Java\j2sdk

在这里,需要配置环境变量的是JDBC驱动.在配置前先要把刚才说到的mysql-connector-java-3.1.8-bin.jar本地硬盘某处(我放的地方:D:\Program Files\Java\mysqlforjdbc),然后根据你放的地方,配置classpath,我的配置是这样的:
.;D:\Program files\Java\j2sdk\lib\tools.jar;D:\Program Files\Java\j2sdk\lib\mysql-connector-java-3.1.8-bin-g.jar;D:\Program Files\Java\mysqlforjdbc\mysql-connector-java-3.1.8-bin.jar
配置这个的目的是让你的java应用程序找到连接mysql的驱动.

配置完环境变量后还有很重要一步就是为JSP连接数据库配置驱动,这个其实很简单,就是把mysql-connector-java-3.1.8-bin.jar拷到某些文件夹里就行了,我在网上看了很多资料问了很多人,各种说法都有,我综合了一下,为了保险,我都全做了,呵呵,反正就是拷一个400K的文件而已,现列出要把mysql-connector-java-3.1.8-bin.jar拷进去的文件夹,如下:
D:\Program Files\Java\Tomcat\common\lib
D:\Program Files\Java\Tomcat\shared\lib

四.    数据库的使用

Mysql安装完毕以后,还有一些要注意的地方,这里saulzy也写了篇文章,大家看看就清楚了,连接如下:http://blog.csdn.net/saulzy/archive/2005/04/23/359811.aspx
就象在saulzy的文章力提到的,mysql安装好后最重要一样就是要看数据库有没有作为系统服务启动了,所以在大家进行数据库操作前,应要看看,在操作系统的
开始->运行->输入services.msc,确定你在安装时你设置的关于mysql的那个服务已经启动,这样你在操作数据库时不会报连接不上的错误.
上面提到了一个较方便的mysql界面插件,但是这个界面是我在已经开始使用mysql后才找到的,刚开始我是在dos下用命令行进行操作的.虽然那个界面也可以进行建库啊,设定权限等操作,但是,我觉得懂得在使用命令行也是一个很重要的技能,所以我先从命令行开始说,怎样简单使用mysql.到后面会谈及mysql-front的使用.

现在我想在mysql里建一个数据库shujuku,以及在数据库里建一个表biao.具体的命令如下(假设mysql我是刚安装好的)

 

 


1.    进入dos状态(记住命令行的要运行在mysql的安装目录下的bin目录的)如下图一:
 
2.    连接mysql
输入:mysql ?h localhost ?u root ?p
出现要求输入密码的界面(如图二)
 

 


输入在安装时已设好的密码,就近入了mysql的命令编辑界面了,如图三:
 
3.    使用mysql的基本命令(在mysql命令行编辑每输入完命令后最后一定要有分号,不然会报错)
显示数据库:show databases;
使用数据库:use 数据库名;
例子如图四:
 


4.建库
命令:create database shujuku;
5.为数据库设置权限(用户和密码)
命令:grant all privileges on shujuku.* to test@localhost identified by  “123456”;
当你执行完这个命令以后,只要你再以用户名:test,密码:123456登录时你就只可以对shujuku这个数据库操作,这样避开使用root,对数据库的安全有很大帮助.如图五
 

6.建表
命令:create table biao(id int(8) primary key,name varchar(10));
如图六

剩下来的与标准sqsl命令基本上是一样的,具体操作略
值得一提的是,你在命令行上输入"?",就会有mysql命令的简单帮助,如图八:
 

呵呵,那样,我们还可以知道退出,就是"exit",呵呵!

五.    关于mysql-front的使用
我找了好几个mysql的界面工具,觉得最简洁方便还是mysql-front,可惜的是要收费,不过还好有试用期,呵呵,可以先感受感受一下,最重要一点是mysql-front有简体中文版的,英文不好的我用起来就舒服多了.下面简单说说使用吧.
首先,安装就不用说了,有向导,而且很简单.安装好后第一次运行时会跳出来一个要求添加对话的框,在这里你可以添加例如上面已经设定好的shujuku,过程如图九,十,十一:
 

 

 

当你在注册的复选框里填上你在上面mysql设定好的用户名和密码后,在选择数据库框里就有shujuku 的数据库了,选上,按确定.进入mysql-fron后,你就会看到下面的界面,这是你就可以进行操作了.如图十二
 
 
要说明的是,你还可以把root用户也加进去,这要你在mysql-fron的界面上选
设置->对话->新建,再按上面进行就可以,出了root你还可以加入更多的用户,方法还是一样的,设置不同的用户,是方便对不同数据库进行管理,呵呵,root是权限最高的,可不要随便让别人使用你的root用户,保正你数据库的安全.

六.    JSP连接mysql
现在就是尝试用jsp连接mysql了
我在eclipse里建了个test_mysql.jsp页面,代码如下:

<%@ page contentType="text/html; charset=gb2312" %>
<%@ page language="java" %>
<%@ page import="com.mysql.jdbc.Driver" %>
<%@ page import="java.sql.*" %>
<%
  //驱动程序名
  String driverName="com.mysql.jdbc.Driver";
  //数据库用户名
  String userName="cl41";
  //密码
  String userPasswd="123456";
  //数据库名
  String dbName="db";
  //表名
  String tableName="dbtest";
  //联结字符串
  String url="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPasswd;
  Class.forName("com.mysql.jdbc.Driver").newInstance();
  Connection connection=DriverManager.getConnection(url);
  Statement statement = connection.createStatement();
  String sql="SELECT * FROM "+tableName;
  ResultSet rs = statement.executeQuery(sql);
  //获得数据结果集合
   ResultSetMetaData rmeta = rs.getMetaData();
  //确定数据集的列数,亦字段数
   int numColumns=rmeta.getColumnCount();
  // 输出每一个数据值
 out.print("id");
 out.print("|");
 out.print("num");
 out.print("<br>");
while(rs.next()) {
out.print(rs.getString(1)+" ");  
out.print("|");
out.print(rs.getString(2));
out.print("<br>"); 
}  
out.print("<br>");
out.print("数据库操作成功,恭喜你");
rs.close();  
statement.close();  
connection.close();  
%>  

然后把test¬_mysql.jsp部署到tomcat处,如何部署可参考我的另一篇文章<<配置Eclpise+tomcat并实现JSP的编写与部署>>

在浏览器,你就可以看到如图十三的:
 

呵呵,文章终于写完了,原来写篇简洁清晰,图文并茂的文章真的不容易.还是那句话,希望对度这篇文章的你有帮助吧!Good luck!
由于这里不能贴图片,我把我文章里面的图片都打包了,在附件处!
(如有转载,请注明原作者是cl41,谢谢合作!)

 

posted @ 2006-07-20 14:55 黑咖啡 阅读(269) | 评论 (0)编辑 收藏
     摘要: 有很多朋友虽然安装好了 mysql 但却不知如何使用它。在这篇文章中我们就从连接 mysql 、 修改密码、增加用户等方面来学习一些 mysql 的常用命令。 ...  阅读全文
posted @ 2006-07-20 14:02 黑咖啡 阅读(420) | 评论 (0)编辑 收藏

Java中关于时间的操作主要是:
1、获取当前时间,和某个时间进行比较。此时主要拿long型的时间值。
 方法如下:

要使用
java.util.Date 。获取当前时间的代码如下

Date date = new Date();

date.getTime() ;

还有一种方式,使用 System.currentTimeMillis() ;
都是得到一个当前的时间的long型的时间的毫秒值,这个值实际上是当前时间值与1970年一月一号零时零分零秒相差的毫秒数

2、获取某种格式的日期。
方法:

获取时间的格式,需要用到一个专门用于时间格式的类 java.text.SimpleDateFormat

首先,定义一个 SimpleDateFormat 变量

SimpleDateFormat sdf = new SimpleDateFormat("",Locale.SIMPLIFIED_CHINESE);

这个构造函数的定义如下:

SimpleDateFormat(String   pattern, Locale   locale)

第一个参数 pattern ,我们后面再解释,这里我们使用一个 "", 第二个参数,是用来设置时区的,这里用到了 java.util.Locale 这个类,这个类了面定义了很多静态变量,直接拿过来用就 OK ,我们把时区设置为 Locale.SIMPLIFIED_CHINESE ,只看名字,这个静态变量的意义已经很清楚了。

 

接下来我们使用这个 SimpleDateFormat 把当前时间格式化为一个如下格式的时间字符串“ XXXX XX XX _XX XX XX 秒”,代码:

sdf.applyPattern("yyyy年MM月dd日_HH时mm分ss秒");

String timeStr = sdf.format(new Date());

 

获取时间格式的函数是 format ,这个函数的参数是 java.util.Date 对象,这个没有什么花头。

要说明一下的是这个 pattern ,所谓的模式。这里, yyyy,MM,dd 等,这就是模式。

我们可以在 SimpleDateFormat 的构造函数中指定模式,比如

SimpleDateFormat sdf = new SimpleDateFormat(" yyyy-MM-dd ",Locale.SIMPLIFIED_CHINESE);

也可以获取时间格式的时候使用applyPattern函数临时指定,上面的例子就是这样。

什么字符代表什么,这是 j2se 约定好的,设置模式的时候,我们可以使用约定好的字符加上任何我们想要的字符串。

j2se 对字符所代表的模式的约定列表如下:

 

 

Letter Date or Time Component Presentation
G Era designator Text
y Year Year
M Month in year Month
w Week in year Number
W Week in month Number
D Day in year Number
d Day in month Number
F Day of week in month Number
E Day in week Text
a Am/pm marker Text 
H Hour in day (0-23) Number
k Hour in day (1-24) Number
K Hour in am/pm (0-11)  Number
h   Hour in am/pm (1-12)  Number
m   Minute in hour  Number
s   Second in minute  Number
S   Millisecond  Number  
z   Time zone   General time zone 
Z   Time zone  RFC 822 time zone 

posted @ 2006-07-18 13:53 黑咖啡 阅读(18866) | 评论 (1)编辑 收藏
SAP R/3 是一个基于客户/服务机结构和开放系统的、集成的企业资源计划系统。其功能覆盖企业的财务、后勤(工程设计、采购、库存、生产销售和质量等)和人力资源管理、SAP业务工作流系统以及因特网应用链接功能等各个方面。

R/3
应用软体采模组化结构。它们既可以单独使用,也可以和其它解决方案相结合。从流程导向的角度而言,各应用软体间的整合程度越高,它们带来的好处就越多。

FI 财务会计 集中公司有关会计的所有资料,提供完整的文献和全面的资讯,同时作为企业实行控制和规划的最新基础。

TR 财务管理 是一个高效率财务管理完整解决方案,确保公司在世界范围的周转,对财务资产结构实行盈利化组合,并限制风险。

CO 管理会计 是公司管理系统中规划与控制工具的完整体系,具有统一的报表系统,协调公司内部处理业务的内容和过程。

EC 企业控制 根据特制的管理资讯,连续监控公司的成功因素和业绩指标。

IM投资管理 提供投资手段和专案,从规划到结算的综合性管理和处理,包括投资前分析和折旧模拟。

PP 生产计划 提供各种制造类型的全面处理:从重覆性生产、订制生产、订装生产,加工制造、批量及订存生产直至过程生产,具有扩展MPRⅡ的功能。另外还可以选择连接PDC、制程控制系统,CADPDM

MM 物料管理 以工作流程为导向的处理功能对所有采购处理最佳化,可自动评估供应商,透过精确的库存和仓储管理降低采购和仓储成本,并与发票核查相整合。

PM 工厂维护 提供对定期维护、检查、耗损维护与服务管理的规划、控制和处理,以确保各操作性系统的可用性。

QM 品质管理 监控、输入和管理整个供应链与品质保证相关的各类处理、协调检查处理、启动校正措施、以及与实验室资讯系统整合。

PS 专案管理 协调和控制专案的各个阶段,直接与采购及控制合作,从报价、设计到批准以及资源管理与结算。

SD 销售与分销 积极支援销售和分销活动,具有出色的定价、订单快速处理、按时交货,交互式多层次可变配置功能,并直接与盈利分析和生产计划模组连接。

HR 人力资源管理 采用涵盖所有人员管理任务和帮助简化与加速处理的整合式应用程式,为公司提供人力资源规划和管理解决方案。

开放式资讯仓储 包括智能资讯系统,该系统把来自R/3应用程式和外部来源的数据归纳成为主管人员资讯,不仅支援使用者部门决策和控制,同时也支援对成功具有关键作用的高阶控制和监控。

R/3-定制化策略资讯管理

保持竞争领先地位端赖于公司建立有效并尽可能以客户为导向的企业流程结构的能力。这就需要具备可最有效支援今后企业流程的资讯处理系统。

R/3系统并非只是软件,它是一种策略性解决方案。

R/3系统-企业流程的思维与行动。

公司必须运用动态战略对瞬息万变的挑战作出反应。迅速适应客户新需求和市场新商机的能力,是赢得竞争胜利的决定性因素。此种适应力需要一个功能强大、开放式的基础结构,它可针对目前的企业流程提供最佳化支援,并能灵活适应变化与发展。R/3系统就是应付这些挑战的最佳解答,它是主从式架构上最普遍的标准商业应用软件。

SAP R/3系统具备以下功能和主要特点:

功能性:R/3以模块化的形式提供了一整套业务措施,其中的模块囊括了全部所需要的业务功能并把用户与技术性应用软件相联而形成一个总括的系统,用于公司或企业战略上和运用上的管理。

集成化: R/3把逻辑上联的部分连接在一起。重复工作和多余数据被完全取消,规程被优化,集成化的业务处理取代了传统的人工操作。

灵活性:R/3系统中方便的裁剪方法使之具有灵活的适应性,从而能满足各种用户的需要和特定行业的要求。R/3还配备有适当的界面来集成用户自己的软件或外来的软件。

开放性:R/3的体系结构符合国际公认的标准,使客户得以突破专用硬件平台及专用系统技术的局限。同时,SAP提供的开放性接口,可以方便地将第三方软件产品有效地集成到R/3系统中来。

用户友好:图标与图形符号简化了人机交互时的操作。统一设计的用户界面确保了工作人员能够运用同样的熟悉的技术从事不通的工作。

模块化:R/3的模块结构使用户既可以一个一个的选用新的实用程序,也可以完全转入一个新的组织结构体系。

可靠:作为用户的商业伙伴SAP始终不断地为集成化软件的质量设立越来越多的国际标准。

低成本高效益:信息处理是取得竞争优势的要点之一。当竞争加剧时,企业必须更加努力地获取其市场占有量。这就要使用高度集成化的数据处理软件,而R/3正是这种软件的优秀典范。

国际适用:R/3支持多种语言,而且是为跨国界操作而设计的。R/3可以灵活地适应各国的货币及税物要求。

服务:R/3系统实施过程中,用户将得到SAP技术专家的全面支持与服务,包括组织结构方面与技术方面的咨询,项目计划与实施方面的协助,以及培训课程。
posted @ 2006-07-10 19:02 黑咖啡 阅读(444) | 评论 (0)编辑 收藏
据美国哥伦比亚大学心理学教授STANLEY COREN结合208位各地驯狗专家,63名小型动物兽医师,及14名研究警戒犬与护卫狗的专家对各著名犬种进行深入访谈观察,并在Vancouver Dog Obedience Club提供的大量相当有价值的资料下,填写了一份非常复杂庞大的问卷,对犬只的工作服从性和智商进行了排名,现排行名次公布如下:

1.边境牧羊犬
2.贵宾犬
3.德国牧羊犬
4.金毛猎犬
5.杜宾犬
6.喜乐蒂犬(谢德兰牧羊犬)
7.拉布拉多猎犬
8.蝴蝶犬
9.洛威拿
10.澳洲牧牛犬
排名1-10的狗,大部分听到新指令5次,就会了解其涵义并轻易记住,主人下达时,它们遵守的几率高于95%,此外,即使主人位于远处,它们也会在听到指令后几秒种内就有反应。即使训练它们的人经验不足,它们也可以学习得很好。
11.威尔斯科基犬
12. 迷你型雪纳瑞
13.英国跳猎犬
14.比利时特弗伦犬
15.史其派克犬/比利史牧羊犬
16.苏格兰牧羊犬
17.德国短毛指示犬
18.英国可卡/标准型雪纳瑞
19.布列塔尼猎犬
20.美国可卡
21.威玛猎犬
22.伯恩山犬
23.松鼠犬
24.爱尔兰水猎犬
25.维兹拉犬
26.卡狄肯威尔斯科基犬

排名11-26的狗,似乎要学习5-15次才能学会简单指令,它们遵守第一次指令的几率是85%,对于稍微复杂的指令有时候反应会稍微迟缓一些,但只要勤加练习就能消除这种延缓状况。当主人离它们较远时,它们的反应有可能也稍微迟缓一些,不过,即使训练人员经验稍微不足,还是有办法将这些狗调教得很优秀。

27.切萨皮克湾拾列犬/波利犬/约克夏埂
28.巨型雪纳瑞
29.万能埂
30.伯瑞犬
31.威尔斯跳猎犬
32.曼彻斯特埂
33.萨莫耶犬
34.纽芬兰狗/澳洲埂/美国斯塔福郡埂/戈登蹲猎犬/长须牧羊犬
35.凯恩埂/凯利蓝埂/爱尔兰埂
36.挪威猎糜犬
37.猴面埂/丝毛埂/迷你品犬/法老王猎犬/克伦伯长毛垂耳猎犬
38.洛威埂
39.斑点狗
排名27-39是属于中上程度的狗,重复了15次指令后才会表现出似懂非懂的反应,需要很多额外练习,尤其在初级阶段。它们对第一次指令作出的回应几率是90%,表现的优劣取决于练习时间的多寡。整体来说,表现与排名较前的狗一样好,只是动作没那么平顺连贯,而且反应时间也稍微慢半拍,如果主人站得稍远,它们可能不会回应主人的指令,如果训练者缺乏经验,或过于严厉或没耐心,这些狗的表现就会很差。

40.贝林顿埂
41.爱尔兰猎狼犬
42.库瓦兹犬
43.萨路基猎犬
44.骑士查里王猎犬/德国刚毛指示犬
45.西伯利亚雪撬犬/比熊犬
46.藏獒/灵堤/英国猎狐犬/美国猎狐犬/格里芬犬
47.西高地白埂
48.拳师狗/大丹狗
49.腊肠狗
50.阿拉斯加雪撬犬
51.沙皮狗
52.罗德西亚背脊犬
53.爱尔兰埂
54.波斯顿埂/秋田狗


排名40-54的狗是智商与服从中等程度的狗,在学习过程中,会在。练习15-20次之后才对任务基本了解,若想得到令人满意的表现,可能需要25-40次的练习,如果没有练习,可能会忘记曾经学过的动作。它们回应第一次指令的几率是50%,但先决条件是必须先重复训练。如果主人站得很近,它们的表现回较好,如果与主人距离增加一样好,但经验不足的人,或缺乏耐心者,可能拿这些狗没办法
55.斯凯埂
56.西里罕埂
57.巴哥犬
58.法国斗牛犬
59.马尔济斯犬
60.意大利灵堤
61.中国冠毛犬
62.丹地丁蒙埂/西藏埂
63.英国老式牧羊犬
64.比利牛斯山犬
65.苏格兰埂/圣伯纳犬
66.牛头埂
67.吉娃娃
68.拉萨犬
69.斗牛獒犬

排名55-69的狗,要使指令达到完美表现,可能需要40-80次的练习。即使经过这么多练习,还是无法成为永久习惯,如果练习中断了一阵子,它们表现出来的就像是从来没有学过这些动作,经过练习后,狗的回应第一次指令的几率是30%。大部分时候,这些狗都很容易分心,而且只在它觉得高兴的时候才会执行主人的指令,如果主人站得离狗稍远,就必须花很多时间对它们大叫,因为它们很可能相应不理。通常这些狗被评价为“独立,冷漠”等等。有经验的驯狗者,只要肯花很多时间,对狗投注坚定而慈祥的关注,就可以使这些狗对指令产生立即反应,不过它们的表现充其量也只不过是差强人意而已。
70.西施犬
71.巴吉度猎犬
72.獒犬/比高犬
73.北京犬
74.血堤
75.苏俄牧羊犬
76.松狮犬
77.老虎狗
78.见生吉犬
79.阿富汗猎犬

排名70-79的狗,要让它们记住指令,通常要练习上百次学会后必须多加练习,否则它们会忘得像没学过这个动作一样,即使习惯养成了,它们还是没办法每次都回应主人的指令,第一次回应的几率是25%,有时候它们会把头偏离主人,像是故意不理会主人,或是故意挑战主人的权威。当它们回应指令时,行动通常缓慢不确定,或心不甘情不愿。有些狗必须戴上项圈才听话,一脱下项圈就无法无天了。普通训练人员可能控制不了这些狗的表现。
posted @ 2006-07-10 10:55 黑咖啡 阅读(236) | 评论 (0)编辑 收藏
完全oop的语言(ruby,smalltalk,...)中,smalltalk暂时是最优雅的了,看了它之后,才明白C#/vb/java的语法确实不能带来太多的效率。看看java和smalltalk的语言对比,就知道java可能采用了smalltalk的思想+c的外观了:
http://www.chimu.com/publications/J...talkSyntax.html
它很small,而且像talk一样接近人的语言。



---------------------以下是转载:
smalltalk
可是面向对象的程序设计语言的鼻祖阿,并且正在蓬勃的发展,没有过时。它是纯面向对象的语言,就连整数也是对象。开放环境也非常集成,如果感兴趣可以到一下网站下载,绝对有耳目一新的感觉。举个例子,

循环语句在smalltalk中是向一个整数对象发送消息:

10 timesRepeat: [ teresa moveRight: 10 ].

其中timesRepeat:为消息名称,10为接受消息的整数对象,
[ teresa moveRight: 10 ].是消息的参数,


这又是smalltalk强大的地方,它可以把一段程序作为参数传递给某个对象!!!
Squeak Smalltalk
http://www.squeak.org/ 这是一个非常有趣的smalltalk版本,看上去就像在你的电脑上模拟了另外一套完成的窗口系统,这里面的窗口更加利害,你甚至可以旋转它,不看不知道,看了才发现还有这么奇妙的语言,这么奇妙的开发环境。10M左右

Cincom Smalltalk
http://www.cincom.com/scripts/smalltalk.dll/home.ssp 这个版本比较实用,有详细的帮助,可以开发真正的windows程序。30M左右

Dolphin Smalltalk
http://www.object-arts.com/ 这里提供的免费smalltalk版本只有3M不到,如果你想先尝试一下这种语言的话,可以下载这个。

这是一个支持unicode的smalltalk版本:
http://www.objectconnect.com/
可以下载 限时版
posted @ 2006-07-06 16:28 黑咖啡 阅读(1003) | 评论 (0)编辑 收藏
C#会前途黯淡,只因大胡子惹的祸?!有点耸人听闻吧。可是色列软件工程师 Tamir Khason自有一套理论(也许他曾学过中国的面相术)得出这样的结论。不信,咱就瞧瞧他发在自己Blog上的一篇文章,看看他有什么样的奇思妙想。


Fortran.jpg 
John Backus,Fortran之父

Prolog.jpg 
Alain Colmerauer, Prolog之父

ada.jpg 
Jean Ichbiah, Ada之父

  以上三人分别发明了Fortran、 Prolog和 Ada语言。这些语言都有着过人的优点,每一种在当时都可以称得上是创意不凡。很可惜,三个当中没有一个广泛流传。与之相对,下面的Brain Kernighan、Dennis Ritchie和Ken Thompson所“炮制” 出的C和Unix,已经使用了三十年了,也许再用100年也没问题!

C_BK.jpg 
C语言宗师Brain Kernighan

C_KT_DR.jpg 
UNIX/C创造者Ken Thompson 和 Dennis Ritchie

  Round 2

  以下两位分别是Alan Kay和Kristen Nygaard。是他们发明了第一批面向对象语言 Smalltalk和Simula 67。不过,这些语言都行之不远。

smalltalk.gif 
Smalltalk之父Alan Kay

simula.png 
Simula 67之父Kristen Nygaard

  Brad Cox,曾尝试把OO加入到C中,于是Objective-C诞生。然而,Objective-C 也是命运不济,目前只有在Mac操作系统中还能看到它的踪影。 与之相对,另一位所做的相同尝试却大红大紫,这就是Bjarne Stroustrup所写的C++。其实,看看 Stroustrup的脸就不难明白为什么这两种语言的命运会如此不同。

objective-c.gif 
Objective-C之父Brad Cox

c++.jpg 
C++之父Bjarne Stroustrup

  到这里,你能猜出点规律来吗?

  答案揭晓:有大胡子——有旺运;没胡子——只有干瞪眼!

  由此,看看下面两位的胡子,C#和Java究竟鹿死谁手,不就是不言自明的吗?

csharp.jpg 
C#之父Anders Hejlsberg

java.jpg 
Java之父James Gosling

  Round 3

  当然,你也可以不信。不过,还有一个例证可以很好地说明。下面两位分别是Basic的作者Thomas Kurtz 与Perl的作者Larri Wall。两人虽然没有令人咋舌的大胡子,但两撇小胡子倒也浓密有致。自然,这两种语言红得发紫。

basic.gif 
Thomas Kurtz, Basic之父

perl.jpg 
Larry Wall, Perl之父

  但是同为动态语言,Python和Ruby的作者Guido van Rossum和松本行弘都没有胡子,哪怕是两撇小胡子,所以尽管它们都比Perl语言好,但都没有Perl使用广泛。不过,凡事都有转机。Rossum看样子极有希望很快长出大胡子,而日本人松本,看样子够呛。

python.jpg 
Guido van Rossum, Python之父

ruby1.jpg 
松本行弘, Ruby语言之父

  更有意思的事情还在后面,松本正巧看到了这个帖子,很不服气,于是便在自己的blog上贴出这幅照片:

ruby2.jpg 
  松本行弘:谁说俺长不出大胡子?

  看来, Ruby还是大有希望的!

  后记:从2005年发展的情况来看,Ruby的火爆再次证明的胡子定律的正确性。
posted @ 2006-07-06 16:09 黑咖啡 阅读(244) | 评论 (0)编辑 收藏
*********************JAVA资源收藏***********************

A.书名:《Thinking in Java》2e中文版 侯捷 / 王建兴 合译
URL: http://jjhou.csdn.net/thinking-in-java-20010919.pdf
B.书名:JBuilder5中文帮助文件
URL: http://www.code-labs.com/manual/Jb5cn_help1.rar
http://www.code-labs.com/manual/Jb5cn_help2.rar
C.书名:Think in Java(中文版)---chm格式
URL: http://www.code-labs.com/manual/Think%20In%20Java.chm
D.书名:Jbuilder开发人员指南(完整版)
URL: http://www.java-cn.net/book/books-zip/JbuilderGuide.zip
E.书名:Java2编程详解(Special_Edition_Using_Java)
URL: http://www.java-cn.net/book/books-zip/Java2Xiangjie.zip
F.书名:Java2 轻松进阶
URL: http://www.java-cn.net/book/books-zip/java11.zip
G.书名: JavaBeans开发使用手册
URL: http://www.java-cn.net/book/books-zip/JavaBeansDevelop.zip
H.书名:Java1.3API手册
URL: http://www.java-cn.net/book/books-zip/api.zip

java 教程与实例
http://download.pchome.net/php/download2.php?sid=10837&url=/development/reference/Javateach0307.zip&svr=3

I.书名:SCJP认证笔记
URL: http://vanstone.myetang.com/scjp/scjpnotes.rar
J.书名:Sun培训教材中文稿
URL: http://vanstone.myetang.com/scjp/javabook/sl275cn.pdf
K.书名:SCJP认证Bible
URL: http://vanstone.myetang.com/scjp/scjpbible.rar
L.书名:java开发规范(html)
URL: http://www.cn-java.com/target/download.php?id=790&downurl=../download/book/javaformat.zip
M.书名:EJB2.0 Entity bean(PDF)
URL: http://www.cn-java.com/target/download.php?id=708&downurl=../download/book/EJB2.0.zip
N.书名:J2ME用户使用手册(PDF)
URL: http://www.cn-java.com/target/download.php?id=667&downurl=../download/book/UserGuide.pdf
O.书名:JavaServerPages基础
URL: http://www.java-cn.net/book/books-zip/JSPIntro.zip
P.书名:RMI Enhancements
URL: http://www.cn-java.com/target/download.php?id=297&downurl=/download/tools/rmispecjdk12.zip
Q.书名:无废话XML
URL: http://www.cn-java.com/target/download.php?id=222&downurl=../download/tools/wfhxml_gb.zip

R.书名:Design Pattens
注释:号称软件工程师的床头必备书籍,非常经典,对面向对象思想在实践应用中的模式做了经典性的总结
URL: http://automation.seu.edu.cn/auto/content/Design.zip

S.书名:设计模式 可复用面向对象软件的基础
注释:南京大学翻译的Design Patterns的中译本,机械工业出版社出版,翻译质量较好
URL: http://automation.seu.edu.cn/auto/content/DesignCh.zip

T.书名:Thinking in Java with Patten
注释:与Thinking in Java为同一作者所著,设计模式与Java的结合
URL: http://automation.seu.edu.cn/auto/content/TIPatterns[Thinking%20in%20Pattern%20with%20java].zi
p

U.书名:The Design Pattens Java Companion
注释:另一本Design patten 与Java相结合的书 James w.Cooper著
URL: http://automation.seu.edu.cn/auto/content/DesignJava.zip

V.书名:Java 2 平台安全技术-结构,API设计和实现
注释:来自china pub,PDF文档,中译本
URL: http://automation.seu.edu.cn/auto/content/Java2Safe.zip

W.书名:Mastering Enterprise JavaBeans
注释:Ed Roman著,EJB的优秀书籍
URL: http://automation.seu.edu.cn/auto/content/EJB-book.zip

X.书名:Pure JSP
注释:James Goodwill著 Sams, Macmillan Computer Publishing 2000.6.8出版
URL: http://automation.seu.edu.cn/auto/content/Pure%20jsp.zip

Y.书名:Sun Tutorial 2001.5
注释:Sun公司的经典教程,入门必读
URL: http://automation.seu.edu.cn/auto/content/tutorial_2001.zip

Z.书名:JDK1.3.1 document Winhelp 格式
注释:Winhelp格式的JDK文档,更易阅读和查找,很棒
URL: http://automation.seu.edu.cn/auto/content/jdk13doc_help.zip


1A.书名:The Java Virtual Machine Specification Second Edition
注释:Java 虚拟机规范,有助于理解Java的实现原理,Sun出版
URL:http://automation.seu.edu.cn/auto/content/vmspec.2nded.html.zip

1B.书名:The Java Language Sepcification Second Edition
注释:Java 语言规范,Java编程语言的详细说明,Sun出版
URL: http://automation.seu.edu.cn/auto/content/langspec-2.0.zip

1C.书名:Java programmer's FAQ
注释:Sun公司的FAQ,内容丰富,覆盖面广
URL: http://automation.seu.edu.cn/auto/content/faq.zip

1D.书名:Cocoon 2 简介
注释:Cocoon 是一种 Java 服务器框架,它允许使用 XSLT转换动态发布 XML 内容。通过依靠 XML 描述内容,使用 XSLT 将内容转换成多种格式,Cocoon 提供了用于构建内容、
逻辑和表示在很大程度上彼此分离的应用程序的平台。 本教程将介绍 Cocoon 2,一个比原始 Cocoon 应用程序更有效和更可伸缩的平台。
URL: http://www-900.ibm.com/developerWorks/cn/education/xml/x-cocoon/tutorial/x-cocoon.zip

1E.书名:java事件传递技术
注释:Java 2 平台使程序员可以从事件的角度来思考系统,而不从是传统的调用-返回(call-return)体系结构风格的角度。在该平台本身内部,就有对多种事件通知模式的直接支持。思考事件的一种方
式是通过事件的粒度和所有权。一些事件模式适合在对象实例状态变化的粒度上表示事件。
URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-delivery/tutorial/j-delivery.zip

1F.书名:使用 JDBC 构建基于 Web 的应用程序
注释:如果您对构建使用 JDBC 访问数据库的 Web 应用程序的各种方法感兴趣,那么本教程适合于您。在这一实践指南中,您将通过使用三项独立的技术来学习这一过程的基础知识,这三项技术是:servle
t 方法、JavaServer Pages(JSP)页面方法以及 JSP、JavaBeans 与 servlet 相结合的方法(也称为 Model Two)。
URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-jdbcweb/tutorial/j-jdbcweb.zip

1G.书名:Java 3D 探奇
注释:本教程是为没有任何 3D 编程经验的 Java 程序员而编写的。我们将从一些基本的 3D 概念入手,探索如何构建一副场景图 — 用于描述我们想要渲染的场景的基本对象。然后,我们将接触 Java
3D 的一些更强大的功能。我们的重点将放在使用一些 Java 3D 实用类来开始您的编程。
URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-java3d/tutorial/j-java3d.zip
1Q.书名:Java 调试
注释:即使是最高级的开发人员所开发的最简单的应用程序也可能包含错误。如果要成为好的调试人员,不必象大侦探那样调查蛛丝马迹。您只需了解概念并熟悉正确的工具。在本教程中,我们提供了关于基本 Java 调
试概念和更高级调试类型的详细信息。
URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-debug/j-debug.zip

1R.书名:构建定制的树型视图
注释:在这篇免费的 dW 专有的独家教程中,讲述了关于 Swing 树型视图的概念、它们所显示的内容、如何设置它们以及如何定制它们。它还讲述了使用线程来执行长时间运行任务的概念,这样用户界面就可以保
持迅速反应。研究 Java Swing 树的相关类,演示了如何定制基本数据模型和树节点的绘制。为说明这些概念,我们将生成一个增强型 JTree,JMagnitudeTree。这个增强型 JTree 可
以显示树节点的相对数量,以及标准节点名称和整个树型结构。例如,如果树显示的是文件目录结构,那么它可以指出所有文件和目录的相对大小。本教程并不试图充当编程参考,因此合适的 Swing 参考资料或在线文档
也许会有帮助。
URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-magnitudetree/MagnitudeTree.zip

1S.书名:构建 Java 聊天服务器
注释:在这篇免费的 dW 专有的独家教程中,我们将构建一个简单聊天系统的服务器和客户机方。您将在这个过程中学到创建这样一个服务器时可以用到的基本框架,该框架使用在很多情况下都能很好工作的传统技术。我
们还将讨论框架的一些限制,并找到克服这些限制的方法。
URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-chat/tutorial/j-chat.zip

1T.书名:构建带会话跟踪的 Servlet
注释:本教程讲授使用 Servlet 和 JSP 技术构建因特网应用的技巧。其关键是启用会话处理,那么 Servlet 就可以知道哪个用户在干什么。本教程显示了一个 URL 书签系统,在这个系统中,
多个用户访问一个系统以添加、除去和更新 HTML 书签列表。Servlet 使用 JSP 技术来处理用户交互。
URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-servlets2/tutorial/j-servlets2.zip


1H.书名:使用 JDBC 的高级数据库操作
注释:本教程旨在向您介绍几种高级数据库操作,包括存储过程和高级数据类型,它们可以通过使用 JDBC 的 Java 应用程序执行。教程中的示例代码是为 DB2 通用数据库 7.2 编写的,但因为使用了
DataSource 对象,修改这些代码以适用于其它数据库是不成问题的。
URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-jdbcadv/tutorial/j-jdbcadv.zip

1I.书名:用 JDBC 管理数据库连接
注释:本教程介绍了使用“Java 数据库连接”(Java Database Connection(JDBC))从 Java 应用程序内部建立和管理数据库连接所涉及的不同概念。
URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-jdbc/tutorial/j-jdbc.zip
1J.书名:Java 集合框架
注释:本教程将带您漫游 “Java 集合框架”(Java Collection Framework)。为了尽快开始学习“集合框架”,教程从一些面向初学者和专家等读者的简单编程示例入手。接着,教程继续
讨论集(set)和映射(map),它们的属性以及它们数学上的定义与“集合框架”中的 Set、 Map 和 Collection 定义有何不同。“Java 集合框架”的历史那一节澄清了集和映射相关类的一
些混淆。本教程彻底介绍了“集合框架”中所有的接口和实现这些接口的类。本教程不仅谈到了用线程安全和只读方式处理集合,还探讨了集合的算法支持。此外,教程还讨论了在 JDK 1.1 中使用“集合框架”的一个
子集。最后,教程以先于“Java 集合框架”的 ObjectSpace 中一种广泛使用的算法和数据结构库 JGL 的介绍作为结束。
URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-collections/tutorial/j-collections.z
ip

1K.书名:Java 套接字(socket)101
注释:本教程将告诉您什么是套接字(socket)并教您如何在 Java 程序中使用它。通过实际分析几个示例,从单个客户机/服务器通讯到池中的一组客户机访问服务器,您将学到如何用套接字处理现实世界中碰
到的典型情形。
URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-sockets/tutorial/j-sockets.zip

1L.书名:Java Message Service 基础教程
注释:本教程向您介绍了 Java 消息服务(Java Message Service,JMS)概述,并提供了使用它开发程序的基本知识。Sun Microsystems 开发 JMS 是为 Java
程序访问企业消息传递系统、也称面向消息的中间件(MOM)提供一种途径。通过中介这种间接方式来支持应用程序间数据的异步传递,MOM 提供了一种以松散组织的、灵活的风格来集成应用程序的机制。
URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-jms/tutorial/j-jms.zip

1M.书名:JavaMail API 基础教程
注释:想将邮件工具结合到您独立于平台的 Java 解决方案中吗?再没有比 JavaMail API 更合适的了,它提供了个独立于协议的模块,能用于 IMAP、POP、SMTP、MIME 和其它涉及因
特网的消息传递协议。现在,有了 JavaBeans Activation Framework (JAF)的支持,您的应用程序经由 JavaMail API 就能启用邮件功能啦。
URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-javamail/tutorial/j-javamail.zip

1N.书名:J2ME 循序渐进
注释:本教程详细审查了袖珍版 Java 2 平台 (J2ME),它主要面向在 Java 编程及面向对象设计与开发方面有深厚背景的中级开发者。 您可以首先了解 J2ME 的背景并研究 J2ME 的配置
和简表。随后,逐步建立您的开发环境,用于开发 J2ME 应用程序。
本教程将向您介绍一些课题如 K 虚拟机 (KVM),和 KJava API -- 用于关联连接有限设备配置 (CLDC) 和使用 CLDC 的移动信息设备简表。之后您将构造一个简单的应用程序来看看您能
用 J2ME 做些什么。您将使用 CLDC 和 KJava 开发一个基本绘图应用程序以及一个小型 MIDP 应用程序。
URL: http://www-900.ibm.com/developerWorks/cn/education/java/j2me/tutorial.zip

1O.书名:构建自己的 Java 库
注释:此篇教程主要教您怎样使用 Java 语言来构建自己的可重用的类库。内容包括设计良好类库的一些关键事项以及有效方法,为了更好的说明内容,教程还给出了一个简单的类库设计的例子。
URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-library/j-library.zip

1P.书名:了解 Java ClassLoader
注释:Java ClassLoader 是一个重要的、但又常常被人忽略的 Java 运行时系统组件。它是负责在运行时查找和装入类文件的类。创建自己的 ClassLoader 可以以实用且有趣的方式定
制 JVM,这样可以让您彻底重新定义如何将类文件引入系统。
URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-classloader/j-classloader.zip

1Q.书名:Java 调试
注释:即使是最高级的开发人员所开发的最简单的应用程序也可能包含错误。如果要成为好的调试人员,不必象大侦探那样调查蛛丝马迹。您只需了解概念并熟悉正确的工具。在本教程中,我们提供了关于基本 Java 调
试概念和更高级调试类型的详细信息。
URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-debug/j-debug.zip


1R.书名:构建定制的树型视图
注释:在这篇免费的 dW 专有的独家教程中,讲述了关于 Swing 树型视图的概念、它们所显示的内容、如何设置它们以及如何定制它们。它还讲述了使用线程来执行长时间运行任务的概念,这样用户界面就可以保
持迅速反应。研究 Java Swing 树的相关类,演示了如何定制基本数据模型和树节点的绘制。为说明这些概念,我们将生成一个增强型 JTree,JMagnitudeTree。这个增强型 JTree 可
以显示树节点的相对数量,以及标准节点名称和整个树型结构。例如,如果树显示的是文件目录结构,那么它可以指出所有文件和目录的相对大小。本教程并不试图充当编程参考,因此合适的 Swing 参考资料或在线文档
也许会有帮助。
URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-magnitudetree/MagnitudeTree.zip

1S.书名:构建 Java 聊天服务器
注释:在这篇免费的 dW 专有的独家教程中,我们将构建一个简单聊天系统的服务器和客户机方。您将在这个过程中学到创建这样一个服务器时可以用到的基本框架,该框架使用在很多情况下都能很好工作的传统技术。我
们还将讨论框架的一些限制,并找到克服这些限制的方法。
URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-chat/tutorial/j-chat.zip

1T.书名:构建带会话跟踪的 Servlet
注释:本教程讲授使用 Servlet 和 JSP 技术构建因特网应用的技巧。其关键是启用会话处理,那么 Servlet 就可以知道哪个用户在干什么。本教程显示了一个 URL 书签系统,在这个系统中,
多个用户访问一个系统以添加、除去和更新 HTML 书签列表。Servlet 使用 JSP 技术来处理用户交互。
URL: http://www-900.ibm.com/developerWorks/cn/education/java/j-servlets2/tutorial/j-servlets2.zip

1U.书名:Java 语言基础
注释:本教程介绍了 Java 编程语言,包括一些用来说明面向对象架构语言的语法的示例, 以及一些标准编程的练习,如定义实例方法,使用内嵌(built-in)类型,创建用户自定义类型, 使用引用变量(
reference variables)等。
URL: http://www-900.ibm.com/developerWorks/cn/education/java/javaintro/tutorial/javaintro.zip


1V.书名:JavaRMI入门实战(实在找不到页面下载,这是ftp下载的)
URL:ftp://218.242.4.185/pub/work/JAVA_JSP_J2EE/Articles/RMI/JavaRMI%C8%EB%C3%C5%CA%B5%D5%BD.pdf

1W.书名:Java Xml 编程指南书籍源码
URL:ftp://202.115.39.65/--==Incoming==--/Documents/Tech/Java/J2EE/Java%20Xml%20编程指南书籍源码.rar

1X.书名:XML解决方案开发实务
URL:
http://www.guxiang.com/epubcn/readings/diannaotushu/100/download/xmlsolution.zip
posted @ 2006-07-06 10:34 黑咖啡 阅读(324) | 评论 (0)编辑 收藏

近段时间项目任务相对比较少,是一个很好补习java基础的机会,列一些需要着重注意的地方:

1、基础。一切活动的根基,重点在语法和api的理解,应用。
2、数据库。oracle 9i
3、struts
4、hibernate
5、sql语法

需要啃掉的书:
1、thinking in java
2、以前的课本有必要再看一下。

posted @ 2006-07-04 15:32 黑咖啡 阅读(210) | 评论 (0)编辑 收藏

try {
     new Thread(new Runnable() {
      public void run() {
       TaskService taskService = (TaskService)context.getBean(TaskService.SERVICE_NAME);
       List<Task> taskSharedList = taskService.getAllSharedTaskList();
       for (Task task : taskSharedList) {
        task.setOwner(mainFrame.getUserName());
       }
       try {
        ((LoginServiceProxyImpl) context.getBean(LoginServiceProxyImpl.SERVICE_NAME))
          .shareTask(taskSharedList);
       } catch (RemoteException e) {
        e.printStackTrace();
       } catch (ServiceException e) {
        e.printStackTrace();
       }
      }
     }).run();

    } catch (Exception e) {
    }

posted @ 2006-06-22 16:54 黑咖啡 阅读(177) | 评论 (0)编辑 收藏
无意见发现了这篇文章
关于《80前的前辈,你们都做了什么?!》一文对EasyJF团队造成恶劣影响的声明  
http://www.blogjava.net/daxia/archive/2006/06/01/49391.html

于是顺着线索看到了2篇文章,也是80前的一代人何80后的一代人的对话,也许带着些抱怨,也许带着些抨击,但是我并不能把这个定义为争吵,或者是争论。定义为对话,是因为我觉得主导自己人生的还是自己,自己的认识,自己的经历。如果一概的把自己的成长依赖于前辈的影响社会的塑造,那创新一词就该封存了。

贴出2篇文章的链接:
《80年代的兄弟,你会什么?!》http://blog.sina.com.cn/u/1490567244
80前的前辈,你们都做了些什么?! http://www.blogjava.net/daxia/archive/2006/05/29/48664.html
posted @ 2006-06-01 11:28 黑咖啡 阅读(182) | 评论 (0)编辑 收藏

时间真的是飞逝,转眼工作快一年了。

posted @ 2006-05-30 09:34 黑咖啡 阅读(139) | 评论 (0)编辑 收藏

通用惟一标识符(UUID)是128位比特的数字,用来惟一地标识因特网上的某些对象或者实体。根据使用的特定机制,通用惟一标识符不仅需要保证是彼此不相同的,或者最少也是与公元3400年之前其他任何生成的通用惟一标识符有非常大的区别。通用惟一标识符依靠保证惟一性的部分的组合。有保证的通用惟一标识符包括一个指向生成通用惟一标识符的主机的网络地址,时间戳(用来记录事务的精确时间的记录),以及一个随机生成的组件。因为网络地址标识了惟一的一台计算机 ,并且时间戳对于某台主机上的生成的每个通用惟一标识符也是惟一的,那么这两个部分就完全可以保证惟一性了。然而,随机生成的通用惟一标识符的元素也可以作为保护措施来防止所有的不可预见的问题。  

通用惟一标识符是作为tModel 数据结构中的一部分,这种数据结构标识通用描述、发现,和整合(UDDI)注册中的一种服务的类型(注册服务的通用表示法)。这种机制可用来发现网络服务。  

通用惟一标识符还可以用来指向大多数的可能的物体。微软和其他一些软件公司都倾向使用全球惟一标识符(GUID),这也是通用惟一标识符的一种类型,可用来指向组建对象模块对象和其他的软件组件。第一个通用惟一标识符是在网罗计算机系统(NCS)中创建,并且随后成为开放软件基金会(OSF)的分布式计算环境(DCE)的组件。

UUID,是128位整数(16字节)的全局唯一标识符(Universally Unique Identifier)。

UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成UUID的API。UUID按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。
在ColdFusion中可以用CreateUUID()函数很简单的生成UUID,其格式为:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。而标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx (8-4-4-4-12)
,可以从cflib 下载CreateGUID() UDF进行转换。
使用UUID的好处在分布式的软件系统中(比如:DCE/RPC, COM+,CORBA)就能体现出来,它能保证每个节点所生成的标识都不会重复,并且随着WEB服务等整合技术的发展,UUID的优势将更加明显。

PS:在MMColdFusion技术支持中心找到一篇文章,其中提到使用CreateUUID()会将WIN平台下的系统时间加快10毫秒,原因是JVM1.3.x 和1.4.x的bug,文章提到了解决方法。
posted @ 2006-05-26 17:13 黑咖啡 阅读(519) | 评论 (0)编辑 收藏
<span title="第一行&#13;&#10;第二行">haha haha haha</span>
posted @ 2006-05-19 12:07 黑咖啡 阅读(369) | 评论 (0)编辑 收藏
正在踌躇的时候发现下面的这段代码,终于得意解决。苦于对js没有足够的熟悉,代码中的具体方法参数还得继续学习,感谢提供代码的朋友。
function SetCwinHeight()
{
var cwin=document.getElementById("cwin");
if (document.getElementById)
{
if (cwin && !window.opera)
{
if (cwin.contentDocument && cwin.contentDocument.body.offsetHeight)
cwin.height = cwin.contentDocument.body.offsetHeight;
else if(cwin.Document && cwin.Document.body.scrollHeight)
cwin.height = cwin.Document.body.scrollHeight;
}
}
}

<iframe width="778" align="center" height="200" id="cwin" name="cwin" onload="Javascript:SetCwinHeight(this)" frameborder="0" scrolling="no"></iframe>


function SetCwinHeight(obj)
{
  var cwin=obj;
  if (document.getElementById)
  {
    if (cwin && !window.opera)
    {
      if (cwin.contentDocument && cwin.contentDocument.body.offsetHeight)
        cwin.height = cwin.contentDocument.body.offsetHeight;
      else if(cwin.Document && cwin.Document.body.scrollHeight)
        cwin.height = cwin.Document.body.scrollHeight;
    }
  }
}

引用时
onload="javascript:SetCwinHeight(this)"
posted @ 2006-04-27 15:50 黑咖啡 阅读(39294) | 评论 (13)编辑 收藏
RSS为Really Simple Syndication(简易供稿)的缩写,是某一站点用来和其它站点之间共享内容的一种简易方式,也叫聚合内容。网络用户可以在客户端借助于支持RSS的新闻聚合工具软件(例如SharpReader NewzCrawler、FeedDemon RSSReader),在不打开网站内容页面的情况下阅读支持RSS输出的网站内容。可见,网站提供RSS输出,有利于让用户发现网站内容的更新。在高速高质高效成为主流呼声的互联网时代,RSS无疑推动了网上信息的传播,提出了另一种看世界的方式。

    RSS,原意是把网站内容如标题、链接、部分内文甚至全文转换为可延伸标示语言(XML:eXtensible Markup Language)的格式,以向其它网站供稿,使用者可以用一般的浏览器观看,也可以用特殊的“阅读器”软件来阅读。
posted @ 2006-04-27 15:19 黑咖啡 阅读(188) | 评论 (0)编辑 收藏

WikiWiki一词来源于夏威夷语的 "wee kee wee kee" ,原本是“快点”的意思。在这里WikiWiki指一种超文本系统。这种超文本系统支持面向社群的协作式写作,同时也包括一组支持这种写作的辅助工具。我们可以在Web的基础上对Wiki文本进行浏览、创建、更改,而且创建、更改、发布的代价远比HTML文本为小;同时Wiki系统还支持面向社群的协作式写作,为协作式写作提供必要帮助;最后,Wiki的写作者自然构成了一个社群,Wiki系统为这个社群提供简单的交流工具。与其它超文本系统相比,wiki有使用方便及开放的特点,所以wiki系统可以帮助我们在一个社群内共享某领域的知识。

1995年Ward Cunningham为了方便模式社群的交流建立了一个工具-波特兰模式知识库(Portland Pattern Repository)。在建立这个系统的过程中,Ward Cunningham创造了Wiki的概念和名称,并且实现了支持这些概念的服务系统。这个系统是最早的Wiki系统。从1996年至2000年间,波特兰模式知识库围绕着面向社群的协作式写作,不断发展出一些支持这种写作的辅助工具,从而使Wiki的概念不断得到丰富。同时Wiki的概念也得到了传播,出现了许多类似的网站和软件系统。

您现在所访问的Wikipedia是目前世界上最大的Wiki系统,它是一个基于Wiki和GNU FDL的百科全书网站系统。该系统于2001年1月投入运行,2001年2月超过1,000条条目,2001年7月超过10,000条条目,目前(2003年1月)已经接近100,000条条目。Wikipedia条目的迅速增长说明了Wikipedia系统的健壮,也说明了Wiki的概念是经得起验证的。

Wiki的历史还不长,无论是Wiki概念自身,还是相关软件系统的特性,还都在热烈的讨论中;所以怎样的一个站点才能称得上是一个Wiki系统还是有争议的。与Wiki相关最近出现的技术还有Weblog,它们都降低了超文本写作和发布的难度。这两者都与内容管理系统关系紧密。

Wiki的特点

使用方便

维护快捷:快速创建、存取、更改超文本页面(这也是为什么叫作 "wiki wiki" 的原因)。

格式简单:用简单的格式标记来取代 HTML 的复杂格式标记。(类似所见即所得的风格)

链接方便:通过简单标记,直接以关键字名来建立链接(页面、外部连接、图像等)。

命名平易:关键字名就是页面名称,并且被置于一个单层、平直的名空间中。

有组织

自组织的:同页面的内容一样,整个超文本的组织结构也是可以修改、演化的。

可汇聚的:系统内多个内容重复的页面可以被汇聚于其中的某个,相应的链接结构也随之改变。

可增长

可增长:页面的链接目标可以尚未存在,通过点击链接,我们可以创建这些页面,从而使系统得到增长。

修订历史:记录页面的修订历史,页面的各个版本都可以被获取。

开放性

开放的:社群的成员可以任意创建、修改、删除页面。

可观察:系统内页面的变动可以被访问者观察到。

相关条目

Wiki引擎

Web log

内容管理系统

群件

posted @ 2006-04-27 15:19 黑咖啡 阅读(187) | 评论 (0)编辑 收藏

<2006年4月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

留言簿(2)

随笔分类(67)

文章分类(43)

Good Article

Good Blogs

Open Source

最新随笔

最新评论

阅读排行榜

评论排行榜