当前位置:首页 » 编程语言 » 一次无奈的用sql聊天
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

一次无奈的用sql聊天

发布时间: 2022-05-10 07:30:42

⑴ 开网吧的条件

中国网盟第五版-2007网吧7月30日更改版-超越卓越!

中国网吧行业起步原动力最具体的分析最全面性的回答:

网吧证件:

2007年3月7日,中国文化部、工商总局、公安部、信息产业部等14部门联合印发《关于进一步加强网吧及网络游戏管理工作的通知》。根据通知要求,2007年全国网吧总量不再增加,各地均不得审批新的网吧。虽如此,但社会的发展、经济的利益和人民的呼声效率下能否决定最后的选择而再次开放,我们将拭目以待。

建议:购置别人不做的网吧证件。
加盟全国以网吧为特色的连锁店。
钱与权可以解决一切问题包括证件。
到外地投资将可以以外商的身份开办。

评点:
(按现在的市场来进行分析,在今年首选和推举用第一种购置别人不做的网吧证件,虽然可能在价格上面有些许的高出许多或有很多不合人情理的地方,主要是价格方面的出入,但对于未来的益利和想从事网吧行业的朋友们来说这是今年一个非常明智的选择。)

解说:
(加盟全国以网吧为特色的连锁店。很多朋友和我聊天的时候总会提到这个问题,不管是从业于网吧行业或是新的入手很多人对于这方面的情况都不十分了解,现在我在这里为大家解说一下这方面局体的情况。首先,按中国现行的网吧行业来说加盟是属于一种跟国营或私营企业合作的一种策略营销方式,简单来说,在中国分为二种连锁网盟,第一由国家支持或当政府协助开办的如:如上海的东方网点。第二由个人或集团企业加上当地政府的协助如:四川的殷商时代。)

总结:
(网盟的形式基本就属于上述的两种情况,而网盟对于大家的好处将会在下面的篇幅中提起,之所以有网盟的形式,首先体现的第一点是垄断的营销益利形式,第二点体现当地人文情怀,第三点整顿网吧行业形成一种规范合理的格局以企业形式方面发展。当然不管个人或是企业最终的目地都是益利。加盟网盟最大的好处而更重要一点便是要你开网吧的时候像个人一样有尊严和人交流,不需要像条狗一样被人呼来唤去。这也是网盟最为无奈的一点。很多朋友在选择开网吧的时候,总是前提想到加盟网盟便可以不用购买证件,直接挂牌,首先这是违法的,简单来说,法律可分违法和犯法和两种情况,那么我们要如何先区分这两种情况下的利害关系呢?打个比方:开车闯红灯属于违法抓住一般情况下以罚款形式结束,但开车闯红灯并撞伤人那就叫做犯法。如果朋友们在选择开网吧的时候要选择后者,那么是不建议的,而且大多数开网吧的朋友资产不会很多,更重要的是为了有一份安定的工作,自已的事业,合理的规划自已的人生或是生活,也可以通过这个行业赚取一部份资产用于以后各方面的发展。我相信能够找到我的朋友很多人都抱有这种想法。因为大家都是想希望生活过得更好,我也同样。亲爱的朋友,当你看完这一篇随着岁月不断更改总结了无数杰出同行们的经验并用我的认真写下来的文章时,希望能够给你的人生带来帮助,如果看完后还有什么不明白不了解的可以随时与我保持联系。下面有联系方式,快乐同在!)

地理位置:

孙子兵法有云:天时、地利、人和。换句话说好的地段将是决定其生存和发展的重要关键所在。而每一个地方的地理位置和人气度都不一样,首先第一点我们要做的是需要保持冷静,然后再认真的分析周边的市场、人流、学校、工业区、闹市区等。加之再拟定多种方案的比较,同时要考虑可行性。例如:投资者看好了一处有利位置,而现在占有这个位置的店主却不肯出让,或者房租超出了自己的承受能力。这样,即使是好位置,也不可草率行事。这个世界没有人能肯定的告诉你,这是一块旺角。首先它不地产石油,那么最后的取舍在于你本身的思想,眼光与及学识。

电脑配置:

网吧的第二关键生存工具便是机器的配置!相信现在的今天,明天或是更远的将来。硬件战将在网吧领域中占据着举足轻重的地位!

建议:内存:1G*2
主板:945板为佳
硬盘:SATA 160G
显示器:19寸液晶
显卡:256显存 7600
处理器:P4 64位 3.0/双核奔腾/双核AMD

每个时期的主流配置都不一样建议请教这方面经验到位的专家,不过特别提议主板和CPU请务因便宜而选购,诸知天下没有免费的午餐就算是品牌货也要小心,现在市面的水货和拆口货相当严重。建议到大城市的科技广场等地方选购,那里有专门的防假和工商部为你在产品上提供真实的进货来源,如资金许可,也可以直接向生产厂家进购。当然主要也是要你自已对电脑有所了解,而且我们在选购硬件时,也需做到货比三家,做到知已知彼而百战不殆,请记住这是自已的血汗钱,每一分都来之不易!

网吧开销:

光纤费、电话费、工商、地税、水费、电费、卫生费、清洁员/收银员/网管/技术员工资(按本身当地的实际情况进行分析),如不是自家门面还需交纳屋售费用。

网吧监控:

中国许多省份和地区都已强制性实行公安信息厅与网吧服务器/客户机的远程数据监控,这个监控软件可附带收费刷卡客户管理功能等,大部份主要的特点是监控顾客上网浏览的IE历史记录、顾客的身份证明、网吧的上座人数等。而为了更好的巩固网吧的安全,许多省份地区也都要求网吧在室内强制性安装视频监控,对于网吧内的视频监控大家都是众说纷纭,但总体来说,这一项措施还是相当不错的,不管对于本身的经营服务,还是对于公安的刑侦办案都是可取的!

网吧布局:

网吧的布局和桌椅的选购从整体的视觉效果上直接影响到网吧的生意与人文仪态,大家都不想网吧坐下来桌子比地面还要脏,而椅子又粗又硬又冷又缺这又少那的,大家可以想象一下自已当时是一种什么样的心情,建议选购较些许深色但不失美感而又不易查觉到脏的桌子,而桌子要求有读卡器孔、开机键、重起键孔,柜箱四周遍布散热孔,不存在通风不畅问题,台脚有走线结构,如需要台面下可加走线槽,主机箱和台面有走线孔,可实现内部布线,整齐、简洁,没有拖拖拉拉的不适感。椅子建议用黑色的而质量方面建议买大众实用坚固耐用的。其它的如风扇、电管、和空调等。 天气不是很热可用风扇这样也为各位业主节剩不必要的电费。其它的如网吧的稳压器购置,只针对大型的网吧而言。网吧UPS储电器购置,这针对网吧停电时能及时到位的为客户提供结账服务,同时也为自已的管理不至混乱而提供保障。而室内的布局则根据建筑和档次的不同而不同,定位高档的网吧当需请专业的设计人员全方面的规划一下形成自有得风格。而中低档的普通网吧也可依据自身情况加之装修一下,最重要的是给人一种干净,空气流通没有压抑的感觉。多在室内放些植物或字画,不但体现业主的品位增加情调还可以给玩久电脑的顾客一种眼睛放松的感觉,更显示出网吧的贴心。而外观门面也要新颖别致,别只是挂几个大字,生怕人不认识字似的,最好加些图画做得有创意些,来些电脑迷们做梦都认识的标志(比如微软的标志)也能起到一定的吸引效果。希望广大业主把这项工作做好做到位,让大家来到网吧上网都有一种亲切,干净,归家的感觉,这不但为了别人,更为了自已!

网吧的内部管理:

从中国本身的大部份网吧而言,中小型的网吧对管理方面的需求不是那么的迫切,只要运用好相关的收费管理工具,业主们及时性的进行财务上面的查账和清理,就能维持本身的生存和发展了,在中小型网吧的管理层上运用最多的便是靠自我拍脑袋决策的方式,但事实上,面对日趋激烈的行业竞争,小型网吧在压缩成本、精简流程的问题上更应把以往的这种策略转向共同交流的理性化上决策上来,通过与员工真心诚意的交流加强内部的管理制度,并与周边的网吧合纵连横,提高网吧的竞争力,才能适应新的发展形势。而越来越多的迹象表明,网吧在招聘人员上,中小型网吧很少用正规的招聘程序,大部分员工都是通过亲戚朋友推荐,或者亲戚朋友直接担任网吧管理人员。在这种情况下,网吧业主在进行管理时就会碍于情面,缩手缩脚,难以实施严格的管理制度,从而至造成内部管理和其它各方面不公平的现象。更重要的是导致员工心理失衡、心理上的负担和对工作度的低下。中国现在的很多网吧在起步阶段都是由本身的家庭给予支持,那么在进行内部管理层上面更多偏向的是家族式的管理。而这一作法用运用在大中型网吧中是最不明智,最不可取,更是有害而无利的,除非管理者本身是专业人员,与员工达成良好的共识,一同为网吧产业共进退,心胸广阔,不计得失,认真工作,为人处事正直绝不利用职权而损人利己,得到业主的认可和员工的拥戴。试问:有多少以家族式管理的网吧“核心”能做到这样的?保守便是落后,得民心者放可得天下,任可一个企业的发展都是一样,而企业化运作也必将成为网吧行业未来提升运营水平的必由之路。

网吧的技术支持:

网吧不但需要独具一格的创意和其它方面产业的相互搭配更需要带有技术色彩的经营模式。投资网吧者不一定要精通网络技术,但必须要有基本技术常识,懂得选择那种技术模式适合自己的网吧经营特点。技术的优秀同样关系到网吧的总体经营收入,网吧运营过程能否一路畅通,这和开车的道理是一样的。做为网吧投资者身边一定需要一位技术不错又十分可靠的人全职帮你,当然,如果你本身就是专家,那就再好不过了。这也是一个至关重要的问题。网吧的初期安装可以找专业的电脑公司来做的,但必须有人能应付网络故障等突发事件,至少能给出应急的方案,所以不管投资网吧的大小都必须配备专职或兼职的网络技术员,勿因与电脑公司有协议而忽略了自身的安全和经营问题,更重要的一点,电脑公司对于网吧来说是业余的!

网吧的技术详解:

既然网吧带有技术色彩的经营模式,那么技术员的总体技术能力也将决定一个网吧内部的整体素质和面貌,不管是否用于网吧或是其它行业,我想如何第一步接触网络技术都是许许多多想进入这个行业的朋友们所希望了解的,在这里,我会较为全面性的告诉大家大至的过程和学习的方式,这也是结合自身和许多在这一领域上取得成绩的同行们一点小小经验,但在开始之前,我想对大家说几句话,IT ,有进步,无止步.虽然每一个行业都在发展但像IT业这样发展迅速的行业是令人望尘莫及的,今天的知识明天就会过时,今天一流的技术明天就会被淘汰,也许相隔的时间并不是24小时,可能是12小时,又或者不到一分钟的距离.所有从事IT业并且资深的朋友都会告诉你,累,很累,累斗累,当那一天身躯倒下时,灵魂还继续在工作.朋友,当你准备选择这一个行业,并希望坚信用网络让世界变得更为精彩时,健康会离你越来越远,生命的足迹也将渐行渐浅,阳光已不再属于你,小鸟的歌声对于你来说也不再清聆,取而代之的是日复一日的追求,突破,进取,寻找,理解,创造,这些词语将伴随你走过你的IT业生涯,如果你没有足够好的自我控制能力,如果你没有足够好的信心与毅力,如果你没有良好的生活习惯,如果你不善于与人交际,如果你不用心和认真对待,那么请你不要选择,它会让你的精神崩溃.我不希望你多年后还一无所获或一塌糊涂,你要选择你所需要的,可以改善你生活的,可以带给你自信的,可以用它来帮助别人的,可以像对待好朋友一样去对待它的,可以让自已成为一位杰出的人,那么你就必须想方设法去拥有它,因为我们的都是最棒的!

