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

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

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上跑的这个程序)

[color=red] 解决方法是[/color]:在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


原文出自:http://anyuecq25.blog.163.com/blog/static/13864827320104353425613/

你可能感兴趣的:(Java)