java – 如何生成JDBC数据库URL?

我今天已经研究了大约3个小时,我觉得我很接近,但我有几个问题.我到目前为止找到的最好的信息来源是:
https://stackoverflow.com/a/2840358,但它没有回答我的所有问题.

一点背景:我正在使用Microsoft SQL Server 2014,并且我已经验证了IP地址127.0.0.1处于活动状态并使用端口1433启用.我在同一台计算机上通过SQL Server程序连接到数据库没有问题,但我正在尝试通过我正在编写的Java程序进行连接,并且它当前正在发出此错误:com.microsoft.sqlserver.jdbc.SQLServerException:端口号1433 / R2M_Database无效.我对此感到困惑,因为我知道端口1433是正确的,我知道我要连接的数据库叫做R2M_Database.现在,这是我的问题以及我的源代码.

1.)“mysql”和“sqlserver”子协议之间有什么区别,我怎么知道使用哪个? (我很确定我应该使用sqlserver,但以防万一)

2.)我如何确保使用正确的主机名? (我很确定127.0.0.1 / localhost是我应该使用的那个,但是我怎样才能从其他机器运行这个程序来访问数据库?)

3.)是否存在任何可能导致防火墙或密码要求的外部问题? (我相当确定用户名和密码是正确的,因为它们是我用来在Microsoft SQL Server 2014中成功获得连接的用户名和密码)

编辑:

import java.sql.DriverManager;
import java.io.BufferedReader;
import java.io.FileReader;
import org.apache.ibatis.jdbc.ScriptRunner;

public class SQLTest {
    public static void main(String[] args){
        String script = "CreatePersons.sql";
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            new ScriptRunner(DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=R2M_Database", userName, password))
                    .runScript(new BufferedReader(new FileReader(script)));
        } catch (Exception e) {
            System.err.println(e);
        }
    }
}

我做了一个轻微的语法更改(; databaseName =而不是/),现在我收到此错误:

com.microsoft.sqlserver.jdbc.SQLServerException:用户’RSquaredMacro’登录失败. ClientConnectionId:35281a40-0f87-42e4-BC46-b9a81a371529

最佳答案 > mysql是一个完全不同的数据库服务器.不要将它用于SQL Server.

>您需要为数据库服务器提供公共地址.只要所有客户都可以看到它,就可以使用ip或主机名.如果你没有,你可以尝试使用dyndns.org或类似的东西.请注意,您的客户仍需要能够访问网络上的服务器(潜在的防火墙问题).在不了解您的情况的情况下很难说更多.

>防火墙可能是一个问题,但这不太可能是localhost.我猜测问题在于TCP / IP侦听器,用户名,密码或数据库名称设置.

以下链接提供了有关构建JDBC连接字符串的更多信息:http://technet.microsoft.com/en-us/library/ms378428%28v=sql.110%29.aspx

还有一些附注:

>您不需要包含1433端口号.
>打印整个堆栈跟踪将帮助您进行调试.
(见下面的代码)
>您应该为Connection声明一个变量并确保
它被关闭了.例:

Connection c = null;
try {
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    c = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433/R2M_Database", userName, password);
    new ScriptRunner(c).runScript(new BufferedReader(new FileReader(script)));
} catch (Exception e) {
    e.printStackTrace();
} finally {
    if (c != null) try { c.close(); } catch (Exception e) { }
}
点赞