一期:学会打字,熟知,应用,安装,调试所有流行的操作系统,了解一台电脑内所有的硬件结合并学会组装,了解每一个硬件在电脑内所发挥的作用,性能,特点,规律,经常尝试修理硬件出错的机器,学会应用打印机,扫描机,传真机,投影仪,喷绘,数码相记.了解,应用,更改电脑程序(注册表,本地安全策略,DNS,超级终端,远程桌面,控制面版,IIS,组件服务,服务,控制台,运行,自动登陆,系统内核EXE,DLL,CPL,网上邻居,共享权限,设置权限,本地用户和组,设置管理器,磁盘碎片整理程序,硬盘分区, 任务管理器,桌面属性设置,电脑属性设置),了解电脑的所有进程作用,了解硬件对应的驱动,了解电脑BIOSS设置,学会批处理应用,学会GHOST,了解常用的后缀名,了解电脑属性,了解配置,了解右键应用,学会用第三方程序优化和管理电脑,了解常用的端口,认识ARP,
认识局域网,区域网,广域网,学会调试,安装,认识硬路由,交换机,排网线,学会夹网线,包括568类型,超五类型,学会游戏,聊天工具,播放器,应用软件的安装,调试,应用.学会安装单机,网络防毒软件,学会下载安装补丁,关闭不必要的服务,了解应用硬件还原保护卡,软件保护还原软件,包括单机,网络.

二期:学会修理电脑硬件,学会电工,电焊,认识电路,认识主板线路,认识主板芯片.学会:FTP,NERO,FPXAIL,虚拟机,虚拟光驱,PHOTOSHOP,WPS,FLASH,ACDSEE,3DMAX,PHOTOIMPACT,OFFICE,WORD,OUTLOOK,EXCEL,ACCESS,POWERPOINT,DREAMWEAVER.学会构建流媒体,构建论坛,构建私服,构建局域网,构建软路由,构建虚拟盘,构建游戏服务器,实现游戏对比,更新,局域网病毒防御工作,美化系统,美化界面,美化启动,美化登陆,美化游戏和聊天工具,实现所有聊天工具,应用软件,股票工具,网游,单机,竞技绿色安装.学会封装,制作属于自已的系统,学会脚本应用,学会用第三方工具网刻系统,学会探壳,脱壳,加壳软件.学会电脑超过255台的分段问题,英语四级.

三期:学会和应用C/C++,JAVA,MSsql,VISUAL,HTML/XHTML,CSS,STUDIO2005,LINUX,UNIX,PHP等开发语言和工具,学会SQL,ORACLE,SERVER等数据库开发和维护技术,了解NET程序,了解W3C标准等.了解未来更新的技术,因为这一切都可以给你带来财富,权力,欲望还有女人.

网吧的经营收入:

网吧如果在经营上取得了规范化的管理,那么收入将与地理/系统/硬件/服务/环境等紧密相结合,现在我以100台机子为例来为大家做个总结:
1.网吧经营费率:早上8-23时为1.5元/小时 晚上24时至早上7时为1元/小时 通宵6元8小时
2.网吧管理费用:技术员一名2000元/月附吃宿 管理员三名500元/月不包吃宿
3.网吧屋售费用:根据地段不同.平方不同.位置不同.我以近街口300平方门面为例.2500元/月
4.网吧光纤费用:将遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规接入光纤光纤费用以当地的政策而定。每个省区县城镇乡都不一样请咨询当地的电信/铁通/网通三项任选一样。
5.网吧硬件费用:每月的硬件损耗在一般情况下不会超过300元.除显卡/CPU风扇/电源/鼠标/键盘/耳机等 易损易坏零件外其它的硬件配置在一般情况下如非运行在五年内是很难存在坏的可能性。但是其总体在运作过程中也会逐渐的损耗,所以现在我们将根据这种情况以100台电脑每月3000元的损耗费用来规划我们实际性的纯收入。
6.网吧税务费用:工商250元/月 地税300元/月 营业税600元/月 卫生费10元/月
7.网吧用电费用:100台电脑商业用电5000元/月如果是农村商业电1.38元/度,就要增加1500元
8.网吧关系费用:15000万/年
9.按企划商业运作法计算:早8时=(天1×16时×1.5元×100台)+(晚1×8时×1元×100)-时间段落时/分/秒(盈亏平衡分析法)不排除客户下机后的时间层/离机时间层/空机时间层/维护时间层/我们将按算术平均值法做出以下结论:在离机和空隙的过程以100台机子40台不运作数量进行对比化将形成5:2那么就形成算术结果:
我们先求平均数〔(1×16×1.5×100×+1×8×1×100)〕÷5×2=1280
然后我们再求平均收入值〔(1×16×1.5×100×+1×8×1×100)〕-1280=1920
这样我们得出结果星期一至星期五的收入值为1920元而双休日的收入值将以1280÷2+1920=2560
以简单化形式算31天/月双休日均8日×2560元/天=20480而工作日均为23天/月23日×1920=44160
再以总合的形式得出一个月的总产值/收入值:20480+44160=64640
最后我们还需把通宵的8时6元制做定向分析因为不可能每天晚上都是8元/台的收入所以我们将需统一划分出比率值出来:
64640-(8时-2时)×1元×100台×(平均15天/月)÷(2空隙率)=平均每月网吧收入 60140
10.按盈亏平衡分析法计算:
网吧月底总收入60140-(工商250元+地税300+营业税600+卫生费10+自拿3000损耗费+商业用电5000+技术员工资2000+管理员工资1500+屋售2500+平均关系费15000÷12+平均光纤费750+硬件损耗费300)=42680
11.按史丰收快速计算法计算:
一年12月×42680=512160
在本次计算法上基本算出网吧实际性的收入情况,因为每一个省份地区都不可,上面只按广西省北海市合浦县当地经济为辅助,不过你可以把价位提高或是各方面再深入管理,比如说价位上提高/构建包厢/贵宾房/咖啡厅/构建灵感空间厢/晚上通宵8元8时制/游戏区域制等等大家可以

根据自已的实际情况实行。
12.网吧收入的正常化:用方正的处世哲学态度面对人生,以圆滑的交际手婉与人打交道。对下属需恩威并施,对上级精神要领会,但决不可失之尊严,自由可贵,宁无傲气,绝不可无傲骨。

网吧的工作人员守则:

因篇网络篇幅有限无法全部回答在此只列举二例!

网吧员工守则:

技术员岗位职责:

网吧技术员除上述工作完成外,还需要经常注意了解各种网络新动态,多向业主提出自已认为可行的宝贵意见,多举办各种有意义性的游戏或会员积分优惠活动,业主可每两星期举办一次员工讨论会让大家一起检讨并分析工作中的种种情况和建议。而员工们的建议有时候可以给网吧带来不可估计的效益。

网吧业主岗位职责:

网吧在规模和经济许可的情况下,可以对全体员工们进行不定期的资历培训,加深他们的总体学识与社会适应能力,培养企业性的文化,学无止境不管在那里知识的力量很重要。而网吧本身不能只一味的想着如何去赚钱,而忽略了那些日夜奋战在第一线为你的经营能够得到提升而披星戴月忘我的技术员,与及全体为网吧辛勤努力的工作人员,如果没有他们的认真和用心,网吧就不能够正常的营业,所以我们要感谢他们,尊重别人就相当于尊重自已,今天他们虽然在我们这里学不到多少,但请你诚恳的告诉他们:工作,其实是一份很美好的人生体验。人与人之间相处最重要的是以诚相待,只有大家共同维护,互相帮助、体谅才能把工作做好,不管是业主还是职员需要的都是健康与诚信,不管什么事情开始总有艰难与困阻,请给自已一个机会,也给别人一个机会。每天都是一个奇迹,只要肯努力,梦想就能成功。

网吧的预计投资成本:

1.网吧机子的购置如果每台5000元就要看你需购置多少台计算。
2.网吧的桌椅就要以你的机子数量而定来进行计算。
3.网吧的交换器按机子的数量而定来进行计算。
4.网吧的网线/水晶头等在你总体装修的时候需要排置的所以会和装修费一起计算在内。
5.网吧的风扇/排插/空调/灯具/招牌/窗帘/挂钟/主机收银台等以网吧的形式而购置。
6.网吧的光纤/地税/工商税/屋售等。
7.网吧证件的购买/网吧证件的办理/二项中选择一样。
8.网吧服务员/技术员/工资等。
9.公安局/消防局/文化局/税务局的关系费等。
10.网吧其它的一些零件的购置这个电脑公司或是你的技术人员会和你说明的,再余下的就准备等着开业吧。

证件办理的次序和关键过程:

1.网吧证.先去文化局办理(网吧特许经营证),办理中要经过填表/签合同/检查/交纳一些相关的管理费/办理网吧法人代表/身份证附印件/网吧技术安全员证书/身份证附印件/网吧工作人员名单最少四个。如果无法办理就要通过网络或别的县或不做的网吧的购置,如转让的网吧那么网吧法人代表的业主名字与营业执照的名字将需办理成为自已的名字。需购置上网消费者管理需知,网吧管理需知,网吧管理画图,互联网条例和未成年人进入牌子。
2.消防证.要到消防局办理(消防意见同意书),办理前先送礼,办理时消防局工作人员会对你所要开的网吧进行通风道/通道口/前后门安全出入口等评测,如通过便签发消防意见书。另外还需购置消防器,自动照明应急灯。
3.安全证.要到公安局办理(网吧安全许可证),办理中问一下手机号码,办理时公安局计算机安全科的工作人员会在你办理过程中对你的网吧进行检查,如果检查合格并通过,区公安分局会向市局申报,等批示下来后。就会发放给你(网吧安全许可证)。
4.税务证.工商/地税局办理(网吧税务登记证),记得带几包烟。
5.收费证.要到物价局办理(网吧收费许可证),别忘记带烟。
6.电信局.开通光纤办理手续,并负责分配IP组装局域网,工作完后记得要一起吃顿饭。
7.国家规定网吧开业的机子数量不能少于30台,城市乡镇要求均不同。
8.国家规定而营业用房实际可用面积需在60平方米以上的,方圆200米范围内没有学校。
9.网吧开通一年后需办理网吧年检,年检的方式每个地方的政策都不相同但相关的法律法规都离不开一个字,大家明白的。
10.我们在做生意,别人也在做生意,所以送礼,请客,去KTV等是上策!

网吧联盟加盟好处:

