速安GeChe手游下载站

七种武器之多情环(高考之后:怎样练就你的七种武器?)新闻

栏目

七种武器之多情环(高考之后:怎样练就你的七种武器?)

网络整理 2023-02-04 03:21:54

七种武器之多情环文章列表:

七种武器之多情环(高考之后:怎样练就你的七种武器?)

高考之后:怎样练就你的七种武器?

《七种武器》是著名武侠小说家古龙的代表作之一。作品描绘了七种非一般江湖武器:长生剑、孔雀翎、碧玉刀、多情环、离别钩、霸王枪、拳头,件件精妙绝伦。七种不可思议的武器,七个奇崛诡异的故事,实则表达了人心与人性的七种力量。

有人的地方就有江湖。高考后,你将走出父母怀抱,开始一段新的人生旅程。除了选好专业、填报志愿,建议你提前做好规划,利用这个假期努力炼就自己的“七种武器”。

1、安排一次旅行。长生剑为古龙的第一种武器,剑名取意来自于李白的诗:“仙人抚我顶,结发受长生。”它的含义是笑,无论遇上多大困难都要笑一笑,因为笑比剑更管用。读万卷书,不如行万里路;行万里路,不如阅人无数。世界那么大,去看看吧。自己制定旅行计划,感受风土人情,记录旅途见闻。当你旅行归来,你会发现:经风历雨,笑对人生,将是你行走江湖的一把利器。

2、学一点才艺。名震天下的暗器孔雀翎,一直让武侠迷们向往不已,它使用简单,却威力无边。它蕴含的意义是信心,就像有人说的,信心比黄金更重要。在大学生活中,不是只有学习,还有诗和远方。分数不再像高中那么重要,社交能力、组织能力等也成为考量一个人的重要指标。如果你能结合自己的兴趣爱好,学习一些才艺比如舞蹈、书法、乐器等,不仅能大大增加自己“出境”的机会,还会不断增强你的自信心。

3、学车考驾照。段玉是《碧玉刀》的主人公,诚实就是他的可爱之处。所以,碧玉刀在这里代表的是诚实,只有诚实的人才能被人信任,只有诚实好运才会一直伴随着他。当然,诚实不仅是一种品格,还是一种说到做到的落实能力。目前,开车已经成为生活必备的技能。趁着高考后的长假,赶紧报个驾校学开车吧! 等你拿到驾照,不仅可以为你将来的约会、实习提供方便,更可以助力你去干更有意义的事情。

4、学会表达爱。《多情环》讲的其实是仇恨,主人公被仇恨所驱使,一步步地把敌人、也把自己逼向了死亡。有人说,没有无缘无故的爱,也没有无缘无故的恨。古龙用仇恨的力量,告诉我们爱的价值。高考之后,面对初恋的青涩和心动,勇敢表达自己的心声,别让青春留下遗憾。同时,也要注意表达方法和别人的感受,因为学会爱,学会表达,也是自我成长的体现。

5、参加社会体验。霸王枪是江湖上独一无二的一杆枪,枪尖是纯钢,枪杆也是纯钢。它的含义是勇气,一个人只要有勇气去冒险,天下就没有不能解决的事。在保证安全的前提下,要积极参加社会体验,可以在打工中体味生活艰辛,培养独立生存的能力,也可以参与社会公益活动,做一名青年志愿者,发挥自己的特长,帮助需要帮助的人。人生没有白走的路,每一步都算数。你的人生阅历,必将积累你前行的勇气。

6、为父母做饭。《离别钩》题记:“你用离别钩,只不过为了要相聚。”它的真正含义是团聚。龙应台在《目送》中写道:“所谓父女母子一场,只不过意味着,你和他的缘分就是今生今世不断地在目送他的背影渐行渐远。你站立在小路的这一端,看着他逐渐消失在小路转弯的地方,而且,他用背影告诉你:不必追。”离开父母是一个人真正的人生开始,高考之后,你和父母在一起共同生活的时间会越来越少。建议你利用这段时间,用心学习几个拿手菜,给父母多做几顿饭,一是感谢他们的陪伴与付出,二是用行动告诉他们:放心吧,你已经长大了!

7、坚持健身。古龙拟订了《七种武器》的书名,却没有完成这个系列。有人把《拳头》作为第七种武器,也有人说是《英雄无泪》中的一口箱子。其实,拳头也好,箱子也罢,都暗含了第七种武器的内涵:没有武器就是有武器。这就好象人生的各个要素:金钱、地位、财富、事业、家庭、子女都是“0”,只有身体健康才是“1”。高考期间因为忙于学习,很多同学处于亚健康状态,考完肌肉练起来让自己变得更健康。只有坚持锻炼,拥有健康,才能加油向未来!

最后,一首小诗送给即将和已经步入大学的你们:

剑气满天花满楼,“七种武器”四海游。

清风明月我为伴,逐梦天涯未许愁。

作者:江湖行茶社,希望以文字传递力量,信息创造价值。请您稍微关注,偶尔点赞,让我们一起慢品茶韵,闲话短长。

七种武器之离别钩,男主角第一次使用离别钩便钩断了自己胳膊

古龙的七种武器系列,七种武器的名字都很美。枪是霸王枪,钩是离别钩,刀是碧玉刀,剑是长生剑,环是多情环,暗器是孔雀翎,唯美名字的背后却是残酷的杀戮武器。再美的名字,也掩盖不了它是杀人武器的事实。武器能伤人,也能伤己。在《离别钩》中,男主角杨铮便用离别钩让自己的胳膊与自己的身体分了家。

古龙笔下知名度高的男主男配很多,李寻欢、萧十一郎、楚留香、陆小凤、西门吹雪、叶孤城、阿飞、荆无命、傅红雪、叶开。这些都是大家耳熟能详的,也有些男主角虽然是男主角,知名度比起以上这些人物,要远逊很多。比如《多情环》中的萧少英,《离别钩》中的杨铮,《大人物》杨凡,《七杀手》柳长街等等,今天我们来聊聊《离别钩》,七种武器之一的《离别钩》。

离别钩既不像刀,也不象剑,前锋虽然弯曲如钩,却又不是钩。是一件四不像的兵器,蓝一尘弃之不用后给了杨铮的父亲杨恨,杨恨在机缘巧合之下,练成了离别钩的绝技,成了名动江湖的大盗。杨恨死前,将离别钩传给了杨铮,告诫杨铮,不到万不得已的时候,决不能用离别钩。【 杨铮神情黯然:"这也是我父亲唯一留下来给我的遗物,可是他老人家又再三告诫我,不到生死关头,非但绝不能动用它,而且连说都不能说出来。"】

离别钩这个名字是杨恨取的,杨铮的爱人吕素文曾问杨铮,“既然是钩,应该钩住才对,为什么要叫离别?”杨铮回答,"因为这柄钩无论钩住什么,都会造成离别,如果它钩住你的脚,你的脚就和腿离别。钩住喉咙,你就要跟这个世界离别。”多情自古伤离别,在诗中是唯美的,但作为兵器,却是残忍的。杨铮在迫不得已之下,第一次使用离别钩自卫,便跟自己的胳膊离别。

