为什么连接MySQL总是BAD HANDSHAKE?

longmei 2005-07-11 05:04:13
首先声明,在JAVA和MySQL面前,本人是初级菜鸟。请高手们兼顾考虑任何可能的低级错误!
俺下载了一个JSP的JBuilder工程文件连同配置好的网站目录,是一本书自带光盘上的。想做个毕业设计啦,顺便研究一下JSP。按照说明建立好了MySQL数据库,项目文件中有一个类专门负责数据库连接。数据库连接用的是这样的:
能连上的话执行:
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnectio("jdbc:mysql://localhost:3306/hospital","root","");
Debug.log("Connecion created.");
否则抛出异常:
Debug.log(Debug.getExceptionMsg(ex));
在JSP页面中进行用户注册,无论我怎么连接在浏览器页面中都会出编译错误,而在LOG中都发现记录下来的异常:Communication link failure: Bad handshake
我试过更改MySQL的用户名密码,或者更改类中数据连接代码中的连接MySQl用户名密码,然后重新编译。结果都是Bad handshake。后来试了试用换用数据库连接驱动:org.gjt.mm.mysql.Driver,甚至用MYODBC驱动,都能一连就连上了。一时间让我兴奋不已。不过连上是连上了,下面的问题接踵而至,首先,有一个用户类,此类中有一个方法负责收集表单用户注册信息输入然后添加到数据库,用到了java.sql.statement的方法executeQuery(strSQL),结果表单输入可以正确反映到数据库中。也就是可以用户注册,而且用户注册后也可以登陆,但是登陆之后执行另外一项数据库操作时候,这时再一次抛出了异常,不过异常好像不是很严重,浏览器没有报出编译错误。这次调用的是Statement的addbatch()方法:org.gjt.mm.mysql.Statement.addBatch() Ln 849: Not implemented
结果,我在java.sql.statement类中发现了addbatch方法的定义,但是人家在Statement.java文件中好像并没提供此类的代码。而异常中说的org.gjt.mm.mysql中,我没找到statement类,只有在数据库驱动com.mysql.jdbc.Driver包中才有这个类。这是不是意味着如果使用org.gjt.mm.mysql.Driver包的话这个项目中的部分代码我就要重新写用来替换addbatch()方法,除此之外我只能使用com.mysql.jdbc.Driver包呢?而这个项目如果让我手动改动太多的话,我真的有些力不从心,呵呵,除非有那位人士出手向救,小妹真的感激不尽~~!
此外还有个小插曲,不知道对各位有没有帮助,这个项目中负责用户注册的类中关于用户密码添加到数据库中的部分有个password('" + Util.encode(password) + "')这样一个方法,结果造成我写进数据库的密码是加密的,但是登陆的时候确报密码错误,结果我只好把所有用到password()方法的地方都把password()方法去掉了,写进数据库的密码都是明文的,这样就可以登陆了,后来查到这个password()方法好像是MySQL的内置函数。
再一次恳请各位出手向救~教给我的,我保证努力学会!
...全文
4977 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenpipi 2005-08-18
  • 打赏
  • 举报
回复
以前碰见过你说的第一个问题,一般是旧的驱动不支持新的mysql的验证方式引起的.解决办法,一,让mysql使用旧的密码验证方式.二,就是你说的换新驱动.
longmei 2005-08-18
  • 打赏
  • 举报
回复
先给答案,还是数据库驱动的问题,换成了MySql官方提供的最新驱动mysql-connector-java-3.1.10-bin问题就解决了!回帖有些完,哈哈,不好意思,分还是要给的~~
Mybeautiful 2005-07-15
  • 打赏
  • 举报
回复
longmei(龙妹)
给分给答案啊....
shoulders 2005-07-15
  • 打赏
  • 举报
回复
接分。
longmei 2005-07-13
  • 打赏
  • 举报
回复
小妹谢谢上面的两位,问题我自己已经解决了,很快我会给出答案,回帖者都有分送,嘿嘿~~
longmei 2005-07-11
  • 打赏
  • 举报