1.第一时间内得到网盟加盟提供的各种宣传品、精美海报等。
2.免费推出主题网吧各种系列活动.如CS比赛/泡泡堂比赛等.网盟互联比赛等.促进网吧提高人气和上座率。
3.享受网吧联盟的娱乐超值点卡优惠折扣。
4.网吧网盟实践追踪报道网吧活动,凸显网吧风采。
5.网吧相互维护通过各方面的管理来促进经济的提升。
6.网盟服务论坛网将热点推荐、聚焦玩家视线。
7.网盟网站将为网吧提供风云排行榜,记录游戏家或网吧的丰功伟绩。
8.网吧如遇非技术性问题可通过网盟来进行协助并解决。
9.网盟将会举办各种节日的评估积分抽奖、奖品抽奖等,来丰富和提高吧。
10.网吧联盟每个地方的形式和活动都不一样,但不管如何网盟的形式还是不错的。

网吧最大的魅力:

网吧最大的魅力就是其温馨度,如果你的待人服务、车辆管理、网吧清洁、设备可以、灯光亮丽、环境不错、气氛合谐、安全保障、员工团结。那么你将会是一位成功者。不管以后你选择从事任何的职业都会有光辉的星光照耀在你的身旁。

网吧业主从业提醒:

每个做生意的人都非常清楚,开门做生意就不希望看到有人来搞事,而网吧也是属于一种娱乐性的场所,既然开门做生意就想着希望相安无事如何的营业赚钱。 那么这要怎么做呢,其实也很简单,虽然来网吧上网的人什么样的人都有。但只要大家懂得随机应变,什么样的人就给什么样的菜,而这个过程的总结还有很多的客观因素在里面,需要怎么做这个我想大家也都能够理解的,无非就是退一步海阔天空嘛, 大至的原因就是上网费用的问题这个大家就将就着看着办。千万不要因为几元钱的网费而因小失大。而网吧的打架斗殴的事情也会时有发生,这个要怎么处理好,我相信大家都会有根据自身的情况构思一套适合自已的方案!

中国网吧产业的行情:

自2005年未,全国平均每天网吧人流量超过4000万人次, 目前网吧所拥有的各类计算机设备共计828.4万台。网吧行业就业人员容纳了近200万名,年产值达到256.8亿元。按照国家统计局1:7计算对周边行业贡献的方法,网吧行业每年为相关产业带来的间接经济收入达1282亿元。而且网吧还带动了电信、电脑设备、软件系统、餐饮、游戏、电子竞技等一系列产业的发展。中国最大的网络游戏厂商盛大网络在美国纳斯达克的上市,这个功劳有一半以上也要归功于网吧所带来的网游玩家。

中国网吧产业的沉重:

中国从最初的五星宾馆网络咖啡屋到北大边上的飞宇网吧一条街,从蓝极速的一把火到十大网吧的连锁事业,网吧从来不缺少媒体和公众的关注。但是,从来没有哪个声音真正为网吧正名,我们能看到的,不过是一次又一次的争论。 中国网吧行业的未来不管是在争论中消亡或在歧视中前行,我们本身都应具备坚韧不拔的信念与意志力,志当存高远,每一个新兴行业的发展都需经受一番大起大落,人生亦如此,和巴黎的埃菲尔铁塔、纽约的自由女神像一样,网吧在中国被接受也需要经过一个过程。 但请相信我们将是光荣自豪的先驱者与卓越执手!

中国网吧产业的飞翔:

洒上廉洁的阳光才能茁壮成长!

永不停止,相信自已!

客服咨询QQ:14214755 注明:加入时请说明来意!

客服咨询QQ群:
(请入群的朋友们自动更改前面加上地区,否则将于48小时T出群组,人员繁多,加之工作忙碌不能一一回复的朋友请随时与我QQ保持联系。)

中国网络东方网盟:( 15324726)(上海/福建/台湾/浙江/湖北/安微/江苏/江西/山东)
中国网络西方网盟:( 6133837 )(西藏/青海/新疆/甘肃/宁夏/陕西/内蒙古/四川/重庆)
中国网络南方网盟:( 8441680 )(广西/海南/贵州/云南/广东/澳门/香港/湖南)
中国网络北方网盟:( 8439525 )(北京/山西/河北/天津/辽宁/吉林/黑龙江)

⑵ SQL2005, 在连接数据库引擎时,用windows身份验证时可以正常连接上,但是用Sql身份验证就连接不上。

SQL Server 2005 之 Windows身份认证 无法登陆“网络追踪” 收藏
今天有个网友安装完SQL Server2005后,登陆是遇到了一个我问题:

Windows身份认证方式无法登陆,SQl Server 身份认证方方式可以登陆

我用sql server 的时间并不长,对于这个我问题我也没遇到过。起初跟他说很多我知道的方法去尝试,比如 ,安装后要是把机器名修改了,就会导致登陆界面上的“服务器名”失效,从而无法登陆;还有什么混合登陆模式,是否开启 sql server agent,然后仔细看了一下他发过来的截图

发现 “服务器名称 ”只有一个机器名,我记得我安装的时候应该是: 机器名\SQLServer2005(后面这个好像安装的时候可以自己设置的) ,然后我就以为他缺少后面那个东西,然后他说安装完成后就是那样,什么都没改。死马当活马医吧,我让他在后面添上了

\SQL Server2005、\SQL Server、\MSSQLSERVER ,结果还是不行。接着,就让他去查看“安全性”,发现以windows身份验证创建登陆名的时候会报错 ,而sql serser身份验证创建登陆名不会报错。

遇到没见过的错误当然是上网去搜索一下再说啊,查来查去,根据网上说的,我怀疑是和 本地系统帐户,域用户帐户有关,网上的资料如下:(有点多,呵呵)

1、装SQL Server2000,服务设置里的,使用本地系统帐户和使用域用户帐户 有何区别?

SQLServer2000 使用本地系统帐户和使用域用户帐户两者区别

在安装SQLSERVER2000时,会有这样的一个选择画面,这是设置启动sqlserver服务的登录身份。SQLSERVER2000装好后,会产 生一个MSSQLSERVER服务,在这里设置的就是启动它这个服务的登录身份。

那么我们究竟要选择哪一个呢?两者各代表什么意思呢?下文我们就来研究一下。

我们先看熟悉一下两个相关概念。

什么是凭据?
Windows凭据(Credential)其实就是指用户帐户和口令,我们调用一些API,如 WTSOpenServer,QueryServiceStatus,NetUserEnum等等涉及到RPC的,只要当前用户存储有目标远程机的权限合 适的凭据,则这些API就不会因产生ERROR_ACCESS_DENIED而执行失败。
不好理解么?那么我们来看一下访问别的计算机的情形,加深理解。访问远程计算机必然用到rpc。

上图就是我们连接到IP为172.16.100.1计算时的情形,这个时候是需要我们输入用户帐户与密码的。这里的用户帐户与密码就是所谓的凭据。

当我们输入用户帐户与密码后,并把“记住我的密码”打上勾,点确定。那么我们的凭据(即这个用户帐户与密码)被存储了,以后再访问的时候就无须再输入。

安 全上下文
安全上下文(Security context)是指在一个系统中有效的安全属性或规则。

下面我们来看SQLSERVER2000服务的两种登录方式:本地系统帐户和域用户帐户

本 地系统帐户:

该帐户是对本地计算机具有管理员权限的预定义本地帐户。在本地系统帐户的安全上下文中运行的服务向远程服务器提供本地计算机的凭据。在本地系统帐户的安全 上下文中运行的服务不能建立身份验证会话,因为本地系统帐户不属于域中的 Everyone 组。因此,使用该帐户的服务只能通过空会话(没有凭据)来访问网络资源。(这个访问指的是为了完成某项任务服务的自动访问,和我们的连接SQL服务器不一 概念)

域 用户帐户:

使用专用域用户帐户作为登录帐户

域用户帐户是指在 Active Directory 目录服务中创建的用户帐户。该帐户是域中 Authenticated Users 组的成员。在域用户帐户的安全上下文中运行的服务向远程服务器提供域用户帐户的 Kerberos 票证。在域用户帐户的安全上下文中运行的服务可以访问经过身份验证的用户或特定用户帐户有权访问的远程服务器上的资源。

使用本地用户帐户作为登录帐户

本地用户帐户是指在本地计算机上创建的Windows用户帐户。在本地用户帐户的安全上下文中运行的服务向远程服务器提供本地用户帐户的访问标记。如果在 远程服务器上配置了匹配用户名和密码,则使用本地用户帐户的服务将能够访问同名帐户有权访问的远程服务器上的资源。虽然此方案行之有效,但是维护这些单独 的帐户并保持帐户密码同步将增加管理开销。
如果你没有加入域,但又需要连接到网络资源,那么可以使用本地用户帐户作为登录帐户。
由此可见使用域用户帐户可以使用凭据来访问远程计算机,并使用相应的资源。

例如SQLSERVER服务,当它进行以下操作时,是需要访问远程计算机的。
• 远程过程调用。
• 复制。
• 备份到网络驱动器。
• 涉及远程数据源的异类联接。
• SQL Server 代理邮件功能和 SQL 邮件。

在这几种情况下是无法不使用凭证去访问远程计算机,并使用其资源的。所以必须得把登录类型改为“域用户帐户”,并输入在远程计算机上配置好的,存在的“用 户名”和“密码”。

如果只是装在本机进行开发或学习,完全没必要使用域用户帐户登录模式,因为有时候因为切换不同用户而导致服务不能启动。

修 改SQLSERVER服务的登录类型

服务的登录类型是随时可以改变的。可以需要的时候通过以下两种方法修改SQLSERVER服务的登录类型。

1. 通过企业管理器修改

右击SQLSERVER服务器---“属性”---“安全性”下的“启动服务帐户”

2.通过服务修改

“控制面板”---“服务”----“MSSQLSERVER”,右击---“属性”---“登录”

装 SQLSERVER时遇到的一些问题
1.在安装时出现提示"command line option syntax error!type command /? for help"
这是因为你可能把SQLSERVER的安装文件放在了中文目录下,可以你它改为英文目录即可。每一级目录都不能含有中文。
2.出现提示"以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重启计算机"
打开注册表编辑器(或在命令行输入:regedit),在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet \Control\Session Manager中找到PendingFileRenameOperations项目,并删除它。然后进行安装。

2、安装SQL时,使用域用户账户中的域填写什么(填写其他无法继续下一步)急急急!!!!

此时出现"服务账户"对话框,在该对话框中共有4个选项,我们建议用户选择"对每个服务使用同一账户。自动启动SQL Server 服务"和"使用本地系统账户"这两个选项,选好以后点击下一步,继续安装;
进入"身份验证模式"窗口,此时请选择第二项"混合模式"只有选择混合模式后SQL Server 数据库的超级用户才是"sa";在此窗口可输入超级用户的密码,也可选择空密码(建议:不要使用空密码)。选择下一步后继续安装;
这时安装程序将从光盘向您的机器安装SQL 2000的部件,这需要一段时间。当安装完成后,出现"安装完成"对话框。单击"完成"按钮,完成SQL 2000的安装。

3、SQL2000 1069错误(由于登录失 败而无法启动服务)解决办法?

