JTDS 连接远程服务器失败
JTDS connect to remote server fail
不知道为什么,当应用程序连接到与设备位于同一网络的 SQL 服务器时,我可以毫无问题地连接到它,但现在我需要从设备通过互联网连接到 SQL 服务器,无法正常工作,不知道为什么。我有一个按钮来测试连接,它会调用一个包含这个的方法,该方法在后台 (AsyncTaskRunner)
try
{
String host, port, dbname, user, password, instance;
host = _editTextHost.getText().toString();
port = _editTextPort.getText().toString();
instance = _editTextInstance.getText().toString();
dbname = _editTextDbName.getText().toString();
user = _editTextUser.getText().toString();
password = _editTextPass.getText().toString();
String driver = "net.sourceforge.jtds.jdbc.Driver";
String conString;
if (TextUtils.isEmpty(port))
{
conString = "jdbc:jtds:sqlserver://" + host + ";databaseName=" + dbname + ";instance=" + instance;
}
else
{
conString = "jdbc:jtds:sqlserver://" + host + ":" + port + ";databaseName=" + dbname + ";instance=" + instance;
}
Connection con;
Class.forName(driver);
con = DriverManager.getConnection(conString, user, password);
con.close();
conSuccess = true;
}
catch (Exception e)
{
e.printStackTrace();
Log.e("SQLConfig", "Fail to connect");
Log.e("SQLConfig", e.toString());
Log.e("SQLConfig", e.getMessage());
}
return null;
当我尝试连接到同一网络上的 SQL 服务器时没有任何问题,但是当我在设备上激活 4g 时,我总是遇到同样的错误,它找不到实例。但是,如果我使用相同的信息通过 "SQL Server Management Studio" 连接到服务器,我可以毫无问题地连接到服务器。
我正在使用 jtds 驱动程序 1.3.1。
这是怎么回事?谢谢
P.S。我都读过一些关于网络服务的东西,但我想暂时删除这个选项
编辑 1:澄清一下,我可以使用程序 Windows CE 或 SQL Server Management Studio 版本的凭据连接到服务器。当我将外部 IP 和所有需要的信息连接到服务器时,它只连接到 Android
好吧,通过稍微更改 conString,我可以毫无问题地从本地网络或互联网进行连接。
if (TextUtils.isEmpty(port))
{
conString = "jdbc:jtds:sqlserver://" + host + ";databaseName=" + dbname + ";instance=" + instance;
}
else
{
conString = "jdbc:jtds:sqlserver://" + host + ":" + port + ";databaseName=" + dbname + ";instance=" + instance;
}
到
if (TextUtils.isEmpty(port))
{
conString = "jdbc:jtds:sqlserver://" + host + "/" + instance + ";DatabaseName=" +dbname;
}
else
{
conString = "jdbc:jtds:sqlserver://" + host + ":" + port + "/" + instance + ";DatabaseName=" + dbname;
}
现在可以毫无问题地使用 public 主机或本地网络访问数据库。
不知道为什么,当应用程序连接到与设备位于同一网络的 SQL 服务器时,我可以毫无问题地连接到它,但现在我需要从设备通过互联网连接到 SQL 服务器,无法正常工作,不知道为什么。我有一个按钮来测试连接,它会调用一个包含这个的方法,该方法在后台 (AsyncTaskRunner)
try
{
String host, port, dbname, user, password, instance;
host = _editTextHost.getText().toString();
port = _editTextPort.getText().toString();
instance = _editTextInstance.getText().toString();
dbname = _editTextDbName.getText().toString();
user = _editTextUser.getText().toString();
password = _editTextPass.getText().toString();
String driver = "net.sourceforge.jtds.jdbc.Driver";
String conString;
if (TextUtils.isEmpty(port))
{
conString = "jdbc:jtds:sqlserver://" + host + ";databaseName=" + dbname + ";instance=" + instance;
}
else
{
conString = "jdbc:jtds:sqlserver://" + host + ":" + port + ";databaseName=" + dbname + ";instance=" + instance;
}
Connection con;
Class.forName(driver);
con = DriverManager.getConnection(conString, user, password);
con.close();
conSuccess = true;
}
catch (Exception e)
{
e.printStackTrace();
Log.e("SQLConfig", "Fail to connect");
Log.e("SQLConfig", e.toString());
Log.e("SQLConfig", e.getMessage());
}
return null;
当我尝试连接到同一网络上的 SQL 服务器时没有任何问题,但是当我在设备上激活 4g 时,我总是遇到同样的错误,它找不到实例。但是,如果我使用相同的信息通过 "SQL Server Management Studio" 连接到服务器,我可以毫无问题地连接到服务器。
我正在使用 jtds 驱动程序 1.3.1。
这是怎么回事?谢谢
P.S。我都读过一些关于网络服务的东西,但我想暂时删除这个选项
编辑 1:澄清一下,我可以使用程序 Windows CE 或 SQL Server Management Studio 版本的凭据连接到服务器。当我将外部 IP 和所有需要的信息连接到服务器时,它只连接到 Android
好吧,通过稍微更改 conString,我可以毫无问题地从本地网络或互联网进行连接。
if (TextUtils.isEmpty(port))
{
conString = "jdbc:jtds:sqlserver://" + host + ";databaseName=" + dbname + ";instance=" + instance;
}
else
{
conString = "jdbc:jtds:sqlserver://" + host + ":" + port + ";databaseName=" + dbname + ";instance=" + instance;
}
到
if (TextUtils.isEmpty(port))
{
conString = "jdbc:jtds:sqlserver://" + host + "/" + instance + ";DatabaseName=" +dbname;
}
else
{
conString = "jdbc:jtds:sqlserver://" + host + ":" + port + "/" + instance + ";DatabaseName=" + dbname;
}
现在可以毫无问题地使用 public 主机或本地网络访问数据库。