杨铮本是小县城的捕头,日子过得很平凡,对公务尽心尽力,对属下照顾有加,对吕素文专一痴情。他这样的小人物,很平凡也很普通。普通平凡到,连狄青麟这样的世袭一等侯,根本不把他放在眼里。可恰恰给予狄青麟致命一击,破了狄青麟惊天大案的就是这个他看不上的小捕头。杨铮跟人决斗很有意思,从来不显露武功,用的都是蛮劲和拼命。也正是因为敢于拼命,明知不可为而为之,反而数次化险为夷。跟狄青麟一战,杨铮与之力量悬殊巨大。但杨铮拼着自断一臂的牺牲精神,最终让狄青麟成了离别钩之下的亡魂。“在一阵深入骨髓的痛苦中,使杨铮的臂离别了身体的离别钩已经斜斜飞起,飞上了永远高高在上的狄青麟的咽喉里。于是狄青麟就离别了这个世界。”

第一次使用离别钩便断了自己的胳膊,要是多使用几次,那还了得,岂不是胳膊大腿满天飞,难怪杨铮的父亲不让杨铮使用离别钩,这离别钩当真是时时刻刻让人离别(这几句都是玩笑之语)?说实话,七种武器系列,除了《碧玉刀》比较小清新外,其余的都比较血腥,越是唯美,越是残忍。应了那句话,理想很丰满,现实很骨感。

七种武器——当今世界足坛的前锋们

1、长生剑——伊布

伊布

伊布

剑名长生,有剑在手,心已长生。从马尔默的初出茅庐到阿贾克斯的青春激荡,从都灵城的沉稳内敛到米兰城的时尚与梦想,从巴塞罗那的失意沮丧,到巴黎城迷幻灯塔,从曼彻斯特不舍的牵挂到如今的天使之城。兹拉坦·伊布拉西莫维奇似乎习惯了漂泊。对于他,时间的流逝与空间的转换都只是淡然一笑,因为他已经历太多;而不变的,是一个个简洁的进球,和一次次胜利的荣光。恰如那柄长生剑,漂泊了太久,所以忘却了时间,唯一心底淡淡留存的,是一个个倒在剑下的影子。

小说中,长生剑真正的所在是笑容,一种无论生死都能淡然的笑容。而现实中,兹拉坦·伊布拉西莫维奇无愧长生剑的美名。无论成功失败,球场上的他总能绽放出淡淡的笑容。这种笑容是对自己最大的自信,是对队友最好的鼓励,而对敌人,是最后的宣判。 

作为一位年近四十的高产前锋,相信大家还对上赛季兹拉坦·伊布拉西莫维奇在大联盟的那记半转身抽射记忆犹新,我们在惊喜兹拉坦·伊布拉西莫维奇在二十年于一日的高效的同时,也遗憾于他的冠军薄上少了那几项重要荣誉,冠军杯、欧洲杯、世界杯,他在国家队也没有有更好的表现。在此!我们也只能寄希望于他真的能有非凡的“长生”,在以后的大联盟赛场能给我们奉献更多的进球与胜利。

2、碧玉刀——梅西

梅西

刀只是粗豪与狂放?不,因为还有一把刀名叫碧玉刀。他永远只是那个球王的接班人?不,因为他叫里奥·梅西。球风细腻却善打硬仗,身材矮小却精于头球,古怪精灵却在球场上致命的冷静,就像碧玉刀永远被人惊奇于“碧玉”,而常常忘记了他是把刀。而对于忘记的人,弯刀的划痕就是最好的提醒。

梅西永远不会缺乏媒体的关注。不管是与C罗的竞争还是他在巴萨和阿根廷国家队迥异的竞技状态。碧玉刀其实象征诚实。留在诺坎普,他没有像前辈门那般起誓过,但却一直认真坚守,因为他诚实的面对他的球迷。当然,他从不否认有一天会离开,因为这也是诚实。也许在如今的阿根廷国家队,我们除了寄希望于他碧玉弯刀般的任意球上,更希望他能在三年后的世界杯赛场上为自己最后再战一场......

3、多情环——迭戈-科斯塔

迭戈-科斯塔

对敌人的无情?就是对挚爱球队的多情?

迭戈.科斯塔表现出对马竞的深情人尽皆知,自愿降薪,停赛半年,只愿回归马竞,球场上的迭戈.科斯塔爱着马竞的球迷——虽然当年是马竞抛弃了他——然而,他就是这样傻乎乎的多情。就像当初青年的时候不被马竞认可四处租借,再到马竞失去法尔考,迭戈.科斯塔无怨无悔的回到马竞,成为马竞新一代的神锋,他似乎总是让人感动,似乎总是那么痴于感情。

然而,小说里多情环其实是一种绝情,而绝情,恰恰是成功的开始。当迭戈.科斯塔一次次的将皮球送进对手的大门时候,他其实选择了一条绝情的道路。因为绝情,所以执着,这种执着帮助他成为当今足坛最炙手可热的射手,帮助他成为马竞球迷的宠儿,帮助他获得过去从没获得过的赞誉。也许这次抉择,足以让多情环走上真正兵器谱的最高排名,也足以让迭戈.科斯塔真正走向巨星之路。

4、孔雀翎——内马尔

内马尔

孔雀翎,华美而锋利的武器。正如球场上的内马尔,如今内马尔的球技艺术与实用并存。武器的终极目标是在惊艳中解决对手,而如此说来,内马尔正是球场上最终极的武器。华丽的舞步,极高的进球率,内马尔已经甩开了所有的竞争对手,独自一人行走在世界足坛的巅峰。已经完完全全成为了90后球员的大哥,孔雀翻飞,正是敌人最胆寒的时刻;而内马尔起舞,对手又怎能不心惊。

孔雀翎代表的其实是信心,而内马尔,则是信心的最好诠释。无论是曾经人们诟病的身体单薄的前途渺茫还是如今世界第一身价的高处不胜寒,内马尔在球场上始终信心满满。一切一切告诉我们,内马尔就是所有热爱他的人信心的源泉。然而信心毕竟不是霸气,孔雀翎也终究是暗器。也许在去年的俄罗斯,注定不是内马尔的舞台......未来的内马尔我们一起期待。

5、霸王枪——C罗

C罗

听到这个名字你一定血脉喷张吧。力拔山兮气盖世,这是怎样的气魄!然而霸王使得并不是枪,使枪的也不是霸王。所以这柄枪的内涵并不是勇气,也不是痴情,而是冷静。一如球场上的C罗,他的进球或许霸气十足,或许灵性四溢,唯一不变的正是进球隐藏下的冷静。无论是面对质疑还是掌声,他始终保持一颗清醒的头脑,用进球来告诉人们故事的结局。