原因很简单,安装SQL Server时是使用默认登录用户来作为启动SQL Server服务的账号(对于自己使用的单机,通常就是administrator了),当该用户更改了用户名(如有人喜欢把administrator 改成admin)或更改了其口令时,再次启动服务器,就出现"同于登录失败而无法启动服务"的错误了
知道了原因,解决方法也就很显然了
1、把用户口令改回原来的,再启动服务
2、使用控制面版服务管理器,找到 MSSQLSERVER服务,更改启动账号信息,改成变更后的,再启动服务
3、也是推荐使用的方法,创建一个新用户,专门用于启动SQL Server服务,安装SQL Server时就使用该用户来启动SQL Server,这样就可以避免用于频繁更改administrator口令而带来的1069错误了。如果已经安装好SQL Server,也可以在控制面版服务管理器下更改MSSQLSERVER服务的服务账号信息,换成SQL服务专用的用户。
首先介绍网络上常用的两种解决方法:

1.我的电脑--控制面板--管理工具--服务--右键 MSSQLSERVER--属性--登陆--登陆身份--选择"本地系统帐户"
或:
2.我的电脑--控制面板--管理工具--服务--右键 MSSQLSERVER--属性--登陆--登陆身份--选择"此帐户"--密码和确认密码中输入你修改后的administrator密码.

两者的区别:
选择第一种方式,以后修改了administrator密码,不用再调整(但要求登陆操作系统的是系统管理员)
选择第二种方式,以后修改了administrator密码,还要再重复做上面的操作.
下面是我遇到的一种情况:
今天上午同事又告诉我他的SQL不能登陆自己的"企业管理器"了,报出的错误就是"1069 错误,由于登录失败而无法启动服务",上网查到了以上两种方案,但是当我看到了服务的窗口又发现了一个可能引起此问题的地方,我们先找到 MSSQLSERVER服务,然后查看它的属性,发现是使用域帐户在启动服务时进行验证,于是便询问是否修改过登陆域的密码,得到答案是修改过,因为域中作了设置,一定时期后要求用户修改密码,而且不能与以前密码相同(空密码除外,这个我做过实验^_^)。于是将这里的密码重新进行设置,再重新启动服务成功,SQL也可登陆成功。

4、[SQL Server 2000]发生错误1069:由于登录失败而无法启动服务 (这个和上面的差不多)

如何修改 SQL Server 2000身份验证模式和系统 管理 员Sa的登录密码

1、如何修改SQL Server 2000身份验证模式?
分析:由于千方百剂软件,在 数据库 安全方面采用了最安全的方式“混合模式”,它主要应用于网络主要是Novell网络或者对等网,使用SPX/IP协议和SQL Server验证模式。

优点如下:
创建了Windows NT/2000之上的另外一个安全层次。
支持更大范围的用户,例如非Windows NT客户、Novell网络等。
一个应用程序可以使用单个的SQL Server登录和口令。

下面以操作系统Windows 2000上的SQL Server 2000为例,对误将身份验证模式选择为“windows身份验证模式”的数据库进行修改,操作步骤为:
1. 打开企业管理器,依次展开服务器组,用右键单击软件使用的服务器。
2. 在弹出的快捷菜单,执行“属性”命令,出现“SQL Server属性”对话框。如图3所示。单击“安全性”标签,在“安全性”选项框中,将“仅Windows”改为“SQL Server和Windows”身份验证。
3. 设置完成后,单击“确定”按钮,系统提示重新启动服务器。
4. 单击“是”按钮,完成对身份验证模式的修改。
说明:在 Windows XP操作系统与Windows 2000操作系统下修改SQL Server 2000身份验证模式相同,但在Windows 98操作系统下,却不能通过以上方法对身份验证模式进行修改。因为在Windows 98操作系统下,安装SQL Server 2000时,系统只支持“混合模式”身份验证模式。

2、如何修改SQL Server 2000系统管理员Sa的登录密码?

分析:SQL Server 2000系统管理员Sa的登录密码,一般在安装SQL Server 2000时就已经设置。在数据库管理系统中,用检查口令等手段来检查用户身份,合法的用户才能进入数据库系统。千方百剂系列需要通过验证Sa登录密码才能 创建、删除账套,这样Sa的登录密码在此就显得尤为重要。

操作步骤如下:
1. 打开企业管理器,依次展开服务器组,然后展开服务器。
2. 打开“安全性”文件夹,单击“登录”,然后用右键单击“Sa”,执行“属性”命令。
3. 弹出“SQL Server登录属性”对话框,如图4所示。在“SQL Server身份验证”密码栏,输入最新密码。
4. 单击“确定”按钮,弹出“确认密码”对话框,再输一遍登录密码。
5. 单击“确定”按钮,完成对Sa登录密码的修改。

3、发生错误1069:由于登录失败而无法启动服务

错误1069是一个Windows NT/2000的系统错误。错误1069表明服务不能被启动(当启动服务时返回“登录失败”错误)。例如,当启动MSSQLServer服务时,得到如下 错误提示:

发生错误1069:由于登录失败而无法启动服务
此时正在MSSQLServer服务上执行该服务操作

如果服务被一个没有“登录服务”权限的帐户所启动时会发生1069错误。解决该问题的方法是给予该帐户以“登录服 务”权限。
具体到MSSQLServer的问题,如果在安装在Windows XP上安装SQL Server 2000开发版,并选择了默认设置(仅Windows的身份验证方式,默认实例,用Windows的Administrator用户进行的安装等),一般 会发生上述问题。解决的方法会有很多种,但最简单的方法是:
依次打开Windows控制面版->管理工具->服务->MSSQLSERVER->属性->登录,将登录身份改为本地系 统帐户

通过以上资料,初步认为是因为设置了 “使用域用户帐户 ”,于是就去查看了 控制面板--管理工具--服务--右键 MSSQLSERVER--属性--登陆--登陆身份--选择"本地系统帐户" ,哎!发现他的电脑本来就是选择的“ 本地系统帐户 ”

这下我是真的无语了。。。。无奈啊!

他说是不是因为win7系统的缘故,也许安装的时候和 xp 不一样,我也这么想过,但是我觉得应该没多大差别才对。没办法,继续上网查!

5、win7安装sql server 2005的方法详解:

本文将为大家介绍Windows 7下如何安装SQL Server 2005,相信通过本文,能让大家了解安装的过程。

一、配置IIS

到控制面板,打开IIS Features,点左边的加号,打开详细信息,我们勾上以下组件:

1: Web Managerment Tools\IIS 6 Management Compatibility\IIS6 WMI Compatibility

2: Web Managerment Tools\IIS 6 Management Compatibility\IIS6 Metabase and IIS 6 Configuration Compatibility

3: World Wide Web Services\Application Development Features\Asp.net

4: World Wide Web Services\Common Http Features\Http Redirection

5: World Wide Web Services\Security\Windows Authentication

二、安装标准版SQL Server 2005

按照提示安装即可。

三、安装SQL Server 2005 SP3

最后一步设置系统帐号权限,需要先到任务管理器中关闭 sqlserver 进程,然后到打开dos窗口之前的一步,又需要手动启动 sqlserver服务。

四、启用 SQL Server Browser 服务

单击“开始”,依次指向“程序”、“Microsoft SQL Server 2005”和“配置工具”,然后单击“SQL Server 外围应用配置器”。

在“SQL Server 2005 外围应用配置器”页上,单击“服务和连接的外围应用配置器”。

在“服务和连接的外围应用配置器”页上,单击“SQL Server Browser”,在“启动类型”中单击“自动”选项,然后单击“应用”。

打开 Windows 防火墙,请单击“开始”,再单击“运行”,键入 firewall.cpl,然后单击“确定”。

五、在 Windows 防火墙中为 SQL Server 2005 创建例外

若要在 Windows 防火墙中为 SQL Server 2005 创建例外,请执行以下步骤:

六、在 Windows 防火墙中为 SQL Server Browser 服务创建例外

若要在 Windows 防火墙中为 SQL Server Browser 服务创建例外,请执行以下步骤:

1.在 Windows 防火墙中,单击“例外”选项卡,然后单击“添加程序”。

2.在“添加程序”窗口中,单击“浏览”。

3.单击 C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe 可执行程序,单击“打开”,然后单击“确定”。

七、配置SQLServer2005 远程连接

第一步 :SQL Server Configuration Manager -> SQL Server 2005 Services 将 SQL Server Browser 设置为 running,

如果没有Enable的话,右键Properties -> Service -> StartMode = Auotomatic

注意,同时必须打开SQL Server Browser 服务第二步: SQL Server 2005 Network Configuration -> Protocols for SQLXPRESS 下同时使用TCP/IP和named pipes第三步:SQL Native Client Configuration 下同时使用TCP/IP和named pipes



2、登陆改为混合模式:

打开manage管理器->以windows方式连接并进入数据库->右键点击你的数据服务器->属性 ->security>选中Sql server and windows Authentication3、新建SQL server方式的用户名和密码:

manage管理器 -> security -> 右键点击logins->new login...-> 选中sql server authentication ->设置login name 和password(confirm password)以及 默认的数据库

最好去掉“enforce password expiration”前的小钩,否则每次登陆都要修改密码。

注意 : 一定要在User Mapping 页面中选择该用户对应的数据库(即使前面已经选择了默认数据库),否则还是会登录不上

如果需要修改数据库,必须分配 db_Owner 角色


4、重新启动服务器

虽然网上好多文章都说只需要重新启动SQL服务就可以,但是经过验证,必须重新启动机器才行

In order to get things to work. You might need to completely reboot the server machine after making the changes. There have been reports (thanks P.C.) that starting and stopping the SQL Server and Browser software is not enough.

5、使用SQL Server Configuration Manager 测试

注意 : Server Name 一定要 Serever\SQLEXPRESS同时还要在 Options -> Network protocol 中选择TCP/IP才能顺利登录在 Windows 防火墙中,单击“例外”选项卡,然后单击“添加程序”。

在“添加程序”窗口中,单击“浏览”。

单击 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlservr.exe 可执行程序,单击“打开”,然后单击“确定”。

注意:上述路径可能会根据 SQL Server 2005 的安装位置而不同。MSSQL.1 这个占位符代表的是您在前面过程的步骤 3 中获得的实例 ID。

对于每个需要为其创建例外的 SQL Server 2005 实例,重复步骤 1 到步骤 3。

6、Windows7安装SQL Server 2005 全攻略

费了整整两个晚上加一天时间,把SQL Server 2005 不知安装、卸载过多少次,今天终于完美安装上去了,记录一下安装过程,以备以后查看,首先说一下本机配置。

本人操作系统是Windows7简体中文旗舰版,安装的是SQL.Server.2005.开发人员版、企业版、标准版32、64位DVD合集,这个版的镜像文件网上很多。用虚拟光驱载入镜像,照例是检查组建支持,刚开始安装的时候,就检查iis和com+组件警告,我一开始只勾选了asp.net这个选项,结果还是警告,后来发现全选就没事了。在com+组件上浪费的时间最多,开始老是无法启动这个分布式事务支持组件,在网上了查了无数资料还是无法启动,最终发现是之前安装的操作系统的版本问题,估计是被修改过的版本,然后不想再发生麻烦,就重装了一下系统。

