为什么连接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的内置函数。
再一次恳请各位出手向救~教给我的,我保证努力学会!
...全文
5286 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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一下...

81,122

社区成员

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

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