问题描述
本人初学jsp,写了一个论坛,使用的数据库为mysql,在实际的测试中(本机win7),发现jsp连接数据库极其缓慢,比如论坛的主页把所需的元素从mysql数据库中取出来需要整整5秒钟,更换sqlserver2005后(其他没有任何变化),连接速度明显加快,主页秒进。对此我感到非常不解,开始怀疑是jdbc驱动的问题,更新到最新版后问题依旧,难道mysql的性能跟sqlserver的差距这么大吗???以下是我写的BaseDao,用于与数据库交换importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;publicclassBaseDao{publicfinalstaticStringDRIVER="com.mysql.jdbc.Driver";publicStringURL="jdbc:mysql://localhost:3306/bbs?user=root&password=123";publicConnectioncon=null;publicPreparedStatementpstmt=null;publicResultSetrs=null;publicConnectiongetCon(){Connectioncon=null;try{Class.forName(DRIVER);System.out.println("正在注册驱动");}catch(ClassNotFoundExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();System.out.println("注册驱动异常");}try{con=DriverManager.getConnection(URL);System.out.println("正在连接数据库");}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();System.out.println("数据库连接异常");}returncon;}publicvoidcloseAll(Connectionconn,PreparedStatementpstmt,ResultSetrs){System.out.println("数据库正在尝试关闭...");if(rs!=null){try{rs.close();}catch(SQLExceptione){//TODOAuto-generatedcatchblockSystem.out.println("结果集关闭异常");e.printStackTrace();}}if(pstmt!=null){try{pstmt.close();}catch(SQLExceptione){//TODOAuto-generatedcatchblockSystem.out.println("pstmt关闭异常");e.printStackTrace();}}if(conn!=null){try{conn.close();}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();System.out.println("con关闭发生异常");}}}publicintexecuteSQL(Stringsql,StringgetValues[]){intresult=0;Connectionconn=null;PreparedStatementpstmt=null;try{conn=getCon();//获取数据库连接方法pstmt=conn.prepareStatement(sql);if(getValues!=null){for(inti=0;i<getValues.length;i++){pstmt.setString(i+1,getValues[i]);//i的值?}for(inti=0;i<getValues.length;i++){System.out.println(getValues[i]);}}result=pstmt.executeUpdate();//执行SQL语句System.out.println("正在执行executeSQL方法");}catch(Exceptione){System.out.println("executeSQL方法异常");//TODO:handleexception}finally{closeAll(con,pstmt,rs);}returnresult;}publicResultSetfindSQL(Stringsql,StringgetValues[]){//执行查询sql语句,不完善ResultSetrs=null;Connectioncon=null;PreparedStatementpstmt=null;if(getValues==null){try{con=getCon();pstmt=con.prepareStatement(sql);rs=pstmt.executeQuery();}catch(SQLExceptione){e.printStackTrace();System.out.println("执行findSQL语句异常(无条件)");}}else{try{con=getCon();pstmt=con.prepareStatement(sql);for(inti=0;i<getValues.length;i++){pstmt.setString(i+1,getValues[i]);System.out.println(getValues);}rs=pstmt.executeQuery();}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();System.out.println("执行findSQL语句出现异常(有条件)");}}returnrs;}}我百度+google很久了,依然没能解决问题,各位大大如果能帮忙解决,实在是不胜感激!!!
解决方案
解决方案二:
虽然mysql我没有用过,不过可以肯定的是,Mysql性能绝对不会比sqlserver差那么多。应该是你的mysql配置用问题,或其他原因。到网上取查查mysql调优方面的东东吧
解决方案三:
mysql没怎么用,同意一楼的说话,效率应该不会差
解决方案四:
MySQL属于小型数据库,虽然功能没有SQLorOracle等大型数据库强大,但是性能还是可以的。执行百万数据时,MySQL可是速度最快的了。
解决方案五:
试一下建立索引,换一个存储引擎?MYSQL应该比MSSQLSERVER快才对吧?
解决方案六:
MySQL属于小型数据库,性能应该没那么差。你看你的配置,同意一楼的说法
解决方案七:
MySQL属于小型数据库,虽然功能没有SQLorOracle等大型数据库强大,但是性能还是可以的。执行百万数据时,MySQL可是速度最快的了。
解决方案八:
该回复于2010-11-22 09:57:04被版主删除
解决方案九:
你没有使用数据库连接池,连接mysql时,生成connection比较花时间的,对同一个connection做多次查询,你会发现,就第一次建立connection的时候慢,到后面就快了
解决方案十:
楼上当真。。。。?你的意思是用JNDI技术或者配置属性文件连接mysql会快很多?那为什么同样的设置,sqlserver会那么快?
解决方案十一:
mysql还是挺快的,小巧灵活,估计是设置的原因