接下来sql顺利安装通过,中间会有多次警告"版本不受支持",不用管它,继续安装。有一点也很搞笑,估计是安装包的bug,在安装过程中虽然选择了"混合模式验证",安装完成过后用windows系统帐户却死活登不上去,sa账户可以正常登录。安装完成后需要下载SQL Server 2005 sp3的升级包,一路默认下去,有两点注意:第一个需要先把sql服务手动停掉,升级包才能安装;第二点,也是最关键的一点,当一切安装完成,出现一个 "完成后启动Windws Vista 配置工具的时候",不要动,要先启动sql服务后,再点下一步,然后一个dos窗口一闪而过,出现一个配置工具,把左侧的系统默认账户添加到右侧,下一步,现在就可以用系统帐户正常登录sql了。

之前因为安装升级包都是一路"下一步",但是因为停掉的sql服务没有启动,导致最后一步添加系统帐户失败,好像是什么"错误18456",我在这个上浪费的时间最多,后来仔细回忆一下安装步骤,猛然想到服务未启动怎么能添加进去账户呢,今天安装的时候特意把sql服务启动之后再添加果然成功了。

用系统帐户登录进去看了下,多了一个"计算机名/默认账户名"的用户,这也为我们提供了一个思路:如果安装过程中忘记启动sql服务,用sa帐户登录,然后安全性--右键登录名--新建登录帐户--搜索--高级--立即查找,在下面找到自己系统的默认登录帐户(必须是管理员组的),确定。然后选择 "Windows身份验证",服务器脚色选择public和sysadmin这两个,状态选"授权"和"启用"这两个,至此应该就可以了。之所以说应该就可以了,因为我没试过,我看到那个"计算机名/默认账户名"是这样配置的。

还有些人可能安装的过程中数据库服务安装成功了,但是企业管理器没有安装上去,没关系,到网上下载一个企业管理器,比如 SQLServer2005_SSMSEE.msi,放到人一个盘,最好是根目录,比如我的放到G:盘,直接运行这个安装程序是不行,会提示安装失败,这时新建一个文本文件,内容是msiexec /i G:\SQLServer2005_SSMSEE.msi ,注意路径和你的文件名要对应一致。然后把文本文件后缀名改为cmd,右键"以管理员身份运行"这个文件,这样就安装成功了,最好先安装这个管理器,再安装sp3升级包。

⑶ 执行存储过程有多少种方法java

Java执行存储过程的方法:

简单的老的JDBC通过CallableStatement类支持存储过程的调用。该类实际上是PreparedStatement的一个子类。假设有一个poets数据库。数据库中有一个设置诗人逝世年龄的存储过程。下面是对老酒鬼Dylan Thomas(old soak Dylan Thomas,不指定是否有关典故、文化,请批评指正。译注)进行调用的详细代码:

try{
intage=39;
StringpoetName="dylanthomas";
CallableStatementproc=connection.prepareCall("{callset_death_age(?,?)}");
proc.setString(1,poetName);
proc.setInt(2,age);
cs.execute();
}catch(SQLExceptione){//....}

传给prepareCall方法的字串是存储过程调用的书写规范。它指定了存储过程的名称,?代表了需要指定的参数。
和JDBC集成是存储过程的一个很大的便利:为了从应用中调用存储过程,不需要存根(stub)类或者配置文件,除了你的DBMS的JDBC驱动程序外什么也不需要。
当这段代码执行时,数据库的存储过程就被调用。我们没有去获取结果,因为该存储过程并不返回结果。执行成功或失败将通过例外得知。失败可能意味着调用存储过程时的失败(比如提供的一个参数的类型不正确),或者一个应用程序的失败(比如抛出一个例外指示在poets数据库中并不存在“Dylan Thomas”)

结合SQL操作与存储过程

映射Java对象到SQL表中的行相当简单,但是通常需要执行几个SQL语句;可能是一个SELECT查找ID,然后一个INSERT插入指定ID的数据。在高度规格化(符合更高的范式,译注)的数据库模式中,可能需要多个表的更新,因此需要更多的语句。Java代码会很快地膨胀,每一个语句的网络开销也迅速增加。
将这些SQL语句转移到一个存储过程中将大大简化代码,仅涉及一次网络调用。所有关联的SQL操作都可以在数据库内部发生。并且,存储过程语言,例如PL/SQL,允许使用SQL语法,这比Java代码更加自然。早期的存储过程,使用Oracle的PL/SQL语言编写:

createprocereset_death_age(poetVARCHAR2,poet_ageNUMBER)
poet_idNUMBER;
beginSELECTidINTOpoet_idFROMpoetsWHEREname=poet;
INSERTINTOdeaths(mort_id,age)VALUES(poet_id,poet_age);
endset_death_age;

set_death_age几乎可以肯定是一个很烂的实现。应该在poets表中添加一列来存储逝世年龄。Java代码中并不关心数据库模式是怎么实现的,因为它仅调用存储过程。以后可以改变数据库模式以提高性能,但是不必修改代码。
下面是调用上面存储过程的Java代码:

publicstaticvoidsetDeathAge(PoetdyingBard,intage)throwsSQLException{
Connectioncon=null;
CallableStatementproc=null;
try{
con=connectionPool.getConnection();
proc=con.prepareCall("{callset_death_age(?,?)}");
proc.setString(1,dyingBard.getName());
proc.setInt(2,age);
proc.execute();
}
finally{
try{proc.close();}
catch(SQLExceptione){}
con.close();
}
}

为了确保可维护性,建议使用像这儿这样的static方法。这也使得调用存储过程的代码集中在一个简单的模版代码中。如果用到许多存储过程,就会发现仅需要拷贝、粘贴就可以创建新的方法。因为代码的模版化,甚至也可以通过脚本自动生产调用存储过程的代码。

Functions

存储过程可以有返回值,所以CallableStatement类有类似getResultSet这样的方法来获取返回值。当存储过程返回一个值时,必须使用registerOutParameter方法告诉JDBC驱动器该值的SQL类型是什么。也必须调整存储过程调用来指示该过程返回一个值。
下面接着上面的例子。这次查询Dylan Thomas逝世时的年龄。这次的存储过程使用PostgreSQL的pl/pgsql:

createfunctionsnuffed_it_when(VARCHAR)returnsinteger'declare
poet_idNUMBER;
poet_ageNUMBER;
begin
--.
SELECTidINTOpoet_idFROMpoetsWHEREname=$1;
--getandreturntheage.
SELECTageINTOpoet_ageFROMdeathsWHEREmort_id=poet_id;
returnage;
end;'language'pl/pgsql';

另外,注意pl/pgsql参数名通过Unix和DOS脚本的$n语法引用。同时,也注意嵌入的注释,这是和Java代码相比的另一个优越性。在Java中写这样的注释当然是可以的,但是看起来很凌乱,并且和SQL语句脱节,必须嵌入到Java String中。
下面是调用这个存储过程的Java代码:

connection.setAutoCommit(false);
CallableStatementproc=connection.prepareCall("{?=callsnuffed_it_when(?)}");
proc.registerOutParameter(1,Types.INTEGER);
proc.setString(2,poetName);
cs.execute();
intage=proc.getInt(2);

如果指定了错误的返回值类型会怎样?那么,当调用存储过程时将抛出一个RuntimeException,正如你在ResultSet操作中使用了一个错误的类型所碰到的一样。

复杂的返回值

如果这是存储过程的全部功能,那么存储过程就不是其它远程执行机制的替换方案了。存储过程的功能比这强大得多。
当执行一个SQL查询时,DBMS创建一个叫做cursor(游标)的数据库对象,用于在返回结果中迭代每一行。ResultSet是当前时间点的游标的一个表示。这就是为什么没有缓存或者特定数据库的支持,只能在ResultSet中向前移动。
某些DBMS允许从存储过程中返回游标的一个引用。JDBC并不支持这个功能,但是Oracle、PostgreSQL和DB2的JDBC驱动器都支持在ResultSet上打开到游标的指针(pointer)。
设想列出所有没有活到退休年龄的诗人,下面是完成这个功能的存储过程,返回一个打开的游标,同样也使用PostgreSQL的pl/pgsql语言:

createprocerelist_early_deaths()returnrefcursoras'declare
toesuprefcursor;
begin
opentoesupforSELECTpoets.name,deaths.ageFROMpoets,deaths--allentriesindeathsareforpoets.--butthetablemightbecomegeneric.
WHEREpoets.id=deaths.mort_idANDdeaths.age<60;
returntoesup;
end;'language'plpgsql';

下面是调用该存储过程的Java方法,将结果输出到PrintWriter:
PrintWriter:

staticvoidsendEarlyDeaths(PrintWriterout){
Connectioncon=null;
CallableStatementtoesUp=null;
try{
con=ConnectionPool.getConnection();
//...con.
setAutoCommit(false);//Setupthecall.
CallableStatementtoesUp=connection.prepareCall("{?=calllist_early_deaths()}");
toesUp.registerOutParameter(1,Types.OTHER);
toesUp.execute();
ResultSetrs=(ResultSet)toesUp.getObject(1);
while(rs.next()){
Stringname=rs.getString(1);
intage=rs.getInt(2);
out.println(name+"was"+age+"yearsold.");
}
rs.close();
}
catch(SQLExceptione){//Weshouldprotectthesecalls.toesUp.close();con.close();
}
}

因为JDBC并不直接支持从存储过程中返回游标,使用Types.OTHER来指示存储过程的返回类型,然后调用getObject()方法并对返回值进行强制类型转换。
这个调用存储过程的Java方法是mapping的一个好例子。Mapping是对一个集上的操作进行抽象的方法。不是在这个过程上返回一个集,可以把操作传送进去执行。本例中,操作就是把ResultSet打印到一个输出流。这是一个值得举例的很常用的例子,下面是调用同一个存储过程的另外一个方法实现:

publicclassProcessPoetDeaths{
publicabstractvoidsendDeath(Stringname,intage);
}
staticvoidmapEarlyDeaths(ProcessPoetDeathsmapper){
Connectioncon=null;
CallableStatementtoesUp=null;
try{
con=ConnectionPool.getConnection();
con.setAutoCommit(false);
CallableStatementtoesUp=connection.prepareCall("{?=calllist_early_deaths()}");
toesUp.registerOutParameter(1,Types.OTHER);
toesUp.execute();
ResultSetrs=(ResultSet)toesUp.getObject(1);
while(rs.next()){
Stringname=rs.getString(1);
intage=rs.getInt(2);
mapper.sendDeath(name,age);
}
rs.close();
}catch(SQLExceptione){//Weshouldprotectthesecalls.toesUp.close();
con.close();
}
}

这允许在ResultSet数据上执行任意的处理,而不需要改变或者复制获取ResultSet的方法:

staticvoidsendEarlyDeaths(finalPrintWriterout){
ProcessPoetDeathsmyMapper=newProcessPoetDeaths(){
publicvoidsendDeath(Stringname,intage){
out.println(name+"was"+age+"yearsold.");
}
};
mapEarlyDeaths(myMapper);
}

这个方法使用ProcessPoetDeaths的一个匿名实例调用mapEarlyDeaths。该实例拥有sendDeath方法的一个实现,和我们上面的例子一样的方式把结果写入到输出流。当然,这个技巧并不是存储过程特有的,但是和存储过程中返回的ResultSet结合使用,是一个非常强大的工具。

⑷ 怎样一次执行多条独立的SQL语句

1、将你要执行的sql语句写入一个txt文件中; 2、修改文件后缀为.sql文件; 3、使用 “source + 路径+文件名” 注: source与路径之间有空格。

⑸ 服务器被黑,每次进登录界面都弹出来一个对话框,大意是“你的服务器已经被拿下,下次注意”。怎样取消

服务器安全这问题,很重要,之前服务器被黑,管理员账号也被篡改,远程端口也登陆不了了。,在网上搜索了一些服务器安全设置以及防黑的文章,对着文章,我一个一个的设置起来,费了好几天的时间才设置完,原以为会防止服务器再次被黑,没想到服务器竟然瘫痪了,网站都打不开了,无奈对服务器安全也是一窍不通,损失真的很大,数据库都损坏了,我哪个后悔啊。娘个咪的。最后还是让机房把系统重装了。找了几个做网站服务器方面的朋友,咨询了关于服务器被黑的解决办法,他们建议找国内最有名的服务器安全的安全公司来给做安全维护,推荐了sinesafe,服务器被黑的问题,才得以解决。

一路的走来,才知道,服务器安全问题可不能小看了。经历了才知道,服务器安全了给自己带来的也是长远的利益。 希望我的经历能帮到楼主,帮助别人也是在帮助我自己。

下面是一些关于安全方面的建议!

建站一段时间后总能听得到什么什么网站被挂马,什么网站被黑。好像入侵挂马似乎是件很简单的事情。其实,入侵不简单,简单的是你的网站的必要安全措施并未做好。

一:挂马预防措施:

1、建议用户通过ftp来上传、维护网页,尽量不安装asp的上传程序。

2、定期对网站进行安全的检测,具体可以利用网上一些工具,如sinesafe网站挂马检测工具!

序,只要可以上传文件的asp都要进行身份认证!

3、asp程序管理员的用户名和密码要有一定复杂性,不能过于简单,还要注意定期更换。

4、到正规网站下载asp程序,下载后要对其数据库名称和存放路径进行修改,数据库文件名称也要有一定复杂性。

5、要尽量保持程序是最新版本。

6、不要在网页上加注后台管理程序登陆页面的链接。

7、为防止程序有未知漏洞,可以在维护后删除后台管理程序的登陆页面,下次维护时再通过ftp上传即可。

8、要时常备份数据库等重要文件。

9、日常要多维护,并注意空间中是否有来历不明的asp文件。记住:一分汗水,换一分安全!

10、一旦发现被入侵,除非自己能识别出所有木马文件,否则要删除所有文件。

11、对asp上传程序的调用一定要进行身份认证,并只允许信任的人使用上传程序。这其中包括各种新闻发布、商城及论坛程

二:挂马恢复措施:

1.修改帐号密码

不管是商业或不是,初始密码多半都是admin。因此你接到网站程序第一件事情就是“修改帐号密码”。帐号

密码就不要在使用以前你习惯的,换点特别的。尽量将字母数字及符号一起。此外密码最好超过15位。尚若你使用

SQL的话应该使用特别点的帐号密码,不要在使用什么什么admin之类,否则很容易被入侵。

2.创建一个robots.txt

Robots能够有效的防范利用搜索引擎窃取信息的骇客。

3.修改后台文件

第一步:修改后台里的验证文件的名称。

第二步:修改conn.asp,防止非法下载,也可对数据库加密后在修改conn.asp。

第三步:修改ACESS数据库名称,越复杂越好,可以的话将数据所在目录的换一下。

4.限制登陆后台IP

此方法是最有效的,每位虚拟主机用户应该都有个功能。你的IP不固定的话就麻烦点每次改一下咯,安全第一嘛。

5.自定义404页面及自定义传送ASP错误信息

404能够让骇客批量查找你的后台一些重要文件及检查网页是否存在注入漏洞。

ASP错误嘛,可能会向不明来意者传送对方想要的信息。

6.慎重选择网站程序

注意一下网站程序是否本身存在漏洞,好坏你我心里该有把秤。

7.谨慎上传漏洞

据悉,上传漏洞往往是最简单也是最严重的,能够让黑客或骇客们轻松控制你的网站。

可以禁止上传或着限制上传的文件类型。不懂的话可以找专业做网站安全的sinesafe公司。

8. cookie 保护

登陆时尽量不要去访问其他站点,以防止 cookie 泄密。切记退出时要点退出在关闭所有浏览器。

9.目录权限

请管理员设置好一些重要的目录权限,防止非正常的访问。如不要给上传目录执行脚本权限及不要给非上传目录给于写入权。

10.自我测试

如今在网上黑客工具一箩筐,不防找一些来测试下你的网站是否OK。

11.例行维护

a.定期备份数据。最好每日备份一次,下载了备份文件后应该及时删除主机上的备份文件。

b.定期更改数据库的名字及管理员帐密。

c.借WEB或FTP管理,查看所有目录体积,最后修改时间以及文件数,检查是文件是否有异常,以及查看是否有异常的账号。

⑹ 一个很无奈的sql查询语句问问大神们谁会

insert into 表名 (日期,学生姓名,是否签到) values(日期,学生姓名,IFNULL((select 是否签到 from 表名 where 日期= 昨天日期 and 学生姓名 = 姓名),0))

⑺ SQL的问题

说明:复制表(只复制结构,源表名:a 新表名:b)

SQL: select * into b from a where 1<>1

说明:拷贝表(拷贝数据,源表名:a 目标表名:b)

SQL: insert into b(a, b, c) select d,e,f from b;

说明:显示文章、提交人和最后回复时间

SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

说明:外连接查询(表名1:a 表名2:b)

SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

说明:日程安排提前五分钟提醒

SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5

说明:两张关联表,删除主表中已经在副表中没有的信息

SQL:

delete from info where not exists ( select * from infobz where info.infid=infobz.infid )

说明:--

SQL:

SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE

FROM TABLE1,

(SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE

FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND

FROM TABLE2

WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X,

(SELECT NUM, UPD_DATE, STOCK_ONHAND

FROM TABLE2

WHERE TO_CHAR(UPD_DATE,'YYYY/MM') =

TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') ¦¦ '/01','YYYY/MM/DD') - 1, 'YYYY/MM') ) Y,

WHERE X.NUM = Y.NUM (+)

AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B

WHERE A.NUM = B.NUM

说明:--

SQL:

select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名称='"&strdepartmentname&"' and 专业名称='"&strprofessionname&"' order by 性别,生源地,高考总成绩

说明:

从数据库中去一年的各单位电话费统计(电话费定额贺电化肥清单两个表来源)

SQL:

SELECT a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) AS JAN,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) AS FRI,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) AS MAR,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) AS MAY,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) AS JUL,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) AS AGU,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) AS SEP,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) AS OCT,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) AS NOV,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) AS DEC