作为一位巨星,作为一名球员,激情是必然的选择,但是,激情不能代替理智。成功是一种结果,如果你在乎,就必须冷静地面对。哪怕四面楚歌,哪怕成功就在毫厘之间,你不能改变的只有内心的冷静。所以,在以后的日子里不论是尤文还是葡萄牙国家队,所以我相信你们带领他们赢得更多荣誉。之所以这柄枪是霸王枪,是因为他的冷静足以让别人臣服。

6、拳头——苏亚雷斯

苏亚雷斯

每个人都喜欢华丽的武器,却忘了自己已经拥有最致命的武器。当今世界足球论近身缠斗能力无人出苏亚雷斯其右,他为了胜利可以去咬人,可以手球,哪怕千夫所指也在所不惜。在巴萨罗纳媒体的聚光灯永远是梅西、是天才登贝莱、库蒂尼奥。而苏亚雷斯永远和我们相隔的太远,以至于当我们细数当今足坛的前锋人才总是将他遗忘。然而,拳头的威力证明了遗忘他的人是多么的愚蠢。苏亚雷斯在巴萨的如鱼得水总是若有若无的提醒大家,他也是当今世界足坛顶尖前锋的有力一员。

其实当今世界足坛有实力的前锋球员太多太多,苏亚雷斯只是其中的优秀代表而已。他们低调而华丽,他们鲜是媒体的宠儿,但他们在球场上诠释了什么叫实力。鲜花和掌声应该属于他们,朴实的拳头我们谁都拥有,但是又有几个人能真正将它握紧舒为掌,握成拳?

7、离别钩——托雷斯

托雷斯

也许一篇文章写到拳头应该终结了,但是终有一丝离别的不舍。小说中说,离别钩代表的是相聚。但我真的不知道,托雷斯离开马竞离开主流联赛,再一次回到人们的视线希望不会是他的退役声明....未来的日子里我们是否还能有机会相聚。也许他巅峰不在,也许他的经验已经弥补不了身体的劣势,但是他始终让我们无法割舍。其实不仅仅是托雷斯,还有德罗巴、罗纳尔迪尼奥、吉拉迪诺、基斯林等等这些所有的2018年告别我们视线的老将。如果在多年前写这篇文章,孔雀翎的惊艳,碧玉刀的华美,长生剑的执着,多情环的痴情,霸王枪的冷静和拳头的朴实,也许是他们最好的诠释。而今,时代已经不属于他们,足球场也许不是他们的舞台,但是在我们的心头,他们不会别离。离别钩,其实我们更想再相聚..

当然一千个人的心中就有一千个哈姆雷特,你心中的七种武器又是谁呢?欢迎在留言区留言讨论。

揭晓多情环里的青龙会老大——公子如龙,翱翔九天

在古龙的江湖里,青龙会存在几百年了。

青龙老大的豪言壮语是:“有阳光的地方,就有青龙会存在!”

青龙会有12个堂,每个月代表一个堂,有365个分舵,每一天代表一个分舵。

青龙老大定下的规矩:完不成任务者,死!拒绝加入青龙会者,死!

所以,青龙会成员为了完成任务,全部不择手段,没有一个敢不尽力的。

青龙会想吸收谁入会,要么加入,为其所用;要么被列入暗杀名单,跟青龙会斗。

没有人知道青龙会在哪里,谁是青龙会成员,但谁都知道,或许跟你相处了多年的亲密之人,就是青龙会的。

青龙会就像一个权利交易的平台,不断的死人,不断的招人,只会强盛,不会衰亡。

青龙会又像一条翱翔九天的毒龙,还像一只卧在你身边的恶虎,谁都知道它的存在,但却看不见它,因为它是隐形的。

有人能打掉它的一鳞半爪,却没有人能毁灭它。

青龙会是江湖中最庞大、最神秘、最可怕的帮派,没有之一。

有的读者认为七种武器在同一个时代,青龙会老大只有一个,这种想法是不对的。

青龙会存在数百年了,有很多个老大,古龙在数百年里截取七种武器斗败青龙会的经典故事,反应七种人生哲理,不是发生在同一个时代的。

在古龙小说里,铁中棠、楚留香、陆小凤、沈浪、李寻欢、叶开等人独领了风骚,但当世大侠并非只有他们这些人。

江湖很大,江湖上有很多英雄,每天都有英雄故事发生,七种武器的主人是跟那些大侠错开的英雄。

《天涯明月刀》里描写了两种武器,可推断出七种武器的大致年代。

①孔雀翎。

孔雀山庄第30代庄主秋水清和傅红雪是好朋友,这时的孔雀山庄建庄400多年,公子羽属下灭了孔雀山庄。

七种武器之一的《孔雀翎》——秋凤梧和高立战青龙会7月15的时候,孔雀山庄建庄300多年,秋水清是秋凤梧的曾孙。

秋凤梧比傅红雪早100多年,《孔雀翎》故事发生在傅红雪时代的100多年前。

②多情环。

卓夫人摘下一对铁环,说:“昔年金钱帮称霸武林,帮主上宫金虹威震天下,这就是他用的龙凤双环。”

傅红雪说:“不是,这是多情环,西北铁环门下弟子的独门武器。”

《多情环》发生在公子羽时代,傅红雪对当世的武器很有研究。

楚留香时代、陆小凤时代、叶开时代、七杀手时代都有青龙会出现。

七种武器:

第一种武器:长生剑。

第二种武器:孔雀翎。

第三种武器:碧玉刀。

第四种武器:多情环。

第五种武器:霸王枪。

第六种武器:离别钩。

有人认为小马的拳头是第七种武器,也有人认为萧泪血的箱子是第七种武器。

其实古大侠还没写第七种武器,就英年早逝了,没有第七种武器。

七种武器的大致年代:

《碧玉刀》、《离别钩》在小李飞刀以前的时代。

《孔雀翎》、《霸王枪》在沈浪以前的时代。

《长生剑》是陆小凤以前,楚留香退隐后的第一杀器。

《多情环》在公子羽时代。

多情环套住人的脖子,就像情人多情的手一样,死死不放,越收越紧,直到要了这个人的命,因此叫多情环。

多情环是可怕的杀人利器。

在西北道上,盛天霸16岁出道,屡次以多情环击败强敌,创立双环门,威镇西陲近30年。

每杀一个强敌,盛天霸就在多情环上刻一道痕迹。

只有“强敌”才有资格在多情环上留一道痕迹。

13道痕迹,13条生命,13个曾显赫一时的英雄好汉,死于盛天霸的多情环。

双环门门下弟子也是如此,门下弟子的多情环上刻的痕迹,远远多过盛天霸。

多情环上的每一道痕迹,都代表多情环持有者的辉煌。

杀人者,人亦杀之。

就在双环门风头正盛时,被天香堂里应外合,一举剿灭。

威震西北的盛天霸被杀,多情环到了天香堂堂主葛停香的手里。

葛停香只筹备3个月,就灭了根深蒂固的双环门,吞并了双环门近30年的基业。

葛停香得到盛天霸的多情环,却没给他在环上留一道痕迹。

盛天霸奋斗了40多年,就这样被灭了门,他得到了什么?连一道痕迹都没有!

这就是江湖。

