代码之家  ›  专栏  ›  技术社区  ›  Camadas

JTDS连接到远程服务器失败

  •  -1
  • Camadas  · 技术社区  · 6 年前

    不知道为什么,应用程序连接到与设备位于同一网络上的SQL Server时,我可以毫无问题地连接到它,但现在我需要通过Internet从设备连接到SQL Server,不工作,不知道为什么。我有一个按钮来测试连接,它将调用一个包含此内容的方法,该方法位于后台(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 Server时,没有任何问题,但是当我激活设备上的4G时,我总是得到同样的错误,以至于找不到实例。但是,如果我使用相同的信息通过“SQL Server Management Studio”连接到服务器,我可以在没有任何问题的情况下连接到服务器。

    我用的是JTDS驱动程序,1.3.1。

    怎么会这样?谢谢

    P.S.我都读过一些关于WebService的文章,但是我想暂时删除这个选项

    编辑1:为了澄清,我可以使用程序的WindowsCE版本或SQL Server Management Studio上的凭据连接到服务器。当我把外部IP和所有需要的信息都连接到服务器上时,它并不仅仅连接到Android上

    1 回复  |  直到 6 年前
        1
  •  1
  •   Camadas    6 年前

    好吧,稍微改变一下结构,我就可以在本地网络或互联网上连接,而不会有任何问题。

    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;
    }
    

    现在可以使用公共主机或本地网络访问数据库了。