FROM (SELECT a.userper, a.tel, a.standfee, b.telfeedate, b.factration

FROM TELFEESTAND a, TELFEE b

WHERE a.tel = b.telfax) a

GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy')

说明:四表联查问题:

SQL: select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

说明:得到表中最小的未使用的ID号

SQL:

SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) as HandleID

FROM Handle

WHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)

掌握SQL四条最基本的数据操作语句:Insert,Select,Update和Delete。

练掌握SQL是数据库用户的宝贵财 富。在本文中,我们将引导你掌握四条最基本的数据操作语句—SQL的核心功能—来依次介绍比较操作符、选择断言以及三值逻辑。当你完成这些学习后,显然你已经开始算是精通SQL了。

在我们开始之前,先使用CREATE TABLE语句来创建一个表(如图1所示)。DDL语句对数据库对象如表、列和视进行定义。它们并不对表中的行进行处理,这是因为DDL语句并不处理数据库中实际的数据。这些工作由另一类SQL语句—数据操作语言(DML)语句进行处理。

SQL中有四种基本的DML操作:INSERT,SELECT,UPDATE和DELETE。由于这是大多数SQL用户经常用到的,我们有必要在此对它们进行一一说明。在图1中我们给出了一个名为EMPLOYEES的表。其中的每一行对应一个特定的雇员记录。请熟悉这张表,我们在后面的例子中将要用到它。

INSERT语句

用户可以用INSERT语句将一行记录插入到指定的一个表中。例如,要将雇员John Smith的记录插入到本例的表中,可以使用如下语句:

INSERT INTO EMPLOYEES VALUES

('Smith','John','1980-06-10',

'Los Angles',16,45000);

通过这样的INSERT语句,系统将试着将这些值填入到相应的列中。这些列按照我们创建表时定义的顺序排列。在本例中,第一个值“Smith”将填到第一个列LAST_NAME中;第二个值“John”将填到第二列FIRST_NAME中……以此类推。

我们说过系统会“试着”将值填入,除了执行规则之外它还要进行类型检查。如果类型不符(如将一个字符串填入到类型为数字的列中),系统将拒绝这一次操作并返回一个错误信息。

如果SQL拒绝了你所填入的一列值,语句中其他各列的值也不会填入。这是因为SQL提供对事务的支持。一次事务将数据库从一种一致性转移到另一种一致性。如果事务的某一部分失败,则整个事务都会失败,系统将会被恢复(或称之为回退)到此事务之前的状态。

回到原来的INSERT的例子,请注意所有的整形十进制数都不需要用单引号引起来,而字符串和日期类型的值都要用单引号来区别。为了增加可读性而在数字间插入逗号将会引起错误。记住,在SQL中逗号是元素的分隔符。

同样要注意输入文字值时要使用单引号。双引号用来封装限界标识符。

对于日期类型,我们必须使用SQL标准日期格式(yyyy-mm-dd),但是在系统中可以进行定义,以接受其他的格式。当然,2000年临近,请你最好还是使用四位来表示年份。

既然你已经理解了INSERT语句是怎样工作的了,让我们转到EMPLOYEES表中的其他部分:

INSERT INTO EMPLOYEES VALUES

('Bunyan','Paul','1970-07-04',

'Boston',12,70000);

INSERT INTO EMPLOYEES VALUES

('John','Adams','1992-01-21',

'Boston',20,100000);

INSERT INTO EMPLOYEES VALUES

('Smith','Pocahontas','1976-04-06',

'Los Angles',12,100000);

INSERT INTO EMPLOYEES VALUES

('Smith','Bessie','1940-05-02',

'Boston',5,200000);

INSERT INTO EMPLOYEES VALUES

('Jones','Davy','1970-10-10',

'Boston',8,45000);

INSERT INTO EMPLOYEES VALUES

('Jones','Indiana','1992-02-01',

'Chicago',NULL,NULL);

在最后一项中,我们不知道Jones先生的工薪级别和年薪,所以我们输入NULL(不要引号)。NULL是SQL中的一种特殊情况,我们以后将进行详细的讨论。现在我们只需认为NULL表示一种未知的值。