葛停香知道自己迟早有一天,也会像盛天霸那样被人杀死,这是江湖人的命运,谁也避免不了。

只要还没死,就得热血江湖!葛停香接下来做的是彻底根除双环门的漏网之鱼!

就在这时候,双环门被革除师门、贪杯好色、放荡不羁的纨绔子弟、出了名的败家子萧少英,出卖双环门的漏网之鱼王锐、杨麟,来投靠葛停香。

葛停香当然怀疑他的“荆轲刺秦王”之计,但不想“无证据”杀投靠之人,留他在身边监视着。

萧少英极有心计,城府极深,并且是有备而来,早就收买了葛停香身边的人,一次次为天香堂立下大功,通过了葛停香的重重考验。

为了证明自己“无可救药的浪荡子本色”,萧少英竟然“吃了熊心豹子胆”,上葛停香最心爱的女人郭玉娘。

虽然没有成功,但彻底赢得了葛停香的信任。

萧少英是故意的,这是他的阴谋。

葛停香终于相信萧少英不是来杀他的,越来越欣赏这个有本事却“胸无大志”的少年,把他当成儿子一样,准备在百年之后,把天香堂传给他。

萧少英何等聪明!自然感到了葛停香对他的真挚感情,但是他不能做葛停香的儿子,他要报仇!

盛天霸是萧少英的师父,因为盛天霸感到了天香堂的威胁,也察觉到双环门有葛停香收买的叛徒,所以,才把萧少英逐出师门。

没有人知道萧少英是盛天霸最器重、最信任的弟子,也是盛天霸的女婿!

两年前,萧少英被逐出师门后,故意堕落,活成败家子、浪荡子,真实目的是让天香堂轻视他,忽视他。

他那时就在为未来而活,为师父和未婚妻盛如兰而活。

后来,天香堂真的灭了双环门,萧少英的师父和未婚妻盛如兰被葛停香杀害,这等深仇大恨已经深入了萧少英的骨髓里。

因为葛停香对萧少英的真挚感情,萧少英不愿再等,他怕再等下去,就不忍心杀葛停香了,因为他本是个重感情的人。

萧少英制定青龙会9月初9渗入天香堂的假象,给葛停香施加压力,并通过葛停香身边的人葛新,让葛停香认定郭玉娘是青龙会渗入天香堂的奸细。

葛停香果然上当,亲手杀死最心爱的女人郭玉娘!

萧少英哈哈大笑,说出所有的真相。

你杀了我的妻子盛如兰,我要你亲手杀死你最爱的女人!

葛停香承受不住这致命一击,一下子老了,心伤了,心碎了,心死了,太可怕的仇恨!

葛停香拿起盛天霸的多情环,刻上第14道痕迹,自杀,把命还给了盛天霸和盛如兰,或者说还给了萧少英。

“杀死我的并不是这双多情环,而是仇恨!”葛停香死前的最后一句话。

仇恨的本身,就是种武器,而且是最可怕的一种。

古大侠讲的第四种武器,其实也不是多情环,而是仇恨。

故事到这里并没有完。

李千山是双环门叛徒,也是青龙会的人。

“本属青龙会,来作卧底奸,九月初九日,翱翔上九天。”

葛新曾经被仇家所逼,投靠双环门,被李千山无情拒绝。

萧少英追上去,替葛新杀了几个追踪的敌人,与葛新成了朋友。

葛新投靠天香堂,成了葛停香身边的人,帮助萧少英报了大仇。

李千山坚决拒绝葛新加入双环门,因为他要吸收葛新进青龙会。

葛新先进的青龙会,再进的天香堂。

李千山帮葛停香灭了双环门,葛新帮萧少英灭了天香堂。

西北是青龙会9月初9的了,这就是青龙会平台的神奇,只一个李千山,翻手为云,覆手为雨!

李千山和葛新说出真相,萧少英才知道郭玉娘和葛成也是青龙会的人,青龙会的人无所不在!无所不用其极!

萧少英也不是吃素的,用一筒“七星透骨针”杀了葛新,用另一筒“七星透骨针”与李千山同归于尽。

《多情环》血腥、残酷,从开篇到结局,所有出现的人物都死了,就因为那带血的仇恨。

由此,我想到李寻欢教叶开“宽恕”是多么伟大!仇恨会毁了一个人,只要爱才是永恒的!

由此,我们也可见青龙会的可怕,只一个9月初9就有这等手段,那么,青龙老大有多可怕?

青龙老大究竟是谁?

有的读者认为《陆小凤》里的“小老头”吴明无比逆天,把他誉为古龙武侠里第一人。

那是因为他们不了解公子羽,不知道公子羽有多逆天。

公子羽得到沈浪和王怜花的传承,还有大悲赋和孔雀翎,以及其它不为人知的财富,称霸江湖10年,真正的翻手为云,覆手为雨!

小老头孤岛称王,管理百十个人,公子羽雄霸整个江湖,岂是小老头能比的?

不错!这时的青龙老大是公子羽。

钟大师惊才艳艳,乃绝世高人,但他只能当公子羽的“琴童”,因为他跟公子羽比,只能是“萤火之光与星月争辉!”

公子羽之才,浩如烟海。

钟大师说:“公子如龙,翱翔九天。”

傅红雪说:“公子羽活着,就有许多人被欺压,所以我要找到他,杀了他。”

傅红雪找到了公子羽。

公子羽说:“就因为我想得太多,所以我比你老,所以我比你强。”

傅红雪说:“你有财富,有权力,手下的高手如云,你什么都有,只少了一样,你没有生趣。”

“就算公子羽的声名能永存,你也已是个死人,没有生趣,就没有斗志.所以你与我交手,必败无疑。”傅红雪说。

“你若敢与我一战,若能胜我,我把一生卖给你,也无怨言,可是你不敢。”傅红雪说。

公子羽不敢?还是卓夫人按着他的肩膀,不让他跟傅红雪战?不管如何,他没有战。

傅红雪走了。

“我不杀你,因为你已是个死人。”

一夜之间,公子羽的讣闻,传遍了天下,震动了天下!

尘归于尘,土归于土,人总是要死的,公子羽也会死,公子羽死了!

天下人都认为公子羽已经死了,其实他还活着,真正的活着,他懂得了放下名利,珍惜眼前人,享受生命。

公子羽是沈浪的传人,本应该像沈浪那样除魔卫道,不负一身好本领,可是他却为了“满足无休止的欲望”,干了许多荒唐之事。

公子羽很神秘,是古龙江湖里的一大传奇,这时期的青龙老大非他莫属。

古大侠并未揭秘《多情环》里的青龙老大是谁,本文为江湖十年磨一剑根据原著内容推测而出,感谢阅读,下期再见。

求关注,求支持。

(图片来源网络)

MogDB企业应用 之 七种武器

MogDB企业应用 之 七种武器