回复
org.gjt.mm.mysql.Driver和com.mysql.jdbc.Driver都是MySQL提供的啊,但是好像org.gjt.mm.mysql.Driver支持的方法没有com.mysql.jdbc.Driver提供的多,所以才报org.gjt.mm.mysql.Statement.addBatch() Ln 849: Not implemented
这个错误的吧,我这样理解对吗?
off_line 2005-07-11
  • 打赏
  • 举报
回复
为啥子用第三方的数据库类呢,直接用java.sql包里的不行么?
Class.forName("org.gjt.mm.mysql.Driver");
String yoururl = "xxxxxxxxxxx";
DriverManager.getConnection(yoururl,"userID", "passwd");

Connection con .....
Statement stmt ....

这些sql包里不都有么
Mybeautiful 2005-07-11
  • 打赏
  • 举报
回复
给up一下...
Mysql数据库管理系统优化方案 首先,为了使一个系统更快,最重要的部分就是基础设计,不过有些东西是现有情况下 无法逾越的,比如说系统常见的瓶颈. 我所能想到的: 1:磁盘寻道能力,以高速硬盘(7200转/秒),理论上每秒寻道7200次.这是没有办法改变 的,优化的方法是----用多个硬盘,或者把数据分散存储. 2:硬盘的读写速度,这个速度非常的快,这个更容易解决-- 可以从多个硬盘上并行读写. 3:cpu.cpu处理内存中的数据,当有相对内存较小的表时,这是最常见的限制因素. 4:内存的限制.当cpu需要超出适合cpu缓存的数据时,缓存的带宽就成了内存的一个瓶 颈---不过现在内存大的惊人,一般不会出现这个问题. 第二步: (本人使用的是学校网站的linux平台(Linux ADVX.Mandrakesoft.com 2.4.3-19mdk )) 1:调节服务器参数 用shell>mysqld- help这个命令声厂一张所有mysql选项和可配置变量的表.输出以下信息: possible variables for option--set-variable(-o) are: back_log current value:5 //要求mysql能有的连接数量.back_log指出在mysql暂停接受连接的时间内有多少个连接 请求可以被存在堆栈中 connect_timeout current value:5 //mysql服务器在用bad handshake(不好翻译)应答前等待一个连接的时间 delayed_insert_timeout current value:200 //一个insert delayed在终止前等待insert的时间 delayed_insert_limit current value:50 //insert delayed处理器将检查是否有任何select语句未执行,如果有,继续前执行这些语句 delayed_queue_size current value:1000 //为insert delayed分配多大的队 flush_time current value:0 //如果被设置为非0,那么每个flush_time 时间,所有表都被关闭 interactive_timeout current value:28800 //服务器在关上它之前在洋交互连接上等待的时间 join_buffer_size current value:131072 //用与全部连接的缓冲区大小 key_buffer_size current value:1048540 //用语索引块的缓冲区的大小,增加它可以更好的处理索引 lower_case_table_names current value:0 // long_query_time current value:10 //如果一个查询所用时间大于此时间,slow_queried计数将增加 max_allowed_packet current value:1048576 //一个包的大小 max_connections current value:300 //允许同时连接的数量 max_connect_errors current value:10 //如果有多于该数量的中断连接,将阻止进一步的连接,可以用flush hosts来解决 max_delayed_threads current value:15 //可以启动的处理insert delayed的数量 max_heap_table_size current value:16777216 // max_join_size current value:4294967295 //允许读取的连接的数量 max_sort_length current value:1024 //在排序blob或者text时使用的字节数量 max_tmp_tables current value:32 //一个连接同时打开的临时表的数量 max_write_lock_count current value:4294967295 //指定一个值(通常很小)来启动mysqld,使得在一定数量的write锁定之后出现read锁定 net_buffer_length current value:16384 //通信缓冲区的大小-- 在查询时被重置为该大小 query_buffer_size current value:0 //查询时缓冲区大小 record_buffer current value:131072 //每个顺序扫描的连接为其扫描的每张表分配的缓冲区的大小 sort_buffer current value:2097116 //每个进行排序

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