首先声明,在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的内置函数。
再一次恳请各位出手向救~教给我的,我保证努力学会!
--转自