我的问题是:自己机器上运行java代码,访问公司里的数据库,速度超慢。但访问自己机器上的数据库速度正常。请大家耐心再看几行,我能想到的都想到啦!实在郁闷。下面是排除掉的因素:
1.不是程序的问题,同样的程序在同事机器上访问同样的数据库就没有问题。
并且程序可以跑通,只是某一句执行需要5秒(后附详细信息)。
2.不是网络的问题,我直接ping数据库,连接时间<1秒。
3.换了2个版本的jdbc驱动程序,没有改善,并且同事也用同样的驱动。我是新手,但这个问题单位同事都帮看了也解决不了,实在太诡异了!求助大家。具体信息 jdk1.5 驱动 mysql-connector-java-3.1.12-bin.jar mysql-connector-java-5.0.5-bin.jar
数据库 MySQL Server 4.1.18
---------------------------
一个测试用的简单程序,在有注释的那两行中间那句,每次执行都需要5秒。但访问localhost就是瞬间
import java.sql.*;public class dbConn { public dbConn() {
super();
}public static void main(String[] args){
try {
Connection con;
Class.forName("com.mysql.jdbc.Driver");
System.out.println("333 -------->"+new java.util.Date()); //befroe getConnection
con = DriverManager.getConnection("jdbc:mysql://192.168.5.164/expdb?characterEncoding=utf-8", "expdb", ""); System.out.println("444 -------->"+new java.util.Date()); //after getConnection
Statement st = con.createStatement();
String sql="";
sql= "select name from device_model ";
ResultSet rs = st.executeQuery(sql);
while(rs.next()){
String name=rs.getString("name");
System.out.println("name is "+name);
}
if(rs!=null)rs.close();
if(st!=null)st.close();
if(con!=null)con.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
1.不是程序的问题,同样的程序在同事机器上访问同样的数据库就没有问题。
并且程序可以跑通,只是某一句执行需要5秒(后附详细信息)。
2.不是网络的问题,我直接ping数据库,连接时间<1秒。
3.换了2个版本的jdbc驱动程序,没有改善,并且同事也用同样的驱动。我是新手,但这个问题单位同事都帮看了也解决不了,实在太诡异了!求助大家。具体信息 jdk1.5 驱动 mysql-connector-java-3.1.12-bin.jar mysql-connector-java-5.0.5-bin.jar
数据库 MySQL Server 4.1.18
---------------------------
一个测试用的简单程序,在有注释的那两行中间那句,每次执行都需要5秒。但访问localhost就是瞬间
import java.sql.*;public class dbConn { public dbConn() {
super();
}public static void main(String[] args){
try {
Connection con;
Class.forName("com.mysql.jdbc.Driver");
System.out.println("333 -------->"+new java.util.Date()); //befroe getConnection
con = DriverManager.getConnection("jdbc:mysql://192.168.5.164/expdb?characterEncoding=utf-8", "expdb", ""); System.out.println("444 -------->"+new java.util.Date()); //after getConnection
Statement st = con.createStatement();
String sql="";
sql= "select name from device_model ";
ResultSet rs = st.executeQuery(sql);
while(rs.next()){
String name=rs.getString("name");
System.out.println("name is "+name);
}
if(rs!=null)rs.close();
if(st!=null)st.close();
if(con!=null)con.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
jdbc-odbc方式需要下载什么东西呢?我没用过这种方式
就是程序中会这样另外我在另外一台win2000的机器上装了tomcat作为我们的测试用服务器,
结果把程序考过去运行也是同样的问题,连数据库超慢。这2台机器都是我装的jdk和jdbc驱动,我怀疑是我哪里做错了,可是实在找不到
最后发现是jdk的问题,我把原来的jdk1.5卸载 重装jdk1.6就好了!
不过似乎同事们都用得1.5,我这样写的程序会不会跟他们不兼容呢?
还求大家帮我想想为什么,以及解决办法。重新归纳一下问题:
用jdk版本1.5.0.04就会出现0楼所述问题,最终发现用jdk1.6.0.05问题解决。
但是同事们用1.5的为什么没这个问题?还有是否会有不兼容问题,我如何跟他们一致?
因为在访问远程数据库的时候是要转发的,,有一种方法你可以,,你在本机上用服务建立个数据源,通过数据源连接远程的数据库,然后用程序连本机的数据源,,
要想从根本上解决这个问题,自己去看下MySQL Server 的远程访问的TCP/IP协议的实现