如今江湖上最卷的门派,非国产数据库莫属。各位大侠们往往把精力放在拼内功(内核/架构)、拼身法(性能)、拼拳脚(功能/兼容性)、拼江湖地位(生态/社区)。然而好像并不怎么重视兵(武)器(接口/驱动/API),当然,可能我是搞C/c 出身,也许搞JAVA的兄弟并不会遇到这样的困惑,因为一套jdbc可以打遍天下。虽然市场占有率的头把交椅JAVA已经做了很多年,但随着各种开发语言的大行其道,现代企业的信息化系统中不太可能只使用单一的开发语言。因此闯荡江湖还是需要几把趁手的兵器!

本文以古龙先生的《七种武器》和武器的寓意作为类比,简单分析MogDB各种驱动的优势与应用场景。

七种武器分别是:长生剑——寓意“笑”;孔雀翎——寓意“自信”;碧玉刀——寓意“诚实”;多情环——寓意“仇恨”;霸王枪——寓意“勇气”;离别钩——寓意“团聚”;箱子——寓意“道”;

当然,《七种武器》与MogDB驱动的类比并非那么贴切,甚至有些牵强。如果各位大侠有不同见解欢迎留言评论,一起切磋MogDB的“道”。

长生剑——psycopg

天上白玉京 五楼十二城 仙人抚我顶 结发授长生。

长生剑!江湖中最可怕的一把剑。他只有杀人,从没有人能杀死他!长生剑的讲的是于“笑”——“无论多锋利的剑,也比不上那动人的一笑。一个人只要懂得利用自己的长处,根本不必用武功也一样能够将人击倒”。

“笑”对于每个人来说再简单不过了,是每个人都能利用的一件武器。和笑一样简单的开发语言那当属Python了。Python是一种代表简单主义思想的语言,它编写的程序读起来就感觉像是在读英语段落一样流畅。它懂得利用自己的长处——化繁为简,可以玩AI、大数据、做运维甚至非专业开发人员也可以熟练使用它,包括小朋友也可以拿它来进行逻辑思维的扩展。psycopg这把“长生剑”用最简单的方式杀敌于无形。

功法

江湖上有一篇入门心法供各位参考使用Python-psycopg访问postgres、openGauss、MogDB

安装

获取安装截止,下载。

$ tar -zxvf openGauss-3.0.0-openEuler-x86_64-Python.tar.gz# cp -r /home/postgres/psycopg2/ /usr/lib/python3.7/site-packages/# chmod -R 775 psycopg2/

验证

$ python3Python 3.7.9 (default, Jan 25 2022, 15:12:36)[GCC 7.3.0] on linuxType "help", "copyright", "credits" or "license" for more information.>>> import psycopg2>>> conn=psycopg2.connect(database="postgres",user="frank",password="frank@123",host="localhost",port=5432)>>> cur=conn.cursor()>>> cur.execute("CREATE TABLE student(id integer,name varchar,sex varchar);")>>> cur.execute("INSERT INTO student(id,name,sex) VALUES(%s,%s,%s)",(1,'Aspirin','M'))>>> cur.execute("INSERT INTO student(id,name,sex) VALUES(%s,%s,%s)",(2,'Taxol','F'))>>> cur.execute('SELECT * FROM student')>>> results=cur.fetchall()>>> print (results)[(1, 'Aspirin', 'M'), (2, 'Taxol', 'F')]>>> conn.commit()>>> cur.close()>>> conn.close()>>>

秘籍

继续修炼请参考官方文档

江湖

能够完美地发挥自己的特长,胜过手中锋利的剑。有了psycopg,MogDB可以在很多领域大展拳脚,比如爬虫系统、运维系统、AI、数据分析甚至是日常办公。也可以让MogDB在很多非核心的企业应用中发挥关键作用,让MogDB更贴近普通人的舒适工作区。

孔雀翎——node-postgres

孔雀翎是早已不存在的暗器,高立向朋友秋凤梧借来孔雀翎,信心十足地杀了强敌,这才发现孔雀翎已丢失。而秋凤梧告诉他,孔雀翎早就没有了,他借给高立的只是“信心”。“真正的胜利,并不是你用武器争取的,一定要用你的信心。无论多可怕的武器,也比不上人的信心。”

前些年有这样一个梗,PHP是“最好编程语言”,JavaScript将“一统天下”。不说PHP了,单讲JavaScript的信心其实并非空穴来风,从前端开发中最能打的武器,到几行代码就可以写出HTTP的服务“后端”,再到“全栈”、“大前端”。在江湖的各个门派中都有JS的一席之地。而node-postgres正是作为PostgreSQL体系数据库的那把泰山之巅的“暗器”。

功法

安装

$ npm install pg

范例

const { Client } = require('pg')const client = new Client()client.connect()client.query('SELECT version()::text as version', (err, res) => { console.log(err ? err.stack : res.rows[0].version) client.end()})

验证

PGUSER=frank PGHOST=localhost PGPASSWORD=frank@123 PGDATABASE=postgres PGPORT=15432 node test.js

实测验证最新的8.7.3版本node-postgres在MogDB 3.0.0上可正常使用,输出如下:

(MogDB 3.0.0 build 62408a0f) compiled at 2022-06-30 14:21:11 commit 0 last mr on x86_64-unknown-linux-gnu, compiled by g (GCC) 7.3.0, 64-bit

秘籍

上面的例子只是简单的范例,如果各位想继续修炼可以参考官方文档。

江湖

如果你用nodejs开发小型网站系统,爬虫系统、或者微服务架构系统要是想使用一款数据库,那么MogDB也将会出现在你的备选方案中。而node-postgres就是MogDB心中的“孔雀翎”。

碧玉刀——libpqxx

段家的碧玉刀非但价值连城,而且故老相传,都说其中还藏着一个很大的秘密。无论谁只要能解开这秘密,他立刻就可能变成富可敌国的武林高手。

尺八长的碧玉刀看上去并不华丽,也谈不上绝世神兵,气质上看起来与libpqxx有几分相似。说到libpqxx可能鲜有人知,甚至使用它的就更少了,但如果能够解开它背后的秘密或许会变成“富可敌国的武林高手”。也许大家已经猜到它背后的秘密就是——libpq。其实libpqxx也是出自名门正派,它是PostgreSQL官方开源C 客户单API。它华丽的C 外表下有着一颗C朴实的心,这也正符合了碧玉刀“诚实”的气质。

功法

还是先推荐一篇江湖上的典籍libpqxx (PostgreSQL C API)——使用简介

安装

git clone https://github.com/jtv/libpqxxgit checkout 6.4./configure --disable-documentationmake -j8make check -j 8make install

范例

test.sql

CREATE TABLE public.employee (id int4 NULL,"name" varchar(20) NULL,gender bpchar(2) NULL,birthday date NULL,email bpchar(10) NULL,remark varchar(50) NULL,salary int8 NULL);insert into employee (id,name,gender,birthday,email,remark,salary) values(1,'frank','男','2014-02-23','f@123.com','',1000);

main.cpp

