Hostmonster空间数据库名怎么输入法只能输入字母9个字母

查看: 1796|回复: 19
求助 安装程序链接不上数据库
ERROR 1045: Access denied for user
数据库建立好了 给予了ALL权限&&安装程序时输入 数据名 用户名 密码&&(肯定没错) 就是链接不上 郁闷ing
买的空间月流量有3500G 可是cpu如果限制在1% 如果建站用的话 没有人可以用到这么多 用到了肯定会停&&我还想用来做下载站呢
请求帮忙解决数据库问题
出自美国空间侦探,原帖地址:/thread-.html,转载请注明!
问题不详细,无法做具体回答,
用的是什么程序,检查自己的配置文件.
估计是连接信息写错了
再次检查【用户名】和【数据库名】
创建后的名称与创建时填写的名称不一样。有前缀,太长的也会被砍尾
我以前就犯过这个错误。
[ 本帖最后由 fanqi1234 于
02:06 PM 编辑 ]
对于这个问题 同一个程序 (帝国下载系统)我在另一个带有cpanel x&&控制盘的 php 空间是可以安装的 )同样的数据库名 密码&&
另外我也知道长的名字会被截去&&我只用了三个字母做做数据库名 六个字母做密码 我用这个cpanel x&&已经半年多 国内的空间还没有出现过这样的情况&&这个第一次不知道何解决
按照mySQL里面显示的信息填写就可以了,主要增加了一个前缀
是说安装程序的时候增加一个 默认的前缀吗&&比如说 我开通的用户名是 AAA&&我建立的数据库是BBB 数据库的用户名是CCC&&那我在安装程序的时候 填写的就是AAA_BBB (数据库名) AAA_CCC(用户名)&&无用呢~~~~买来空间无法用急人啊
错误提示是什么
提示用户名或密码错误 无法连接数据库&&我是按照标准的写的了 而且换了几个新建数据库 测试都不行 连接不上
记得以前有会员遇到过,然后叫客服初始化就好了。
不过我还是建议你先检查下是不是数据库名字用户名密码记错了?
站长推荐 /4
HostEase速度快,有中文客服和中文站,支持支付宝付款。
汇集Godaddy HostEase WebhostingPad LunarPages多家美国主机的最新优惠码!
2014年西方感恩节、黑色星期五已经来临,GoDaddy最新给力优惠!不可错过!
迎新春,美国RAKsmart服务器推出“买一月送一月”活动!独立服务器、VPS主机以及站群服务器均可享受该优惠!机不可失!
论坛言论由会员发布,不代表本论坛观点;非交易论坛,本站不对会员间交易承担任何责任。
代购请联系独立博客 | 无限博客今天终于把博客系统搭建起来了,折腾了大半天,写来下,给想自己搭建博客系统的朋友们看看。
其实,目前想要搭建自己的网站都非常简单,买个vps,注册个域名,在vps上装上wordpress,齐活。
来,从头说起。
另外,给自己打个广告,以后文章都会在 &更新。
是什么,大家可以,我这里就不解释了,简单的说,就是一台服务器。
vps有很多提供商,国外的一大把,价格也参差不齐,当然,服务也参差不齐,大一点的,啦,啦,还有一些其他的,大家网上找一找,找个价格和速度合适的,国内嘛,现在做得还不错的有,就速度上来说,国内的阿里云怎么都比国外的要快,只是备案比较麻烦,你懂的。国外的虽然速度上差点,但是稳定性还是有保证的,不会无缘无故被拔线,而且用国外的,还可以顺便建个隧道,至于建隧道干什么,呵呵,你懂的。
好啦,我用的linode的,付款非常简单,有个信用卡就行了,登陆他们主页,注册一下,啪啪啪就搞完了。我选的20刀每月的那一档,最低配的,以后要是访问量上来了,扩容也挺容易的。
选好付款了以后,就可以选择操作系统了,我选的ubuntu,哦,对了,linode不能选择win操作系统,都是linux的。
一切准备好了以后,linode会给你一个ip地址,然后用ssh登陆上去,windows下用,OK,一切的一切都和你直接操作Linux没有区别了吧。
好了,开始安装建站需要的各种工具吧。 建立一个基于wordpress标准的博客站点,需要安装以下这几大组件,,,。这三个主要的装好也就可以OK了。下面我们一个一个的来。
首先,登入到你的linux后先检查一下更新情况,装一些必要的软件和程序
sudo apt-get update sudo apt-get upgrade
然后,装一些必要的程序包
sudo apt-get install libcurl4-openssl-dev libssl-dev zlib1g-dev git-core gcc build-essential imagemagick vim
OK,前期准备就绪.
web服务器很多种,我选的是,为什么?因为他是毛子写的,据说很牛逼。
安装服务器也很简单,其实,ubuntu上装什么都很简单,基本上都是atp-get install XXX
sudo apt-get install nginx
哦,得建一个目录来存放网站,其中的wusay可以改成你想改的任何名字.
sudo mkdir /srv/www/ sudo mkdir -p /srv/www/wusay/public_html sudo mkdir /srv/www/wusay/logs chown -R www-data:www-data /srv/www/wusay
然后,配置一下nginx的配置文件,/etc/nginx/sites-enabled/wusay,同样,你也可以改成你需要的名字,这个文件默认是不存在的,需要你建立,可以用vim编辑一下,然后记得把目录下的default删掉啊。
wusay配置文件的内容如下:
server_name localhost www.copsy.org copsy.
access_log /srv/www/wusay/logs/access.
error_log /srv/www/wusay/logs/error.
root /srv/www/wusay/public_
location / {
index index.html index.htm index.
if (-f $request_filename/index.html){
rewrite (.) $1/index.
if (-f $request_filename/index.php){
rewrite (.) $1/index.
if (!-f $request_filename){
rewrite (.*) /index.
location ~ .php$ {
include /etc/nginx/fastcgi_
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.
fastcgi_param SCRIPT_FILENAME /srv/www/wusay/ public_html$fastcgi_script_
然后,试一试nginx好使不好使
sudo /etc/init.d/nginx start
没报错就OK了,要是你按照步骤一步一步来的还报错,那人品太差了。
安装PHP解释器
还是老办法,atp-get install
sudo apt-get install php5-cli php5-cgi spawn-fcgi psmisc
第二步完成,简单吧。
安装mysql数据库
sudo apt-get install mysql-server php5-mysql mysql-client
安装的时候要输入密码,要牢记哦,然后使用start命令启动mysql
sudo start mysql
你要会数据库操作,你可以自己进去建立个数据库,进入mysql,然后执行
create database XXX
建立一个数据库。你要是对mysql还想有其他操作,就装个phpmyadmin吧。
好了,一切就绪了,准备安装wordpress吧
下载wordpress并解压
sudo wget http://wordpress.org/latest.tar.gz tar -zxvf latest.tar.gz
然后把目录下的wordpress文件夹拷贝到/srv/www/wusay/public_html/下,配置public_html权限,chmod 777 /srv/www/wusay/public_html/,重启nginx服务
sudo /etc/init.d/nginx restart
ok,打开本机的浏览器,输入http://你的IP地址/index.php,开始安装吧,后面的安装都是web操作了。
装完以后,记得把public_html的权限改过来,改成755。
OK,一切完毕,输入http://你的IP地址,开始你的博客之旅吧。后面就是博客的美化了。这就是看你的想象力啦。
================
新手教程:建立网站的全套流程与详细解释
你要是Google这个话题,得到的结果八成都是广告——他们都会告诉你,“嘿,我(或某公司)这里可以建网站,傻瓜式的哟,快来投奔我吧!”新手一般都觉得建网站是一件超级复杂的事情,于是很天真很无邪地进了圈套,到最后还乐呵呵帮人数钱。傻瓜式的东西就如它的名字一样,只是为傻瓜准备的,要格外小心。
我正式接触计算机在2002年,接触网站建设在2003年,想想时日也不短了,虽然不是什么高手,但还是有一定发言权滴。数月前,鼓动从Live Space逃脱、建立了自己的窝,而近日又把自己的网站和“”网站都搬了家,然后也帮“”逃离了那抽风的Live
Space,后来有朋友问起关于如何建立个人网站的事情,所以干脆写篇教程,把这建网站的来龙去脉讲清楚。
一、建网站的准备材料:域名和空间
一个网站通常由域名和一堆网页文件构成:
域名:就是“三达不溜什么什么点坑”这样的东西(如www.yihui.name,不严格,见后话),它由一家非营利组织ICANN管理,但它授权给了若干注册商(registrar)去卖域名,你可以在这些域名经销商那里注册顶级域名,所谓顶级域名就是“字母或数字组合+顶级域名后缀”,这些后缀包括常见的com/org/net,也包括不常见的name/info/biz等,各家允许注册的域名后缀可能有所不同,这就看个人喜好了;关于域名后缀,本来它是有含义的,比如com是company,org是organization,name是个人域名,等等,但我个人觉得这些东西已经没太大意义了,域名只要好记、看着像模像样就可以了,管它是公司还是组织呢(有例外:如gov等特殊后缀一般人不能注册),那著名的del.icio.us网站就是个很好的例子,它不一定非得是美国网站,但这个域名就是注册得很巧妙。顶级域名下面可以设置子域名,如二级三级域名,严格来说,www.yihui.name只是yihui.name的二级子域名,只是www太盛行,以至于人们干脆把www.***.***当作顶级域名了。animation.yihui.name就是本站的一个子域名/子站。说了半天,域名怎么注册啊?你Google一下“域名注册”或“domain
name registration”,顶上的Sponsored link中都是有实力的注册商,但我作为过来人要严重提醒的是,尽量不要在国内注册(尤其不要相信那个万网的鬼话)。据说GoDaddy还可以,我没试过,只知道它似乎不能注册.name域名,我自己是在注册的域名(需要付美元,我用的PayPal,双币种的信用卡也可以)。网站空间:想得简单一些,空间和你的硬盘没啥区别,只不过是空间服务商卖给你的一块服务器硬盘位置而已,性能可能比你的PC机好一点,网站空间就是放网页文件的地方,网页文件你可以简单想象为你硬盘里的文件,它们也是按路径访问的,网址的路径就对应着硬盘里的文件夹。网页文件通常分为:
静态网页:其内容是固定不变的,里面放着HTML代码(网页的一种语言),不管谁、不管什么时间访问,内容都一样,通常以.html/.htm为文件名动态网页:我估计现在大多数网站都是动态的了,所谓动态就是网页文件会根据不同的条件解析生成不同的HTML代码,例如:某动态页面根据时间和用户ID向访问者问好,早上访问就说早上好,晚上访问就说晚上好,路人甲来了就说路人甲你好……动态页面通常和数据库挂钩,用户在访问网页的时候,网页程序就存取数据库,所以页面内容会不断更新。动态页面可能采取不同的语言编写,如古老的微软的ASP、盛行的开源的PHP。现在网络上有无数的网站系统,我当然推崇PHP+MySQL的系统了,目前尤其看好WordPress系统。
注意有些国外空间是几乎可以当做自己的电脑使用的,包括编译安装程序(如Python),SSH登录,MySQL可以在命令行中执行,等等,国内似乎没见过能给空间这么大自由的
域名和空间没有必然联系,域名的作用就是作为一个字符串映射到一个IP地址上,因为(1)IP地址太难记了(2)IP地址数目有限(同一个IP上可以放N个域名)所以才需要域名这么个东西。这就意味着,你有换空间的自由。哪天对空间服务商不高兴了,可以直接把他踹了,把域名解析到别家去,用另一家空间。哎哎,等会儿,啥叫域名解析?
二、关于网站的配置
1、域名的设置
注册域名交完银子之后,域名就是你的了,如果你在国内注册的,你花钱买的域名不一定真的是你的。一定要看你是否有以下权利:
修改注册联系人、管理联系人、技术联系人和付费联系人信息,如果你在后台找不到修改的地方,那么恭喜你,这域名好像不是你的,而是某奸商的,用WHOIS查一下域名信息吧;拿到授权码(Auth Code),国内也有叫域名转移密码的,这个码很重要,如果你不知道或奸商不告诉你,那再次恭喜你,这个域名仍然不是你的,想搬家到别家注册商都搬不了,万一不行遇到这种情况,那么就去ICANN投诉奸商,每天投诉三遍,如果某注册商总是遭到投诉,ICANN会修理它的,总之你一定要知道自己作为消费者有什么权利
如果域名真的属于你,那么你哪天对注册商不高兴了,也可以把它踹掉,转移到别的注册商下。
域名的设置主要是一些解析工作,包括:
域名服务器(name server):通常是ns*.***.***之类的网址,这个服务器负责解析下面的各种设置,也就是说,它是域名各项设置的Boss。国内一些域名注册商通常以这一点为手段,卡住用户,比如限制你只能使用它的域名服务器,然后再限制你最多只能设置10项A记录或MX记录等,多了要另外收费,这种规矩实在是很扯淡;尤其是对于那些需要多个子域名的用户,这一点很不方便,国外情况好一些,至少我还没见过有哪家限制你使用特定域名服务器的;
要特别提及的一点是,有些空间服务商只需要你把域名服务器设置为他们的域名服务器,剩下的所有解析问题你基本上都不用管了,你可以自由创建子域名,而不必添加A记录
A记录:就是将域名指向主机IP,可以将顶级域名或子域名指向特定的IP,所以你的子域名和顶级域名可以不在同一台服务器上,比如我可以将www.yihui.name指向66.147.240.177,将test.yihui.name指向127.0.0.1,等等。MX记录:就是邮件服务器,大家知道邮箱是***@***.***的形式,当你发邮件点“发送”之后,首先你的邮件服务商要根据你的收件人邮箱的域名去找它的MX记录,然后再把邮件发给相应的(另一家)邮件服务商,比如我的域名yihui.name的MX记录是ASPMX.,也就是Google Apps的邮件服务地址,当你给xie@yihui.name发邮件的时候,系统先去找一下yihui.name的MX记录,一看,哦,是Google啊,那就投递到Google家去,Google收到邮件,一看,哦,要发给xie用户啊,那就发给xie的收件箱中吧;我记得以前搜狗似乎也提供过免费的邮件服务,不知现在还在不在,我已经用Google
Apps很久了。CNAME:即别名,这玩意儿就是个域名“面具”,比如我把google.yihui.name的CNAME设置为,那么你们访问前者的时候实际上就在访问Google,域名中包含的任何路径都会原封不动传递给,比如google.yihui.name/services/就是在访问/services/,但你的浏览器地址栏中的地址不会显示后者,而是显示那个“伪装”的地址。所以只要我高兴,我可以随意制造消息,比如“Google换网址了,新网址是”。其它设置:不说了,理论上一个A记录就够用了,别的都不用管。
2、主机的设置
域名设置好了之后,主机上也需要一些呼应工作。要是域名设置了A记录,但主机上不“接收”,那网站也没法使用。主机如何接收取决于它安装的网站服务程序,现在流行的是Apache,当然也有少数网站依旧抱着Windows IIS大腿(用ASP语言+Access数据库),据说近段时间又出现了一款新软件,有取代Apache的可能,名字忘记了。以Apache为例吧,主机上会创建一个虚拟主机(Virtual Host)配置文件,告诉服务器,“嘿,有个网站指向了你,你要为这个网站服务,这个网站放在某某目录下,如果用户访问某个网址,你要负责把该目录下的文件拿出来给用户看。”大致原理就是这样,细节不多说了。
对用户来说,不用管那么多细节,以上原理的实现对你来说就是在后台把域名绑定到主机的目录下(以及子域名绑定到子目录下)。一般来说,网站还需要两个辅助工具才能让主人随心所欲地配置自己的网站,即FTP和数据库。
(1)用FTP传输网页文件
FTP就是用来传文件到某一台服务器的,只要你购买了虚拟主机服务,一般就会给你一个FTP帐号,你可以利用这个帐号登录你的主机,把网页文件传上去,然后用户就可以访问了。一点常识是,index.htm/index.php之类的网页文件通常是你在访问一个目录时主机会自动为你查找的文件,比如你访问yihui.name,主机会自动查找有没有index.php,如果有,就执行这个文件,生成HTML给你的浏览器。这个文件的文件名也许是可以配置的,但建议不要在这上面特立独行。
现在又很多成熟的建站系统,从网上下载下来然后传到服务器上,访问你的网址,按照提示一步步配置即可,跟装软件没两样。
(2)网站数据库
动态网站大多数需要数据库(即使是文本文件“数据库”),如果你的网站用PHP语言,那么MySQL就是绝配了。若是PHP+MySQL空间(一般Linux主机都是这样),主机服务商会给你分配MySQL数据库帐号,包括:数据库主机(多为localhost)、数据库名、用户名、密码。这四项将会在你安装网页程序的过程中要求你填写。
三、网站的运行
对于那些程序员来说,第一个例子通常都是hello world,如果你愿意看hello world的话,就把“hello world”用任何文本编辑工具写在一个文本文件中,命名为index.htm(注意Windows会默认隐藏文件扩展名!你自己保证文件名不是index.htm.txt吧,我不管了),传到网站根目录下,然后访问你的网站,你就能欣喜地看到这个老得不能再老的hello world了。
一个像样的网站当然不是hello world这么简单,它的运行就像一个复杂的程序,可能存在文件之间的函数调用以及数据库的存取等等。世上真正开发网站程序的人肯定是少数,所以不用担心,你就用别人的程序吧,典型的网站系统有:
博客系统(Blog):推荐WordPress,理由是程序写得简洁,扩展性强,我以前用国产的Bo-blog系统,后来没经得住诱惑投奔WP了内容管理系统(CMS):新闻八卦站、教程站等等,顾名思义就是填充内容的,这种网站八成是互相抄,没几个正儿八经写的,所以为了缓解大家的阅读压力,请各位客官珍爱生命,远离这种网站,也不要再重复建设论坛系统(BBS):网民对此应该非常熟悉了,国内常见的系统有PHPWind、Discuz等,国外盛极一时的有phpBB,我个人推荐的是一款相对新出道的bbPress,理由同WordPress,在大家拼命增加功能的今天(搞得用户面对一大堆选项焦头烂额),难得见到一款拼命减功能的论坛系统维基系统(Wiki):Wikipedia采用的是MediaWiki系统,如果你不想让维基和数据库交互的话,DokuWiki将是不错的选择,它不需要数据库支持,全部都是文本文件操作
网站的安装都没啥说的,一般都是把网页文件整锅端上服务器,然后访问你的网址,按提示走。该设定网站名称设名称,该输密码输密码。然后你会意识到,原来一个小小的个人也可以创造一个看似吓人的大网站。
但网站的维护并非一件简单的事情,当你有权利面对所有的选项时,你也会觉得痛苦。像我这种业余玩了几年网站的人都快有职业病了,什么地方没对齐就会觉得不舒服,什么地方少了个空格一眼就看出来了,段首空格缩进2字符还是1.9字符感觉就是不一样。所有的东西你都可以改,你愿意怎么布置就怎么布置。只需一个文本编辑器和FTP,你就可以改了传,传了看,看了改。俨然永劫不复了。所以建网站也要有好心态,千万别完美心态,不然这辈子都要不断改。现在网站系统更新也快,隔三差五就有新功能,看得你心痒痒:我是不是该装个A插件/换个B主题啊?张三家有个功能特别酷,我要不要琢磨一下是怎么弄的啊?……
所以,我是建议各位看官学习HTML和CSS以及PHP+MySQL呢,还是不建议呢?我也不知道。
还有搜索引擎优化(SEO),采取一些策略让搜索引擎喜欢你的网站,使得你的搜索排名靠前,你又得学习什么是网页Meta信息(关键词、描述),什么是301重定向,什么是404错误,什么是Apache的Rewrite模块什么是伪静态网址;……
头一次见到把摘要写到最后的吧?
买域名,避开奸商,建议通过你熟悉的朋友介绍,不行就Google;若在国外买,可用支持美元的信用卡或PayPal付款;域名每年都要交钱的。买虚拟主机空间,避开奸商,建议通过你熟悉的朋友介绍,不行也不要随意Google,因为空间性能很重要,不试不知道;根据你的建站需求买相应的空间(静态?动态?需要多大?),国内分不同种类的空间,可能按大小收费,国外据我了解的HostMonster是没有大小限制的,一口价,敞开让你随便用,当然,总会受硬盘大小限制设置域名服务器或者A记录,指向主机通过FTP把网页文件传上去,然后访问你的新网站配置你的网站,通常可以登录网站后台作设置,平时做一些日常更新,看到眼红的功能也可以自己DIY出来如果你不得不在我英明神武的天朝购买虚拟主机,那么恭喜你还有最重要的一步,就是去英明神武的公衅部那里去备个鸟案,备案网址自己搜吧,能否备得上你自己烧香,我不管,一日不备案,一日网站不得运行,主机服务商会把你卡得死死的
有什么不清楚的请在下面穷追猛问,我会随时修改更新本文内容。本文叙述有诸多不严格的地方,但对新手来说不需了解那么多,因此没加说明。本文谢绝IT类网站转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1144812次
积分:19542
积分:19542
排名:第141名
原创:961篇
转载:777篇
评论:24条
(6)(2)(1)(2)(3)(14)(20)(117)(28)(13)(26)(30)(11)(36)(42)(41)(19)(30)(44)(51)(33)(20)(24)(26)(24)(54)(23)(53)(94)(106)(25)(68)(75)(91)(194)(125)(43)(61)(34)(10)(11)(17)
我的栏目测试网站建设 | 小橘子D dorange当前位置: >
mysql数据库存储过程及调用方法
时间: && 来源:服务器之家 && 投稿:root
5.0以后就支持存储过程了,目前的6.0Alpha版也已经推出。6.0不仅支持大型数据库如oracle等的绝大部分功
能,如存储过程、视图、触发器、job等等,而且修正了这些功能所存在的bug,其中6.0.1还支持64位windows,以及表空间。
在c/c++中访问mysql,常见的只是一些简单的业务,使用c中嵌入简单的查询、
插入、更新等操作即可。随着业务的复杂化,完成一个业务功能需要非常多的sql操作环节,把这些语句都嵌入c代码中会导致c代码越来越繁琐、不清晰,这时
候,自然就想到了存储过程来封装所有的数据库逻辑,通过c简单调用mysql存储过程接口即可达到目的,极大地减轻了c程序员的工作量,也便于前端业务处
理逻辑与数据库处理逻辑的分离。下面就介绍c语言调用存储过程的简单的方法。
1、首先创建一张表
用于存放用户信息
Create table student(
&&&&& id int auto_increment,
&&&&& name varchar(20),
&&&&& age tinyint,
&&&&& remark varchar(50),
&&&&& &primary key(id)
2、插入几条信息
Insert into student values(1,"zhouys",90, "");
3、查看用户信息
mysql& select *
+------+-----------+------+----------+
| id&& | name&& | age&| remark |
+------+-----------+------+----------+
|&&& 1 | zhouys |&& 90
|&&&&&&& |
+------+-----------+------+-----------+
1 row in set (0.00 sec)
4、创建存储过程
delimiter //
create procedure querystudent(
&&&&&& in in_id int ,&&
#0-&字符id 1-数字id&&&&
&&&&&& out out_ret
int,&&&&&&&&&&&&&&&
#&返回结果
&&&&&& out out_name
varchar(20),&&&&&&&
&&&&&& out out_age
&&int&&&&&&&&&
#&年龄&&&&
label_a:begin
&&&&&& declare v_name varchar(20)
&&&&&& declare v_
&&&&&& #&参数判断
&&&&&& if (in_id&=0) then
set out_ret=-1; #id error
leave label_a;
&&&&&& SELECT name,age into
v_name,v_age from student where id=in_id limit 1;
&&&&&& if v_age is NULL then
set out_ret=-2; #don't found
leave label_a;
&&&&&& end
&&&&&& set out_ret=0;
&&&&&& set out_name=v_
&&&&&& set out_age=v_
5、c语言调用存储过程
调用方法或步骤:
5.1&、初始化&Mysql&句柄
if(!mysql_init(&mysql))
printf("mysql_init failed!/n");
&&&&&& return 0;
5.2&、连接到&mysql
//login or connect
if(!mysql_real_connect(&mysql,"localhost","root","","billingdb",0,NULL,CLIENT_MULTI_STATEMENTS))
printf("mysql_real_connect() failed!/n");
mysql_close(&mysql);
5.3&、调用存储过程
&&&&&& //call
&&&&&& strcpy(query,"call
querystudent (1,@ret,@out_name,@out_age)");
&&&&&& printf("query
sql=[%s]/n",query);
mysql_real_query(&mysql,query,(unsigned int)strlen(query));
5.4&、查询结果集并保存
mysql_query(&mysql, "SELECT @ret,@ out_name,@ out_age
&&&&&& //get result
&&&&&& if (ret)
printf("Error exec query: %s/n",mysql_error(&mysql));
printf("[%s] exec.../n", query);
&&&&&& results =
mysql_store_result(&mysql);
5.5&、获取查询结果
while((record = mysql_fetch_row(results))) {
printf("[%s]-[%s]-[%s]/n", record[0], record[1],record[2]);
一般存储过程只会有一行的返回结果,^_^.
5.6&、释放资源与&mysql&连接句柄
mysql_free_result(results);
mysql_close(&mysql);
Mysql&存储过程可以实现相当强大的功能,这里只是抛砖引玉的做一些实践,期望能够给大家一些帮助。也欢迎大家交流…
----------------------------------------------------------------------------------------------------------------------------
Mysql&存储例程的使用
&&& 一、&简介
&&& 存储过程(Stored
Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
&&&&虽然常用术语是存储过程(stored
procedure),但MySQL实际上实现了两中类型,除了存储过程外,还有存储函数(stored
routine),它们统称为存储例程。
&&&& 二、基本格式
1、存储过程
&&CREATE PROCEDURE&过程名&([过程参数[,...]])
&&[特性&...]&过程体
如创建: CEATE PROCEDURE p1 (a INT)
调用一下:CALL p1(8);&&
1 row in set (0.00 sec)
2、存储函数
&&CREATE FUNCTION&函数名&([函数参数[,...]])
&&RETURNS&返回类型
&&[特性&...]&函数体
如创建:CREATE FUNCTION f1 (x INT)
RETURNS INT
x;&&&&&&&/*&过程函数一次只能返回一个值
调用一下:SELECT f1 (3);
1 row in set (0.00 sec)
3、过程参数
&&[ IN | OUT | INOUT ]&参数名 参数类型
4、函数参数
&&参数名 参数类型
5、返回类型
&&有效的MySQL数据类型即可
6、过程体/函数体格式如下
有效的SQL语句
7、特性(一般不要求)
LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'
8、存储过程中参数的IN,OUT,INOUT类型
&&&&存储过程可以接受输入参数,并把参数返回给调用方。不过,对于每个参数,需要声明其参数名、数据类型,还要指定此参数是用于向过程传递信息,还是从过程传回信息,或是二者兼有。
&&&&为声明参数的作用,使用如下3个关键字之一:
&IN :&&IN参数只用来向过程传递信息,为默认值。
&OUT : OUT参数只用来从过程传回信息。
&INOUT&:&INOUT参数可以向过程传递信息,如果值改变,则可再从过程外调用。
如果仅仅想把数据传给&MySQL&存储过程,那就使用“in”&类型参数;如果仅仅从&MySQL&存储过程返回值,那就使用“out”&类型参数;如果需要把数据传给&MySQL&存储过程,还要经过一些计算后再传回给我们,此时,要使用“inout”&类型参数。
对于任何声明为OUT或INOUT的参数,,当调用存储过程时需要在参数名前加上@符号,这样该参数就可以在过程外调用了。
下面举三个实例:
MySQL&存储过程&“in”&参数:跟&C&语言的函数参数的值传递类似,&MySQL&存储过程内部可能会修改此参数,但对&in&类型参数的修改,对调用者(caller)来说是不可见的(not
visible)。
create&procedure&pr_param_in
&&&in&id&int&--&in&类型的&MySQL&存储过程参数
&&&if&(id&is&not&null)&then
&&&&&&set&id&=&id&+&1;
&&&select&id&as&id_
set&@id&=&10;
call&pr_param_in(@id);
select&@id&as&id_
mysql&&call&pr_param_in(@id);
+----------+
|&id_inner&|
+----------+
|&&&&&&&11&|
+----------+
mysql&&select&@id&as&id_
+--------+
|&id_out&|
+--------+
|&10&&&&&|
+--------+
可以看到:用户变量&@id&传入值为&10,执行存储过程后,在过程内部值为:11(id_inner),但外部变量值依旧为:10(id_out)。
MySQL&存储过程&“out”&参数:从存储过程内部传值给调用者。在存储过程内部,该参数初始值为&null,无论调用者是否给存储过程参数设置值。
create&procedure&pr_param_out
&&&out&id&int
&&&select&id&as&id_inner_1;&&&&/*&id&初始值为&null*/
&&&if&(id&is&not&null)&then
&&&&&&set&id&=&id&+&1;
&&&&&&select&id&as&id_inner_2;
&&&&&&select&1&into&
&&&select&id&as&id_inner_3;
set&@id&=&10;
call&pr_param_out(@id);
select&@id&as&id_
mysql&&set&@id&=&10;
mysql&&call&pr_param_out(@id);&&&&/*外部变量不能传给存储过程*/
+------------+
|&id_inner_1&|
+------------+
|&&&&&&&NULL&|
+------------+
+------------+
|&id_inner_3&|
+------------+
|&&&&&&&&&&1&|
+------------+
mysql&&select&@id&as&id_&&/*过程将改变的值传给外部变量*/
+--------+
|&id_out&|
+--------+
|&1&&&&&&|
+--------+
可以看出,虽然我们设置了用户定义变量&@id&为&10,传递&@id&给存储过程后,在存储过程内部,id&的初始值总是&null(id_inner_1)。最后&id&值(id_out
= 1)传回给调用者。
MySQL&存储过程&inout&参数跟&out&类似,都可以从存储过程内部传值给调用者。不同的是:调用者还可以通过inout&参数传递值给存储过程。
drop&procedure&if&exists&pr_param_
create&procedure&pr_param_inout
&&&inout&id&int
&&&select&id&as&id_inner_1;&&--&id&值为调用者传进来的值
&&&if&(id&is&not&null)&then
&&&&&&set&id&=&id&+&1;
&&&&&&select&id&as&id_inner_2;
&&&&&&select&1&into&
&&&select&id&as&id_inner_3;
set&@id&=&10;
call&pr_param_inout(@id);
select&@id&as&id_
mysql&&set&@id&=&10;
mysql&&call&pr_param_inout(@id);
+------------+
|&id_inner_1&|
+------------+
|&&&&&&&&&10&|
+------------+
+------------+
|&id_inner_2&|
+------------+
|&&&&&&&&&11&|
+------------+
+------------+
|&id_inner_3&|
+------------+
|&&&&&&&&&11&|
+------------+
mysql&&select&@id&as&id_
+--------+
|&id_out&|
+--------+
|&11&&&&&|
+--------+
从结果可以看出:我们把&@id(10),传给存储过程后,存储过程最后又把计算结果值&11(id_inner_3)传回给调用者。&MySQL&存储过程&inout&参数的行为跟&C&语言函数中的引用传值类似。
通过以上例子:如果仅仅想把数据传给&MySQL&存储过程,那就使用“in”&类型参数;如果仅仅从&MySQL&存储过程返回值,那就使用“out”&类型参数;如果需要把数据传给&MySQL&存储过程,还要经过一些计算后再传回给我们,此时,要使用“inout”&类型参数。
9、声明和设置变量
(1) 声明变量
&&&在存储例程使用局部变量之前,必须声明局部变量,变量声明通过DECLARE语句实现,其原型如下:
&&&DECLARE variable_name TYPE ;
如:DECLARE x VARCHAR(254);
&&&在声明变量时,声明必须放在BEGIN/END块中。此外声明必须在执行该块任何其它语句之前进行。
(2) 设置变量
SET语句用来设置声明的存储例程变量值。其原型如下:
SET&&variable_name =
如下声明和设置变量过程:
&&DECLARE&&x&∫
SET&&x = 155;
也可使用SELECT…..INTO语句设置变量。
SELECT&&155&&INTO&&x;
当然,此变量是声明该变量的BEGIN/END块作用范围内的一个局部变量。如果希望在存储例程外使用此变量,需要将其作为OUT变量传递。
10、执行存储例程
&&&&执行存储例程一般是通过CALL和SELECT语句来完成的。
&&&&三、多语句存储例程
单语句存储例程非常有用,但存储例程的真正功能在于它能够封装和执行多个SQL语句。
下面介绍创建多语句存储例程时常用的语法。
& 1、BEGIN和END
当创建多语句存储例程时,需要将语句包围在BEGIN/END块中。
此块的原型如下:
&&&&&statement 1;
&&&&&statement 2;
&&&&&statement N;
注意,块中每条语句必须以分号结尾。
&2、条件语句
&IF-ELSEIF-ELSE语句
&和C语言中if语句相似。
其原型如下:
IF condition1 THEN
statement1;
ELSEIF condition2 THEN
Statement2;
需要比较一组可能的值时CASE语句很有用。也是一种条件判断语句。
其原型如下:
WHEN condition1 THEN statement1;
WHEN condition2 THEN statement2;
有些任务需要能够重复地执行一组语句。下面介绍能够迭代执行和退出循环的各种方法。
&ITERATE语句
执行ITERATE语句将使嵌入该语句的LOOP、REPEAT或WHILE循环返回顶部,并在此执行。
其原型如下:
ITERATE&&label
&LEAVE语句
在得到变量的值或特定任务的结果后,可能希望通过LEAVE命令立即退出循环或BEGIN/END块。
其原型如下:
LEAVE&&label
LOOP语句将不断的迭代处理定义在其代码块中的一组语句,直到遇到LEAVE为止。
其原型如下:
[begin_label:]&&LOOP
&&&Statement_list
END LOOP&&[end_label]
&&&&&&&REPEAT语句
&REPEAT语句在操作上几乎与WHILE相同,很想C语言中的DO….WHERE语句。
&&&&&&其原型如下:
&&&&&&&Statement_list
&UNTIL condition
&END REPEAT
&WHILE语句
&其原型如下:
& WHILE condition DO
&&&&Statement_list
&&&&& &&END WHILE
下面写一个循环语句的存储过程:
DELIMITER $$
DROP PROCEDURE IF EXISTS `yyw`.`p2` $$
CREATE PROCEDURE `yyw`.`p2` ()
&&&&&&&&declare v
&LOOP_LABLE:loop
&&&&&&&&&&if
&&&&&&set v=v+1;
&&&&&&ITERATE LOOP_LABLE;
&&&insert into vs
values(v);&&&&&&&&&&/*将循环值插入数据表vs中*/
&&&set v=v+1;
&&&if v&=5 then
&&&&&leave LOOP_LABLE;
DELIMITER ;
&&& 四、从另一个例程中调用例程
DELIMITER //
CREATE PROCEDURE&&p1()
&&&Statement_list
CREATE PROCEDURE&&p2()
&&&Statement_list
CREATE PROCEDURE&&p3()
&&&CALL&&p1();
&&&CALL&&p2();
注意:直接采用MySQL的Administrator管理器编辑时,可以直接采用函数文本录入;
&&&&但若在脚本中自动导入存储过程或函数时,由于MySQL默认以";"为分隔符,则过程体的每一句都被MySQL以存储过程编译,则编译过程会报错;所以要事先用DELIMITER关键字申明当前段分隔符
用完了就把分隔符还原。 如下所示:
DELIMITER&$$
Stored Procedures and Functions
DELIMITER ;
&&& 五、删除和查看存储例程
1、删除存储例程
要删除存储例程,可以执行DROP语句。
其原型如下:
&DROP&&(PROCEDURE|FUNCTION)&&P_
&& 2、查看例程状态
其原型如下:
SHOW&&(PROCEDURE|FUNCTION)&&STATUS&&LIKE&&‘P_name’
SHOW&&PROCEDURE&&STATUS&&LIKE&&‘P3’/G;
注意:&使用/G选项以垂直格式显示输出信息。
&& 3、查看例程的创建语法
&&&通过SHOW CREATE语句可以查看创建特定例程所用的语法。
&& 其原型如下;
&&&&& SHOW
CREATE&&(PROCEDURE|FUNCTION)&&Db_name.P_name
&&& 六、实例
&& 一般在MySQL Query Browser中更方便的创建存储过程及修改内容。
(1)简单的加法运算
DELIMITER $$
DROP PROCEDURE IF EXISTS `yyw`.`p4` $$
CREATE DEFINER=`yang`@`10.10.19.161` PROCEDURE `p4`(a int,b
&&&declare c
&&&&&&&&&&&&&/*声明的变量
if a is null
then&&&&&&&&&&&&/*IF语句&&
&&&&&&set a = 0;
if b is null then
&&&&&&set b = 0;
set c = a +
select c as
&&&&&&&&&&/*结果显示c的值
DELIMITER ;
调用以下:CALL&&p4(3,4);
1 row in set (0.00 sec)
(2)存储过程中的循环语句、数据表数据的导入导出及SQL函数的使用
DELIMITER $$
DROP PROCEDURE IF EXISTS `yyw`.`p4` $$
CREATE DEFINER=`yang`@`10.10.19.161` PROCEDURE ‘pro_prime2’(in
& declare i,j,x,y int default
0;&&&&/*声明变量并默认为0*/
&&&&& select&&yywID into j from
text1;&&/*从数据表txte1中字段yywID的值赋给变量j*/
&&&&& select 'count
',j;&&&&&&&&&&&/*显示count字符和j的值*/
&&&&& while i&num
do&&&&&&&&&&/*while……do循环语句*/
&&&&&&&& set x=2;
&&&&&&&& pp1:while
x&=sqrt(j) do&&&&/*调用内部函数SQRT用于求平方*/
then&&&&&&&&&&&&&&&/*if循环语句*/
leave pp1;
set x=x+1;
&&&&&&&& if y=1 then
&&&&&&&&&& set
&&&&&&&& else
&&&&&&&&&& set
&&&&&&&&&& insert
into text2 values(j);&&&&/*将j的值插入数据表text2*/
&&&&&&&&&& set
j=j+1;&&&&&&&&&&&&/*实现j的自增*/
DELIMITER ;
假如原先在数据库中分别建立表text1和text2,text1中有一个字段初始值为3,text2为空;
下面执行一下此存储过程:
mysql& CALL pro_prime2(5);
+--------+------+
| count&&| j&&&&|
+--------+------+
| count&&|&&&&3 |
+--------+------+
1 row in set (0.00 sec)
mysql& select *from text2;
5 rows in set (0.00 sec)
(3)用存储过程实现计算数据库中某个成绩表总分及平均分,并且调用过程后
能够自动显示基本信息(如学号、姓名、总分、平均分等)。
&&&&首先在数据库中建一个成绩表(命名为chengjibiao)如下:
+-----+------+--------+-------+--------+
| NUM | Name | Enlish | Maths | Physis |
+-----+------+--------+-------+--------+
|&& 1 |&杨业&| 92&&&& |
87&&& | 96&&&& |
|&& 2 |&剑锋 | 82&&&& |
98&&& | 93&&&& |
|&& 3 |&张美 | 96&&&& |
86&&& | 94&&&& |
|&& 4 |&张文 | 76&&&& |
99&&& | 95&&&& |
|&& 5 |&叶倩 | 97&&&& |
86&&& | 88&&&& |
|&& 6 |&方文 | 87&&&& |
96&&& | 94&&&& |
|&& 7 |&李丽 | 97&&&& |
86&&& | 83&&&& |
|&& 8 |&贾宇 | 67&&&& |
89&&& | 77&&&& |
|&& 9 |&王勃 | 89&&&& |
67&&& | 75&&&& |
|& 10 |&刘三 | 85&&&& |
78&&& | 95&&&& |
+-----+------+--------+-------+--------+
&&用SQL语句写存储过程p1&&&&&
&&&&&&&&&&&&&&&&&DELIMITER
DROP PROCEDURE IF EXISTS `yyw`.`p1` $$
&&&&&&&&&&&&&&&&CREATE
DEFINER=`yang`@`10.10.19.161` PROCEDURE `p1`(N int)
&&&&&&&&&&&&&&&&declare
&&&&&&&&&&&&&&&&&&/*&&&&变量的声明&&&*/
&&&&&&&&&&&&&&&&declare
f char(100);
declare g decimal(4,2);
create table zongping (NUM int,Name char(255),Enlish int,Maths
int,Physis int,Total int,aver
decimal(&&&&&&&
4,2));&&&&&&&&&&&&&&&&&&&&&/*&&建一个数据表以存放要显示的内容*/
repeat&&&&&&&&&&&&&&&&&/*&引进一个REPEAT循环,来计算每位学生总分及平均分*/
select&&Enlish,Maths,Physis,Name into a,b,c,f from
chengjibiao where NUM=e;
/*&导出数据库chengjibiao中的三门成绩及姓名,并把它们分别赋给变量a,b,c,f;*/
d=a+b+c;&&&&&&&&&/*求和*/
set g=(a+b+c)/3;&&&&&&/*求平均分*/
insert into zongping (NUM,Name,Enlish,Maths,Physis,Total,aver)
values (e,f,a,b,c,d,g);
&&&&&&&&&&&&&&&&&/*将学号,姓名,三门成绩,总分,平均分的数据插入新建的数据表zongping中
e=e+1;&&&&&&&/*该条件可结束循环*/
e=N&&&&&&/*N是调用存储过程时根据学生数目来设定的*/
&select *from
&&&&&&&&&&&/*&以数据表的形式显示运行结果*/
&&&&&&&&&&&&&&&drop
&&&&&&&&&&/*显示结果后删除表,也可不删*/
DELIMITER ;
&&l&调用存储过程
(11);&&&&&&&&&&/*&因为原成绩表中有10列数据&,故设N=11,也可根据不同的成绩表另设
&&&&&&&显示结果如下:
&&&+------+------+--------+-------+--------+-------+
&| Name | Enlish | Maths | Physis | Total | Aver&
+------+------+--------+-------+--------+-------+-------+
|&&& 1 |&杨业&|&&&& 92
|&&& 87 |&&&& 96 |&&
275 | 91.67 |
|&&& 2 |&剑锋 |&&&& 82
|&&& 98 |&&&& 93 |&&
273 | 91.00 |
|&&& 3 |&张美 |&&&& 96
|&&& 86 |&&&& 94 |&&
276 | 92.00 |
|&&& 4 |&姜文 |&&&& 76
|&&& 99 |&&&& 95 |&&
270 | 90.00 |
|&&& 5 | 叶倩&|&&&& 97
|&&& 86 |&&&& 88 |&&
271 | 90.33 |
|&&& 6 |&方文 |&&&& 87
|&&& 96 |&&&& 94 |&&
277 | 92.33 |
|&&& 7 |&李丽 |&&&& 97
|&&& 86 |&&&& 83 |&&
266 | 88.67 |
|&&& 8 |&贾宇 |&&&& 67
|&&& 89 |&&&& 77 |&&
233 | 77.67 |
|&&& 9 |&王勃 |&&&& 89
|&&& 67 |&&&& 75 |&&
231 | 77.00 |
|&& 10 |&刘三 |&&&& 85
|&&& 78 |&&&& 95 |&&
258 | 86.00 |
+------+------+--------+-------+--------+-------+-------+
------------------------------------------------------------------------------------------------------------------------------------------
1.&数据库名:test&;
&&字段:Id& int , Name char , English
int , Maths int , P&
2.&存储过程:
DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`query` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE
`query`( in N int, out s char(254) )
& declare a,b,c,d,
& declare f char(100);
& declare g decimal(4,2);
& set e=1;
& drop tabl
& create table zongping(NUM int,Name
char(255),English int,Maths int,Physis int,Total int,aver
decimal(4,2));
& select English,Maths,Physis,Name into
a,b,c,f from chengjibiao where Id=e;
& set d=a+b+c;
& set g=(a+b+c)/3;
& insert into
zongping(NUM,Name,English,Maths,Physis,Total,aver) values(
e,f,a,b,c,d,g );
& set e=e+1;
& until e=N
& select *
DELIMITER ;&
3.&主函数(在文件main.c&中):
#include "stdio.h" #include "stdlib.h" #include "string.h" #include
"/usr/include/mysql/mysql.h" #include
"/usr/include/mysql/mysql_version.h" #include
"/usr/include/mysql/errmsg.h"
int main( int argc,char **argv[] ) { MYSQL MYSQL_ROW
results, char query[50],s[254]; /** 链接数据库 **/
if(!mysql_init(&mysql)) { printf("mysql_init failed!/n");
return 0; }
if(!mysql_real_connect(&mysql,"localhost","root","123456","test",0,NULL,CLIENT_MULTI_STATEMENTS))
{ printf("mysql_real_connect() failed!/n");
mysql_close(&mysql); return 0; }
/** 调用存储过程 **/ strcpy(query,"call query(7,@s)");
mysql_real_query(&mysql,query,(unsigned int)strlen(query)); /**
取得存储过程返回值 **/ mysql_query(&mysql, "SELECT @s "); results =
mysql_store_result(&mysql);
/** 输出返回值 **/ printf( "Id Name Maths English Physis Total aver/n"
); while((record = mysql_fetch_row(results))) {
printf("%1s%10s%8s%12s%11s%10s%10s/n", record[0],
record[1],record[2],record[3],record[4],record[5],record[6]); }
mysql_free_result(results); mysql_close(&mysql); return 0; }
(编译:gcc -o main main.c -L/usr/lib/mysql/
-lmysqlclient -lz&)
+----+-------+-------+---------+--------+
| Id | Name&&| Maths | English | Physis
+----+-------+-------+---------+--------+
liu&&&&|&&&&90
|&&&&&86 |
|&&2 | zhang |&&&&88
|&&&&&87 |
xiao&&|&&&&78
|&&&&&98 |
wang&&|&&&&77
|&&&&&97 |
li&&&&|&&&&79
|&&&&&99 |
yi&&&&|&&&&67
|&&&&&87 |
运行程序得到的结果:
Id&&&&Name&&&Maths&&&English&&&Physis&&Total&&&&&&aver
&&1&&&&liu&&&&&90&&&&&&&&&&80&&&&&86&&&&&256&&&&&85.33
&&2&&zhang&&&&&88&&&&&&&&&&86&&&&&87&&&&&261&&&&&87.00
&&3&&&xiao&&&&&78&&&&&&&&&&88&&&&&98&&&&&264&&&&&88.00
&&4&&&wang&&&&&77&&&&&&&&&&87&&&&&97&&&&&261&&&&&87.00
&&5&&&&&li&&&&&79&&&&&&&&&&89&&&&&99&&&&&267&&&&&89.00
&&6&&&&&yi&&&&&67&&&&&&&&&&77&&&&&87&&&&&231&&&&&77.00
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#include "stdio.h" #include "stdlib.h" #include "string.h" #include
"/usr/include/mysql/mysql.h" #include
"/usr/include/mysql/mysql_version.h" #include
"/usr/include/mysql/errmsg.h" int main( int argc,char **argv[] ) {
MYSQL my_ MYSQL_RES * MYSQL_ROW
MYSQL_FIELD * int row, column,i,j; /** 链接数据库 **/
if(!mysql_init(&my_connection)) { printf("mysql_init
failed!/n"); return 0; }
if(!mysql_real_connect(&my_connection,"localhost","root","123456","yyw",0,NULL,CLIENT_MULTI_STATEMENTS))
{ printf("mysql_real_connect() failed!/n");
mysql_close(&my_connection); return 0; }
/*这句话是设置查询编码为utf8,这样支持中文*/ mysql_query(&my_connection, "set
names utf8"); /** 调用存储过程p1**/ mysql_real_query(&my_connection,
"call p1(11)", (unsigned int)strlen("call p1(11)")); /** 取得存储过程返回值
**/ results = mysql_store_result(&my_connection); if (results)
{ /*取得Y果的行数和*/ column = mysql_num_fields(results); row =
mysql_num_rows(results) + 1; printf("查询到 %lu 行/n", row);
/*输出Y果的字段名*/ for (i = 0; field = mysql_fetch_field(results); i++)
printf("%s/t", field-&name); printf("/n"); /*按行输出Y果*/ for (i =
1; i & i++) { record = mysql_fetch_row(results); for (j =
0; j & j++) printf("%s/t", record[j]); printf("/n"); } }
mysql_free_result(results); mysql_close(&my_connection); return
编辑一下:
[root@localhost home]# gcc -o&test test.c -L/usr/lib/mysql/
-lmysqlclient -lz
[root@localhost home]# ./test
查询到 10 行
NUM&&&& Name&&& Enlish&
Maths&& Physis& Total&& Aver
1&&&&&& 杨业&&&
92&&&&& 87&&&&&
96&&&&& 275&&&&
2&&&&&& 剑锋&&&
82&&&&& 98&&&&&
93&&&&& 273&&&&
3&&&&&& 张美&&&
96&&&&& 86&&&&&
94&&&&& 276&&&&
4&&&&&& 张文&&&
76&&&&& 99&&&&&
95&&&&& 270&&&&
5&&&&&& 叶倩&&&
97&&&&& 86&&&&&
88&&&&& 271&&&&
6&&&&&& 方文&&&
87&&&&& 96&&&&&
94&&&&& 277&&&&
7&&&&&& 李丽&&&
97&&&&& 86&&&&&
83&&&&& 266&&&&
8&&&&&& 贾宇&&&
67&&&&& 89&&&&&
77&&&&& 233&&&&
9&&&&&& 王勃&&&
89&&&&& 67&&&&&
75&&&&& 231&&&&
10&&&&& 刘三&&&
85&&&&& 78&&&&&
95&&&&& 258&&&&}

我要回帖

更多关于 输入法只能输入字母 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信