一个jdbc的问题
最近做一个jsp的小系统,数据库是用的SQL server2000,我的系统配置是赛扬2G,256M内存,先下了微软的sqlserver的jdbc驱动,安装后设置好路径,并将三个jar同时拷贝到tomcat的lib目录中,运行倒没出什么问题,但发现运行速度奇慢(与以前运行asp相比).后来改用odbc-jdbc桥接,感觉速度快多了,可是好象一般推荐用第一种方法,可它的执行速度那么慢,这是怎么回事,请大侠指点一下,谢谢。那做项目时,应该哪种jdbc连接方式为好呢。 问题点数:20、回复次数:10Top
1 楼hsboy(PHP it!)回复于 2004-11-03 22:12:23 得分 0
是启动后第一次运行慢还是每次都很慢?数据源一开始要初始化的,而且程序第一次运行的时候要装载,要花时间嘛Top
2 楼chunhuizhao(第三范式)回复于 2004-11-03 22:39:58 得分 0
推荐用第一种方法,第二种方法不能跨平台Top
3 楼applecjn(苹果^-^)回复于 2004-11-04 01:14:25 得分 0
jdbc 推荐Top
4 楼Net8Java(男将╭ァM'r杜)回复于 2004-11-04 02:33:39 得分 0
当然是第一种方法好~!Top
5 楼Net8Java(男将╭ァM'r杜)回复于 2004-11-04 02:35:44 得分 7
如果是 第1次运行慢,那很正常啊!不光数据源要初始化,jsp也是以servlet的形式在运行的,servlet是长驻内存的~第一次运行慢,后面就会快多了!不用每次调用就创建一个实例。Top
6 楼pennymxb(马晓)回复于 2004-11-04 09:40:58 得分 8
5楼有理,强烈推荐JDBC,J-O桥有很多局限,现在已经很少用了,但是影响速度的问题有很多,需要楼主仔细研究,但是不能轻率的放弃相对先进的技术啊!!
推荐楼主学习一下HIBERNATE
共同进步!!Top
7 楼step123(策马扬鞭)回复于 2004-11-04 09:44:25 得分 0
你们说的第一次,是运行程序第一次,还是tomcat运行第一次?两种都试了感觉运行速度还是很慢,打开一个带有数据库连接的jsp文件,本机运行都要20秒,且好象不稳定,同样的页面odbc桥接只须两秒,真受不了。且有的页面只有后都才能打开。而且我装的已经是微软sql server sp3 jdbc驱动了。
我的是win2000 adv server.jdbc的连接代码是写在一个javabean里面,jsp要连接数据库就引用这个bean。
其中第一种方式的javabean代码如下:
package firm;
import java.sql.*;
public class firm
{
Connection conn = null ;
private Statement stmt=null;
ResultSet rs=null;
String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=I_d_system";
public firm()
{
try
{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
}
catch(ClassNotFoundException e1)
{
System.err.println("firm():"+e1.getMessage());
}
}
//<!--建立数据库连接及定义数据查询-->
public ResultSet executeQuery(String sql)
{
rs=null;
try
{
conn=DriverManager.getConnection(url,"sa","sa");//创建数据库连接对象
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
}
catch(SQLException ex)
{
System.err.println("aq.executeQuery:"+ex.getMessage());
}
return rs;
}
//<!--定义数据操作-->
public void executeUpdate(String sql)
{
stmt=null;
rs=null;
try
{
conn=DriverManager.getConnection(url,"sa","sa");
stmt=conn.createStatement();
stmt.executeQuery(sql);
stmt.close();
conn.close();
}
catch(SQLException ex)
{
System.err.println("aq.executeQuery:"+ex.getMessage());
}
}
//<!--关闭数据库连接-->
public void closeStmt()
{
try
{
stmt.close();
}
catch(SQLException e)
{
e.printStackTrace();
}
}
public void closeConn()
{
try
{
conn.close();
}
catch(SQLException e)
{
e.printStackTrace();
}
}
}
麻烦大虾帮我看一下,谢谢。
Top
8 楼yangjiyue(yangjiyue)回复于 2004-11-04 09:44:34 得分 0
upTop
9 楼NetSniffer(扑克)回复于 2004-11-04 11:15:29 得分 0
却是有这个问题Top
10 楼sailor11(sailor)回复于 2004-11-05 14:13:42 得分 5
你不要每次执行操作都新建一个连接呢,还有不要用Statement对象,改用PreparedStatement对象执得操作。Top