#include <iostream>#include <pqxx/pqxx>int main(){ try { pqxx::connection C; std::cout << "Connected to " << C.dbname() << std::endl; pqxx::work W(C); pqxx::result R = W.exec("SELECT name FROM employee"); std::cout << "Found " << R.size() << "employees:" << std::endl; for (auto row: R) std::cout << row[0].c_str() << std::endl; std::cout << "Doubling all employees' salaries..." << std::endl; W.exec("UPDATE employee SET salary = salary*2"); std::cout << "Making changes definite: "; W.commit(); std::cout << "OK." << std::endl; } catch (const std::Exception &e) { std::cerr << e.what() << std::endl; return 1; } return 0;}

run.sh

rm -rf a.outg main.cpp -lpqxx -lpq -L/home/frank/pgsql/libexport PGDATABASE=postgresexport PGHOST=localhostexport PGPORT=15432export PGUSER=frankexport PGPASSWORD=frank@123psql -h localhost -p 15432 -d postgres -U frank -W 'frank@123' -f test.sql./a.out

编译

g main.cpp -lpqxx -lpq -L/home/frank/pgsql/lib

验证

frank@DESKTOP-6NF3B9K:~/test/libpqxx$ sh run.shpsql: warning: extra command-line argument "frank@123" ignoredPassword:DROP TABLECREATE TABLEINSERT 0 1Connected to postgresFound 1employees:frankDoubling all employees' salaries...Making changes definite: OK.

秘籍

继续修炼请参考官方文档。

江湖

libpqxx并不是什么绝世神兵,他能做的事情libpq都可以做,但通过C 封装后,它具备了更加友好的用户接口,同时也大大提升了开发效率,如果您使用C 开发MogDB的应用,或者您公司使用比较高版本的C 标准,例如:C 17,那么libpqxx会大幅减少您公司的开发成本,并且保证了代码风格的一致性。相信MogDB配上了libpqxx这把“碧玉刀”,在江湖路上必将一路坦途。

霸王枪——Golang pq

霸王枪长一丈三尺七寸三分,重七十三斤七两三钱。霸王枪象征勇气。“一个人只要有勇气去冒险,天下就绝没有不能解决的事。”

Golang是年轻充满朝气的开发语言,它诞生于2007年,发布与2009年,自发布以来,披荆斩棘,一时间搅得江湖上不得安宁。Golang以编译型语言的姿态挑战C的性能,以轻量级的携程挑战java和c 的并发,从日志处理、运维监控,到虚拟机、容器、区块链等后端,再到代理、web应用、API应用,凭着这股“勇气”,在各个领域Go都有上佳表现。

Golang pq对于PostgreSQL系的数据库有着非常重要的作用,不仅仅是在企业应用中,在MogDB的周边工具(如MTK等)开发中,这杆“霸王枪”也发发挥了重要作用,也许日后MogDB的监控和运维工具也会有Golang pq的一席之地。

对于Golang pq,恩墨也有自己的版本:openGauss-connector-go-pq

功法

获取

go get gitee.com/opengauss/openGauss-connector-go-pq

注意:如果遇到golang.org/x/ 报错相关问题可以使用下面方法

mkdir $GOPATH/src/golang.org/x/cd $GOPATH/src/golang.org/x/git clone https://github.com/golang/text.git textgit clone https://github.com/golang/crypto.git cryptogo install textgo install crypto

范例

