RSS订阅悠然探索,悠然索取
你的位置:首页 » JAVA » 正文

JDBC连接远程SQLSERVER速度超慢的问题解决

选择字号: 超大 标准 发布时间:2013-3-28 14:39:48 | 作者:admin | 0个评论 | 人浏览

 利用JDBC访问远程SQLSERVER速度慢,这个事情让我难受好久了,今天终于上网查找到解决方案了(当然这段代码还是执行存储过程的方法之一)

主要是IP地址问题,如果换成机器名快对了。

 

 

import java.sql.*;

public class DBTestProcedure {

 DBTestProcedure() {
 }
 public static void main(String args[]) {

  try{
   Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
   //   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
   
   long   startTime   =   System.currentTimeMillis();  

   //   String url="jdbc:odbc:20SQL"; //20SQL是在172.18.10.134上建的连接172.18.0.20的DSN

   String url="jdbc:microsoft:sqlserver://172.18.0.20:1433;DatabaseName=StuCourse";
   String user = "***";
   String password = "*****";
   Connection dbConn = DriverManager.getConnection(url, user, password);
 

   CallableStatement proc=dbConn.prepareCall("{?=call selectcourse(?,?)}"); //执行存储过程
   proc.registerOutParameter(1, java.sql.Types.INTEGER);//返回值
   proc.setString(2, "200802345"); //准备参数1
   proc.setString(3, "7");//准备参数2
   proc.execute();
   int result=proc.getInt(1);
   //if(result==1)
   //{
    System.out.println(result);
   //}
    
             long   endTime   =   System.currentTimeMillis();   
             System.out.println("****cost   time:"+((endTime-startTime))+"ms***");  

  }
  catch(Exception ex)
  {
   ex.printStackTrace();
  }
 }

}

上面这个代码,连接本地计算机的SQLSERVER很快<30ms,或者通过ODBC连接远程也很快<30ms,可直接用指定IP的方式访问远程计算慢得不得了,>6000ms,后来上网查到原因了,原来是

原来server_name(本例子中是172.18.0.20)的问题,程序访问172.18.0.20时,把它当成里机器名称进行解析,长时间没结果最后才访问了IP为172.18.0.20。 (我是在172.18.10.134上跑的这个程序)

       解决方法是:在WEB服务器的C:\WINDOWS\system32\drivers\etc\HOSTs表中添加一条

172.18.0.20    172.18.0.20
 这下快多了,<60ms,搞不明白,除了hosts文件还有其它方法没有,万一服务器不是我的怎么办?

-- 创建存储过程
alter PROCEDURE SelectCourse

 @Sno [char](10),
 @Cno [char](4)
)
AS
 DECLARE @ReturnValue int -- 返回操作结果
 SET @ReturnValue = 81

 

begin
 begin tran
  insert into sc(Sno,Cno) values(@Sno,@Cno)
  Update Course Set num=num-1 where Cno=@Cno
 
 if @@ERROR=0 
  begin
   commit     
   set @ReturnValue=1
  end
 else
  begin
   rollback
   set @ReturnValue=0
  end
select @ReturnValue
Return @ReturnValue

 

标签:

猜你喜欢

发表评论

必填

选填

选填

必填,不填不让过哦,嘻嘻。

记住我,下次回复时不用重新输入个人信息

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。