有时,像我们刚才所讨论的情况,我们可能希望对某一些而不是全部的列进行赋值。除了对要省略的列输入NULL外,还可以采用另外一种INSERT语句,如下:

INSERT INTO EMPLOYEES(

FIRST_NAME, LAST_NAME,

HIRE_DATE, BRANCH_OFFICE)

VALUE(

'Indiana','Jones',

'1992-02-01','Indianapolis');

这样,我们先在表名之后列出一系列列名。未列出的列中将自动填入缺省值,如果没有设置缺省值则填入NULL。请注意我们改变了列的顺序,而值的顺序要对应新的列的顺序。如果该语句中省略了FIRST_NAME和LAST_NAME项(这两项规定不能为空),SQL操作将失败。

让我们来看一看上述INSERT语句的语法图:

INSERT INTO table

[(column { ,column})]

VALUES

(columnvalue [{,columnvalue}]);

和前一篇文章中一样,我们用方括号来表示可选项,大括号表示可以重复任意次数的项(不能在实际的SQL语句中使用这些特殊字符)。VALUE子句和可选的列名列表中必须使用圆括号。

SELECT语句

SELECT语句可以从一个或多个表中选取特定的行和列。因为查询和检索数据是数据库管理中最重要的功能,所以SELECT语句在SQL中是工作量最大的部分。实际上,仅仅是访问数据库来分析数据并生成报表的人可以对其他SQL语句一窍不通。

SELECT语句的结果通常是生成另外一个表。在执行过程中系统根据用户的标准从数据库中选出匹配的行和列,并将结果放到临时的表中。在直接SQL(direct SQL)中,它将结果显示在终端的显示屏上,或者将结果送到打印机或文件中。也可以结合其他SQL语句来将结果放到一个已知名称的表中。

SELECT语句功能强大。虽然表面上看来它只用来完成本文第一部分中提到的关系代数运算“选择”(或称“限制”),但实际上它也可以完成其他两种关系运算—“投影”和“连接”,SELECT语句还可以完成聚合计算并对数据进行排序。

SELECT语句最简单的语法如下:

SELECT columns FROM tables;

当我们以这种形式执行一条SELECT语句时,系统返回由所选择的列以及用户选择的表中所有指定的行组成的一个结果表。这就是实现关系投影运算的一个形式。

让我们看一下使用图1中EMPLOYEES表的一些例子(这个表是我们以后所有SELECT语句实例都要使用的。而我们在图2和图3中给出了查询的实际结果。我们将在其他的例子中使用这些结果)。

假设你想查看雇员工作部门的列表。那下面就是你所需要编写的SQL查询:

SELECT BRANCH_OFFICE FROM EMPLOYEES;

以上SELECT语句的执行将产生如图2中表2所示的结果。

由于我们在SELECT语句中只指定了一个列,所以我们的结果表中也只有一个列。注意结果表中具有重复的行,这是因为有多个雇员在同一部门工作(记住SQL从所选的所有行中将值返回)。要消除结果中的重复行,只要在SELECT语句中加上DISTINCT子句:

SELECT DISTINCT BRANCH_OFFICE

FROM EMPLOYEES;

这次查询的结果如表3所示。

现在已经消除了重复的行,但结果并不是按照顺序排列的。如果你希望以字母表顺序将结果列出又该怎么做呢?只要使用ORDER BY子句就可以按照升序或降序来排列结果:

SELECT DISTINCT BRANCH_OFFICE

FROM EMPLOYEES

ORDER BY BRANCH_OFFICE ASC;

这一查询的结果如表4所示。请注意在ORDER BY之后是如何放置列名BRANCH _OFFICE的,这就是我们想要对其进行排序的列。为什么即使是结果表中只有一个列时我们也必须指出列名呢?这是因为我们还能够按照表中其他列进行排序,即使它们并不显示出来。列名BRANCH_ OFFICE之后的关键字ASC表示按照升序排列。如果你希望以降序排列,那么可以用关键字DESC。

同样我们应该指出ORDER BY子句只将临时表中的结果进行排序;并不影响原来的表。

假设我们希望得到按部门排序并从工资最高的雇员到工资最低的雇员排列的列表。除了工资括号中的内容,我们还希望看到按照聘用时间从最近聘用的雇员开始列出的列表。以下是你将要用到的语句:

SELECT BRANCH_OFFICE,FIRST_NAME,

LAST_NAME,SALARY,HIRE_DATE

FROM EMPLOYEES

ORDER BY SALARY DESC,

HIRE_DATE DESC;

这里我们进行了多列的选择和排序。排序的优先级由语句中的列名顺序所决定。SQL将先对列出的第一个列进行排序。如果在第一个列中出现了重复的行时,这些行将被按照第二列进行排序,如果在第二列中又出现了重复的行时,这些行又将被按照第三列进行排序……如此类推。这次查询的结果如表5所示。

将一个很长的表中的所有列名写出来是一件相当麻烦的事,所以SQL允许在选择表中所有的列时使用*号:

SELECT * FROM EMPLOYEES;

这次查询返回整个EMPLOYEES表,如表1所示。

下面我们对开始时给出的SELECT语句的语法进行一下更新(竖直线表示一个可选项,允许在其中选择一项。):

SELECT [DISTINCT]

(column [{, columns}])| *

FROM table [ {, table}]

[ORDER BY column [ASC] | DESC

[ {, column [ASC] | DESC }]];

定义选择标准

在我们目前所介绍的SELECT语句中,我们对结果表中的列作出了选择但返回的是表中所有的行。让我们看一下如何对SELECT语句进行限制使得它只返回希望得到的行:

SELECT columns FROM tables [WHERE predicates];

WHERE子句对条件进行了设置,只有满足条件的行才被包括到结果表中。这些条件由断言(predicate)进行指定(断言指出了关于某件事情的一种可能的事实)。如果该断言对于某个给定的行成立,该行将被包括到结果表中,否则该行被忽略。在SQL语句中断言通常通过比较来表示。例如,假如你需要查询所有姓为Jones的职员,则可以使用以下SELECT语句:

SELECT * FROM EMPLOYEES

WHERE LAST_NAME = 'Jones';

LAST_NAME = 'Jones'部分就是断言。在执行该语句时,SQL将每一行的LAST_NAME列与“Jones”进行比较。如果某一职员的姓为“Jones”,即断言成立,该职员的信息将被包括到结果表中(见表6)。

使用最多的六种比较

我们上例中的断言包括一种基于“等值”的比较(LAST_NAME = 'Jones'),但是SQL断言还可以包含其他几种类型的比较。其中最常用的为:

等于 =

不等于 <>

小于 <

大于 >

小于或等于 <=

大于或等于 >=

下面给出了不是基于等值比较的一个例子:

SELECT * FROM EMPLOYEES

WHERE SALARY > 50000;

这一查询将返回年薪高于$50,000.00的职员(参见表7)。

逻辑连接符

有时我们需要定义一条不止一种断言的SELECT语句。举例来说,如果你仅仅想查看Davy Jones的信息的话,表6中的结果将是不正确的。为了进一步定义一个WHERE子句,用户可以使用逻辑连接符AND,OR和NOT。为了只得到职员Davy Jones的记录,用户可以输入如下语句:

SELECT * FROM EMPLOYEES

WHERE LAST_NAME = 'Jones' AND FIRST_NAME = 'Davy';

在本例中,我们通过逻辑连接符AND将两个断言连接起来。只有两个断言都满足时整个表达式才会满足。如果用户需要定义一个SELECT语句来使得当其中任何一项成立就满足条件时,可以使用OR连接符:

SELECT * FROM EMPLOYEES

WHERE LAST_NAME = 'Jones' OR LAST_NAME = 'Smith';

有时定义一个断言的最好方法是通过相反的描述来说明。如果你想要查看除了Boston办事处的职员以外的其他所有职员的信息时,你可以进行如下的查询:

SELECT * FROM EMPLOYEES

WHERE NOT(BRANCH_OFFICE = 'Boston');

关键字NOT后面跟着用圆括号括起来的比较表达式。其结果是对结果取否定。如果某一职员所在部门的办事处在Boston,括号内的表达式返回true,但是NOT操作符将该值取反,所以该行将不被选中。

断言可以与其他的断言嵌套使用。为了保证它们以正确的顺序进行求值,可以用括号将它们括起来:

SELECT * FROM EMPLOYEES

WHERE (LAST_NAME = 'Jones'

AND FIRST_NAME = 'Indiana')

OR (LAST_NAME = 'Smith'

AND FIRST_NAME = 'Bessie');

SQL沿用数学上标准的表达式求值的约定—圆括号内的表达式将最先进行求值,其他表达式将从左到右进行求值。

以上对逻辑连接符进行了说明,在对下面的内容进行说明之前,我们再一次对SELECT语句的语法进行更新:

SELECT [DISTINCT]

(column [{, column } ] )| *

FROM table [ { , table} ]