package mainimport ( "fmt" "log" "database/sql" _ "gitee.com/opengauss/openGauss-connector-go-pq")func main() { connStr := "host=127.0.0.1 port=15432 user=frank password=frank@123 dbname=postgres sslmode=disable" // db, err := sql.Open("opengauss", connStr) db, err := sql.Open("mogdb", connStr) if err != nil { log.Fatal(err) } var version string err = db.QueryRow("select version()").Scan(&version) if err != nil { log.Fatal(err) } fmt.Println(version)}

验证

frank@DESKTOP-6NF3B9K:~/test/go/src$ lltotal 7480drwxr-xr-x 5 frank frank 4096 Aug 6 09:31 ./drwxr-xr-x 4 frank frank 4096 Aug 5 21:54 ../drwxr-xr-x 3 frank frank 4096 Aug 5 21:52 gitee.com/drwxr-xr-x 3 frank frank 4096 Aug 5 21:52 github.com/drwxr-xr-x 3 frank frank 4096 Aug 5 21:54 golang.org/-rwxr-xr-x 1 frank frank 7631349 Aug 6 09:26 main*-rw-r--r-- 1 frank frank 480 Aug 5 21:57 main.gofrank@DESKTOP-6NF3B9K:~/test/go/src$ ./main(MogDB 3.0.0 build 62408a0f) compiled at 2022-06-30 14:21:11 commit 0 last mr on x86_64-unknown-linux-gnu, compiled by g (GCC) 7.3.0, 64-bitfrank@DESKTOP-6NF3B9K:~/test/go/src$

秘籍

Golang pq 源码

openGauss-connector-go-pq源码

江湖

Golang就像横空出世的霸王枪,凭借着“勇气”已经撼动了不少企业级的JAVA和C/C 应用,一些企业的核心系统已经逐渐的开始向Golang转型。随着应用架构的不断演进,MogDB想在江湖上保持竞争力,一定要紧握Golang pq这杆抢。

多情环——JDBC

多情自古空余恨,好梦由来最易醒。岂是拈花难解脱,可怜飞絮太飘零。

想必大家还记得Oracle宣布JDK 8u202以上版本开始商用收费的消息,“好梦由来最易醒”,从SUN到Oracle再到商用收费,也许这是必然的经过,随着商用收费的宣布,我们的梦也应该醒了。虽然可以选择继续使用低版本,或者openJDK,但一定会对企业应用和未来的技术路线有一定的冲击。欣喜的是国内的华为、阿里也有基于openJDK的产品,但在我们庞大系统中分散着太多的组件,需要全面的兼容性评估——岂是拈花难解脱,可怜飞絮太飘零。

java无疑是目前市场占有率做大的一门企业级开发语言,没有之一。可以说几乎没有企业的信息化系统不使用java作为主要的技术栈,从业务系统、大数据、信息系统几乎java应用遍及大部分核心系统。作为应用与数据库的桥梁——JDBC来说真是又爱又恨。

功法

安装

官方软件包

范例

import java.sql.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;public class JdbcDemo { public static void main(String[] args) throws Exception { System.out.println("System.out.println(rs.getString(1));"); Class.forName("org.opengauss.Driver"); Connection conn = DriverManager.getConnection("jdbc:opengauss://localhost:15432/postgres?user=frank&password=frank@123&ssl=false"); String sql = "select version()"; Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { System.out.print("Version : "); System.out.println(rs.getString(1)); } stmt.close(); conn.close(); }}

验证

$ export CLASSPATH=/home/frank/test/java/opengauss-jdbc-3.0.0.jar:$CLASSPATH$ javac JdbcDemo.java$ java JdbcDemoSystem.out.println(rs.getString(1));Aug 06, 2022 10:24:12 AM org.opengauss.core.v3.ConnectionFactoryImpl openConnectionImplINFO: [11a01b6b-3b51-4549-b552-6f836646ef36] Try to connect. IP: localhost:15432Aug 06, 2022 10:24:12 AM org.opengauss.core.v3.ConnectionFactoryImpl openConnectionImplINFO: [127.0.0.1:39218/ocalhost/127.0.0.1:15432] Connection is established. ID: 11a01b6b-3b51-4549-b552-6f836646ef36Aug 06, 2022 10:24:12 AM org.opengauss.core.v3.ConnectionFactoryImpl openConnectionImplINFO: Connect complete. ID: 11a01b6b-3b51-4549-b552-6f836646ef36Version : (MogDB 3.0.0 build 62408a0f) compiled at 2022-06-30 14:21:11 commit 0 last mr on x86_64-unknown-linux-gnu, compiled by g (GCC) 7.3.0, 64-bit

秘籍

PostgreSQL JDBC Driver

openGauss Connectors

江湖

对java我们有着复杂的感情,国内有着最多的java程序员群体,甚至可以用“过剩”这个词。对于JDK来说,虽然国内像阿里、华为这样的大厂已经有了JDK的产品,但尚未成熟,需要社区继续努力和生态的支撑。MogDB作为基于openGauss的企业级数据库,严格说也属于华为鲲鹏生态的一部分,华为有着完备的全栈生态体系,从Kunpeng 处理器、openEuler操作系统、openGauss/GaussDB数据库到毕昇编译器,毕昇JDK。在IT技术垂直领域几乎面面俱到。MogDB是华为数据库生态领域的水平拓展,既享受着生态的红利,又是生态建设的主要力量——恩墨对openGauss社区的贡献仅次于华为。

离别钩——ODBC

“你为什么要用如此残酷的武器?”“因为我不愿被人强迫与我所爱的人离别。”……“你用离别钩,只不过为了要相聚。”

说起ODBC,一些早年的程序员会比较数据,但现在似乎渐渐的与我们“离别”,JDBC也是复用了ODBC的思想后大行其道,但由于原生的数据库C/C 接口从性能到兼容性上表现的更为出色,而C/C 往往追求的恰恰是性能,所以ODBC在企业应用的用武之地变得越来越少。

功法

安装

获取unixODBC

获取openGauss ODBC驱动

tar -zxvf unixODBC-2.3.7pre.tar.gzcd unixODBC-2.3.7pre./configuremake -j6sudo make installtar -zxvf openGauss-3.0.0-ODBC.tar.gzexport ODBCSYSINI=/usr/local/etcexport ODBCINI=/usr/local/etc/odbc.iniexport LD_LIBRARY_PATH=/home/frank/test/odbc/lib:/home/frank/test/odbc/odbc/lib:$LD_LIBRARY_PATH

配置

/usr/local/etc/odbcinst.ini

# /usr/local/etc/odbcinst.ini[GaussMPP]Driver64=/home/frank/test/odbc/odbc/lib/psqlodbcw.sosetup=/home/frank/test/odbc/odbc/lib/psqlodbcw.so

/usr/local/etc/odbc.ini

# /usr/local/etc/odbc.ini[MOGODBC]Driver=GaussMPPServername=localhostDatabase=postgresUsername=frankPassword=frank@123Port=15432Sslmode=disablefrank@DESKTOP-6NF3B9K:/usr/local/etc$ isql -v MOGODBC --------------------------------------- | Connected! || || sql-statement || help [tablename] || quit || | --------------------------------------- SQL> select version(); ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | version | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | (MogDB 3.0.0 build 62408a0f) compiled at 2022-06-30 14:21:11 commit 0 last mr on x86_64-unknown-linux-gnu, compiled by g (GCC) 7.3.0, 64-bit | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SQLRowCount returns 11 rows fetchedSQL>

范例

// 此示例演示如何通过ODBC方式获取MogDB中的数据。// DBtest.c (compile with: libodbc.so)#include <stdlib.h>#include <stdio.h>#include <sqlext.h>#ifdef WIN32#include <windows.h>#endifSQLHENV V_OD_Env; // Handle ODBC environmentSQLHSTMT V_OD_hstmt; // Handle statementSQLHDBC V_OD_hdbc; // Handle connectionchar typename[100];SQLINTEGER value = 100;SQLINTEGER V_OD_erg,V_OD_buffer,V_OD_err,V_OD_id;int main(int argc,char *argv[]){ // 1. 申请环境句柄 V_OD_erg = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&V_OD_Env); if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) { printf("Error AllocHandlen"); exit(0); } // 2. 设置环境属性(版本信息) SQLSetEnvAttr(V_OD_Env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); // 3. 申请连接句柄 V_OD_erg = SQLAllocHandle(SQL_HANDLE_DBC, V_OD_Env, &V_OD_hdbc); if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) { SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); } // 4. 设置连接属性 SQLSetConnectAttr(V_OD_hdbc, SQL_ATTR_AUTOCOMMIT, SQL_AUTOCOMMIT_ON, 0); // 5. 连接数据源,这里的“userName”与“password”分别表示连接数据库的用户名和用户密码,请根据实际情况修改。 // 如果odbc.ini文件中已经配置了用户名密码,那么这里可以留空("");但是不建议这么做,因为一旦odbc.ini权限管理不善,将导致数据库用户密码泄露。 V_OD_erg = SQLConnect(V_OD_hdbc, (SQLCHAR*) "MOGODBC", SQL_NTS, (SQLCHAR*) "frank", SQL_NTS, (SQLCHAR*) "frank@123", SQL_NTS); if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) { printf("Error SQLConnect %dn",V_OD_erg); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); } printf("Connected !n"); // 6. 设置语句属性 SQLSetStmtAttr(V_OD_hstmt,SQL_ATTR_QUERY_TIMEOUT,(SQLPOINTER *)3,0); // 7. 申请语句句柄 SQLAllocHandle(SQL_HANDLE_STMT, V_OD_hdbc, &V_OD_hstmt); // 8. 直接执行SQL语句。 SQLExecDirect(V_OD_hstmt,"drop table IF EXISTS customer_t1",SQL_NTS); SQLExecDirect(V_OD_hstmt,"CREATE TABLE customer_t1(c_customer_sk INTEGER, c_customer_name VARCHAR(32));",SQL_NTS); SQLExecDirect(V_OD_hstmt,"insert into customer_t1 values(25,li)",SQL_NTS); // 9. 准备执行 SQLPrepare(V_OD_hstmt,"insert into customer_t1 values(?)",SQL_NTS); // 10. 绑定参数 SQLBindParameter(V_OD_hstmt,1,SQL_PARAM_INPUT,SQL_C_SLONG,SQL_INTEGER,0,0, &value,0,NULL); // 11. 执行准备好的语句 SQLExecute(V_OD_hstmt); SQLExecDirect(V_OD_hstmt,"select id from testtable",SQL_NTS); // 12. 获取结果集某一列的属性 SQLColAttribute(V_OD_hstmt,1,SQL_DESC_TYPE,typename,100,NULL,NULL); printf("SQLColAtrribute %sn",typename); // 13. 绑定结果集 SQLBindCol(V_OD_hstmt,1,SQL_C_SLONG, (SQLPOINTER)&V_OD_buffer,150, (SQLLEN *)&V_OD_err); // 14. 通过SQLFetch取结果集中数据 V_OD_erg=SQLFetch(V_OD_hstmt); // 15. 通过SQLGetData获取并返回数据。 while(V_OD_erg != SQL_NO_DATA) { SQLGetData(V_OD_hstmt,1,SQL_C_SLONG,(SQLPOINTER)&V_OD_id,0,NULL); printf("SQLGetData ----ID = %dn",V_OD_id); V_OD_erg=SQLFetch(V_OD_hstmt); }; printf("Done !n"); // 16. 断开数据源连接并释放句柄资源 SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt); SQLDisconnect(V_OD_hdbc); SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); return(0); }

验证

frank@DESKTOP-6NF3B9K:~/test/odbc$ gcc main.c -lodbc -o main -wfrank@DESKTOP-6NF3B9K:~/test/odbc$ ./mainConnected !SQLColAtrributeDone !

秘籍

看了网上的一些文档综合比下来ODBC这块还是参考MogDB官方文档 (客观的讲,MogDB的文档在对比其竞品确实做的很好)

江湖

离别意味着再次相聚,随着国产数据库迁移的步伐加快,在选型或者过度阶段可能会同时适配多种不同的数据库,诸如:mysql体系、postgres体系或者完全自研的国产数据库,如果适配每一种数据库都使用期原生的C/C 驱动,那么无形中会增加很大的工作量,既是有系统有很好的架构设计(有SQL适配层或者使用ORM)也避免不了要做全面的测试。但据我目前的实践经验看,几乎所有的国产关系型数据库都提供了ODBC(就像JDBC一样)标准的接口,这样只要适配了ODBC接口就可以一劳永逸。

箱子——libpq

《英雄无泪》塑造出一个极为经典的兵器-箱子,这口箱子复杂玄妙,可任意变换成各种兵器,是武器的集大成者。箱子寓意武者的“道”。

任何武器都是身外之物,只有libpq是和内核代码放在一起,所以说它并非武器,而是“道”是PostgreSQL的“道”也是openGauss/MogDB的“道”。

功法

安装

获取安装介质

范例

/* * testlibpq.c */#include <stdio.h>#include <stdlib.h>#include <libpq-fe.h>static voidexit_nicely(PGconn *conn){ PQfinish(conn); exit(1);}intmain(int argc, char **argv){ const char *conninfo; PGconn *conn; PGresult *res; int nFields; int i,j; /* * 用户在命令行上提供了conninfo字符串的值时使用该值 * 否则环境变量或者所有其它连接参数 * 都使用缺省值。 */ if (argc > 1) conninfo = argv[1]; else conninfo = "dbname=postgres port=42121 host='10.44.133.171' application_name=test connect_timeout=5 sslmode=allow user='test' password='test_1234'"; /* 连接数据库 */ conn = PQconnectdb(conninfo); /* 检查后端连接成功建立 */ if (PQstatus(conn) != CONNECTION_OK) { fprintf(stderr, "Connection to database failed: %s", PQerrorMessage(conn)); exit_nicely(conn); } /* * 测试实例涉及游标的使用时候必须使用事务块 *把全部放在一个 "select * from pg_database" * PQexec() 里,过于简单,不推荐使用 */ /* 开始一个事务块 */ res = PQexec(conn, "BEGIN"); if (PQresultStatus(res) != PGRES_COMMAND_OK) { fprintf(stderr, "BEGIN command failed: %s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); } /* * 在结果不需要的时候PQclear PGresult,以避免内存泄漏 */ PQclear(res); /* * 从系统表 pg_database(数据库的系统目录)里抓取数据 */ res = PQexec(conn, "DECLARE myportal CURSOR FOR select * from pg_database"); if (PQresultStatus(res) != PGRES_COMMAND_OK) { fprintf(stderr, "DECLARE CURSOR failed: %s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); } PQclear(res); res = PQexec(conn, "FETCH ALL in myportal"); if (PQresultStatus(res) != PGRES_TUPLES_OK) { fprintf(stderr, "FETCH ALL failed: %s", PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); } /* 打印属性名称 */ nFields = PQnfields(res); for (i = 0; i < nFields; i ) printf("%-15s", PQfname(res, i)); printf("nn"); /* 打印行 */ for (i = 0; i < PQntuples(res); i ) { for (j = 0; j < nFields; j ) printf("%-15s", PQgetvalue(res, i, j)); printf("n"); } PQclear(res); /* 关闭入口 ... 不用检查错误 ... */ res = PQexec(conn, "CLOSE myportal"); PQclear(res); /* 结束事务 */ res = PQexec(conn, "END"); PQclear(res); /* 关闭数据库连接并清理 */ PQfinish(conn); return 0;}

验证

export LD_LIBRARY_PATH=/home/frank/test/libpq/lib/:$LD_LIBRARY_PATHgcc testlibpq.c -I include -L lib -lpq -o testlibpq

秘籍

PostgreSQL官方文档

MogDB官方文档

江湖

没有武器就是有武器,有武器就是没有武器。一口箱子可以任意变换成各种兵器,libpqxx、ODBC、node posstgres、psycopg等等都可以找到他的影子。libpq是PostgreSQL系数据库最强的武器,也是他们的道。

幻化ODBC

幻化libpqxx

幻化node-postgres

番外篇

洋枪——OCI/OCCI

与上面的冷兵器不同,洋枪的出现改变了人类了的战争史。而“洋枪”这个词,在国人的心中有着意味深长的寓意,可能是“落后”、“屈辱”亦或是“卧薪尝胆的意志”。

这东西用着很顺手,或许是用惯了。当然如果找一件趁手的兵器替代它也并非难事,但是需要付出一定的学习成本和时间。那么不妨在过度期间我们可以先模仿它的用法,哪怕扣响扳机后打出来的不是子弹,而是“袖箭”。

很多大侠已经开始这么干了,相信MogDB也已经在路上。

尾声

MogDB可用的武器远不止七种,这里只是列出来企业级应用最常用的几种。就像开头说的,各位大侠们并不是那么地重视驱动,而丰富的数据库驱动接口是满足企业复杂的应该系统的必要条件。对于MogDB来说继承了祖上(PostgreSQL、openGauss)丰富的驱动接口,这是MogDB是优势。可能现在缺的就是一把“洋枪”。

这里还要特别提一下处理武器之外MogDB的一些拳脚功夫,像server端的过程语言:PL/pgSQl、PL/Tcl、PL/Perl、PL/Python、PL/Java;可以扩展内部函数的:C FUNCTION、Embedded SQL in C;可以热插拔的插件:contrib下面C开发的插件、使用rust pgx开发的rust语言插件等等,就扩展性来说,我认为PostgreSQL/openGauss/MogDB是最强大的,没有之一,这也是MogDB吸引我的最重要原因。由于篇幅有限,后续有机会再和大家一起讨论MogDB的拳脚功夫

相关文章

最新游戏

网友评论