[ORDER BY column [ASC] | [DESC

[{ , column [ASC] | [DESC } ] ]

WHERE predicate [ { logical-connector predicate } ];

NULL和三值逻辑

在SQL中NULL是一个复杂的话题,关于NULL的详细描述更适合于在SQL的高级教程而不是现在的入门教程中进行介绍。但由于NULL需要进行特殊处理,并且你也很可能会遇到它,所以我们还是简略地进行一下说明。

首先,在断言中进行NULL判断时需要特殊的语法。例如,如果用户需要显示所有年薪未知的职员的全部信息,用户可以使用如下SELECT语句:

SELECT * FROM EMPLOYEES

WHERE SALARY IS NULL;

相反,如果用户需要所有已知年薪数据的职员的信息,你可以使用以下语句:

SELECT * FROM EMPLOYEES

WHERE SALARY IS NOT NULL;

请注意我们在列名之后使用了关键字IS NULL或IS NOT NULL,而不是标准的比较形式:COLUMN = NULL、COLUMN <> NULL或是逻辑操作符NOT(NULL)。

这种形式相当简单。但当你不明确地测试NULL(而它们确实存在)时,事情会变得很混乱。

例如,回过头来看我们图1中的EM-PLOYEES表,可以看到Indiana Jones的工薪等级或年薪值都是未知的。这两个列都包含NULL。可以想象运行如下的查询:

SELECT * FROM EMPLOYEES

WHERE GRADE <= SALARY;

此时,Indiana Jones应该出现在结果表中。因为NULL都是相等的,所以可以想象它们是能够通过GRADE小于等于SALARY的检查的。这其实是一个毫无疑义的查询,但是并没有关系。SQL允许进行这样的比较,只要两个列都是数字类型的。然而,Indiana Jones并没有出现在查询的结果中,为什么?

正如我们早先提到过的,NULL表示未知的值(而不是象某些人所想象的那样表示一个为NULL的值)。对于SQL来说意味着这个值是未知的,而只要这个值为未知,就不能将其与其他值比较(即使其他值也是NULL)。所以SQL允许除了在true 和false之外还有第三种类型的真值,称之为“非确定”(unknown)值。

如果比较的两边都是NULL,整个断言就被认为是非确定的。将一个非确定断言取反或使用AND或OR与其他断言进行合并之后,其结果仍是非确定的。由于结果表中只包括断言值为“真”的行,所以NULL不可能满足该检查。从而需要使用特殊的操作符IS NULL和IS NOT NULL。

UPDATE语句

UPDATE语句允许用户在已知的表中对现有的行进行修改。

例如,我们刚刚发现Indiana Jones的等级为16,工资为$40,000.00,我们可以通过下面的SQL语句对数据库进行更新(并清除那些烦人的NULL)。

UPDATE EMPLOYEES

SET GRADE = 16, SALARY = 40000

WHERE FIRST_NAME = 'Indiana'

AND LAST_NAME = 'Jones';

上面的例子说明了一个单行更新,但是UPDATE语句可以对多行进行操作。满足WHERE条件的所有行都将被更新。如果,你想让Boston办事处中的所有职员搬到New York,你可以使用如下语句:

UPDATE EMPLOYEES

SET BRANCH_OFFICE = 'New York'

WHERE BRANCH_OFFICE = 'Boston';

如果忽略WHERE子句,表中所有行中的部门值都将被更新为'New York'。

UPDATE语句的语法流图如下面所示:

UPDATE table

SET column = value [{, column = value}]

[ WHERE predicate [ { logical-connector predicate}]];

DELETE语句

DELETE语句用来删除已知表中的行。如同UPDATE语句中一样,所有满足WHERE子句中条件的行都将被删除。由于SQL中没有UNDO语句或是“你确认删除吗?”之类的警告,在执行这条语句时千万要小心。如果决定取消Los Angeles办事处并解雇办事处的所有职员,这一卑鄙的工作可以由以下这条语句来实现:

DELETE FROM EMPLOYEES

WHERE BRANCH_OFFICE = 'Los Angeles';

如同UPDATE语句中一样,省略WHERE子句将使得操作施加到表中所有的行。

DELETE语句的语法流图如下面所示:

DELETE FROM table

[WHERE predicate [ { logical-connector predicate} ] ];

现在我们完成了数据操作语言(DML)的主要语句的介绍。我们并没有对SQL能完成的所有功能进行说明。SQL还提供了许多的功能,如求平均值、求和以及其他对表中数据的计算,此外SQL还能完成从多个表中进行查询(多表查询,或称之为连接)的工作。这种语言还允许你使用GRANT和REVOKE命令控制使用者的数据访问权限。

Visual C++中实现对图像数据的读取显示
2003-12-9加入 来自yesky 作者刘 涛 4条评论 点击3030次

在利用VC进行数据库编程时,经常需要处理数据库中的图像数据,将该图像从数据库中读取出来并显示,图像数据与文本字段不同,它是作为OLE字段在数据库中存储,通过数据集对象的成员变量自动交换得到的图像数据,得到的数据并不能直接显示,如何处理图像数据,一直是数据库编程中的一个难点,目前关于VC进行数据库编程的资料不少,但很少涉及图像数据的操作,笔者针对一现状,结合自己开发的一个项目,解决了如何显示数据库中的图像这一问题,本文以操作ACESS数据库为例子,讲解一下自己的实现思路,希望对爱好VC编程的朋友们有所帮助,以起到抛砖引玉的作用。

为了简化问题,该数据库的表中只有一个名为Images的OLE字段,我使用DAO连接操作数据库,读取的图像数据显示在一个对话框上,至于使用ODBC、DAO还是ADO,这要根据具体情况而定,但无论使用哪一种,对图像的显示来说,实现的过程是大同小异的。由于篇幅有限,文章中对如何实现数据库的连接不再作具体的说明,有兴趣的读者朋友可以参考VC数据库编程的资料。实现过程中,首先定义一个CDaoRecordset的子类 CimageData如下:

class CimageData : public CDaoRecordset
{
public:
CimageData (CDaoDatabase* pDatabase = NULL);
DECLARE_DYNAMIC(CimageData)
file://{{AFX_FIELD(CimageData, CDaoRecordset)
CByteArray m_Images;//声明字节数组用来存放图像数据
file://}}AFX_FIELD
// Overrides
// ClassWizard generated virtual function overrides
file://{{AFX_VIRTUAL(CimageData)
public:
virtual CString GetDefaultDBName();
virtual CString GetDefaultSQL();
virtual void DoFieldExchange(CDaoFieldExchange* pFX);
file://}}AFX_VIRTUAL

该类的实现为:

CimageData:: CimageData (CDaoDatabase* pdb)
: CDaoRecordset(pdb)
{
file://{{AFX_FIELD_INIT(CimageData)
m_nFields = 1;//数据库的表中仅有一个字段
file://}}AFX_FIELD_INIT
m_nDefaultType = dbOpenDynaset;//以动态集方式打开数据库
}
CString CimageData::GetDefaultDBName()
{
return _T("E:\\IMAGES.mdb");//默认的ACESS数据库在E盘,名为IMAGES
}

CString CimageData::GetDefaultSQL()
{
return _T("[Table]");//默认打开数据库中名为"Table"的表
}

void CimageData::DoFieldExchange(CDaoFieldExchange* pFX)
{
file://{{AFX_FIELD_MAP(CimageData)
pFX->SetFieldType(CDaoFieldExchange::outputColumn);
DFX_Binary(pFX, _T("[Images]"), m_Images);//以二进制方式在Images字段和m_Images变量间交换数据
file://}}AFX_FIELD_MAP
}

有了该类,就可以定义相应的对象来与数据库中的图像字段交换数据,下面定义的函数GetImageData()说明了如何根据读取的OLE字段数据生成待显示的图像,需要注意的是该函数中使用的CBitmap类的变量Bitmap是预定义的一个全局变量:

BOOL CImageDlg:: GetImageData(CByteArray & DBArray)
{
CByteArray Array;
Array.Copy( DBArray);
int HeaderLen = 78 + sizeof(BITMAPFILEHEADER); file://确定图像头信息的起始位置
Array.RemoveAt( 0, HeaderLen ); // 移动到图像头信息的起始位置
BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)Array.GetData() ;
BITMAPINFO &bmInfo = *(LPBITMAPINFO)Array.GetData() ;
file://得到图像数据的头信息
int nColors=bmiHeader.biClrUsed ? bmiHeader.biClrUsed : 1 << bmiHeader.biBitCount;
file://确定图像的颜色数
LPVOID lpDIBBits;
if( bmInfo.bmiHeader.biBitCount > 8 )
lpDIBBits=(LPVOID)((LPDWORD)(bmInfo.bmiColors+bmInfo.bmiHeader.biClrUsed)+
((bmInfo.bmiHeader.biCompression == BI_BITFIELDS) ? 3 : 0));
else
lpDIBBits = (LPVOID)(bmInfo.bmiColors + nColors);
file://得到图像各个像素的具体数据
CClientDC dc(NULL);
HBITMAP hBmp = CreateDIBitmap( dc.m_hDC,
&bmiHeader,
CBM_INIT,

⑻ 在oracle数据库中,影响优化器生成执行计划的因素有哪些

9i前的RBO不熟,也就不敢妄言。

关于10g后的CBO,谈下我的理解。
首先,影响优化器执行计划最主要的因素是统计信息。优化器根据统计信息情况,单表上选择全表扫描还是索引。表联接方式上选择嵌套,哈希还是合并排序。不同的统计信息将会生成不同的执行计划。很多时候发现之前跑的好好的sql,突然变慢了,多数情况下重新收集下统计信息便解决了。统计信息这一块需要关注直方图这一块,很多生产环境都存在数据倾斜的情况,如若未准确收集直方图,那么生成的执行计划便有失偏颇。
--------------------------------------------------------------------------------------------------------------------
第二点,sql语句的写法问题。比如字段上有索引,但谓词条件写成like '%xxx%'方式,将导致该字段上索引不可用。比如表连接方式用<>之类,将无法使用hash join。其实这些与其说是写法问题,倒不如说是oracle自身有一定的编码规则,符合该规则条件,方可用到index之类。
--------------------------------------------------------------------------------------------------------------------
第三点,也是最无奈的一点,CBO的自身缺陷问题。很多时候,统计信息是最新的,也符合写法规范,但CBO就是不生成我们所期待的执行计划。这个时候,通常要改变sql语句的逻辑写法,比如标量子查询可否换成左连接,用with as替换一些子查询等,以期待oracle生成更高效率的执行计划。另外,就是使用hint来迫使CBO生成你所期待的执行计划,但CBO不一定就范。

谈及缺陷,也不算不上缺陷,尤其是表越多,将会出现更多排列的可能性,oracle不可能将所有执行计划都生成出来然后选择一个最优的,定是按照一定比例择取,但具体多少,我不详。也就是说,DBA完全可以凭借自身对你所管理的oracle了解程度,给sql语句指定一个最优的执行计划。
--------------------------------------------------------------------------------------------------------------------
其他还有一些细节问题,可在日常工作中慢慢体会,cbo还是相当强大的。

⑼ 一次向一个表中插入多条数据,SQL应该如何样写效率最好

------解决方案--------------------------------------------------------你那些 SELECT xx,xx,xx,xx,xx 是从几个表里查出来?如果是一个表的话直接用一个SELECT把所有的查出来,一次性插进去,就不需要用UNION ALL了,如果从不同的表的话可以那样做.
------解决方案-------------------------------------------------------- 分开写快
但可放在一起执行.
------解决方案--------------------------------------------------------C# code Sqlconnection connection=new SqlConnection(); string sql="INSERT Biao SELECT xx,xx,xx,xx,xx UNION ALL SELECT xx,xx,xx,xx,xx UNION ALL SELECT xx,xx,xx,xx,xx UNION ALL SELECT xx,xx,xx,xx,xx"; SqlComand command=new SqlCommand(sql,connection); connection.Open(); int count=command.ExecuteNonQuery(); connection.Close();
------解决方案--------------------------------------------------------探讨分开写快
但可放在一起执行.
------解决方案--------------------------------------------------------都差不对!!
------解决方案--------------------------------------------------------存储过程效率高
------解决方案--------------------------------------------------------都差不多
------解决方案--------------------------------------------------------批量的搞法,可以这样,一次insert一条,用 insert into table(...) values(...) 的方法,可以积攒到 1000 条左右的时候再去提交,这样比插入一条提交一条的速度要快一些,但不是很明显。
------解决方案--------------------------------------------------------不是太影响速度,随意吧
------解决方案--------------------------------------------------------探讨分开写快
但可放在一起执行.
------解决方案--------------------------------------------------------探讨分开写快
但可放在一起执行.
------解决方案--------------------------------------------------------SQL code declare @x int set @x=0; while (@x

⑽ my sql如何从上一次查询的位置继续往下查询;php 实现:添加好友,对方通过才能聊天

  1. 你可以在表中添加一个字段,设2个值:0和1. 0表示这条信息未读,1为已读。然后你查询数据库的时候就查未读的,而且按时间的先后顺序查询,查到的第一条就是你上次看的最后一条了。

  2. 添加好友,这个和1原理差不多,比如你有一个好友表,当你添加对方为好友的时候,在这个表添加一条记录,表示他是你的好友,那么你们就可以聊天了。如果你嫌麻烦,你可以在你的用户表中添加一个字段,用来存好友的id,以逗号隔开,读取的时候就分割成数组,然后聊天的时候就判断对方的id是不是存在数组中,有就是好友,没有提示添加好友。