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

标签 java sql-server database jdbc

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

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

1.) “mysql”和“sqlserver”子协议(protocol)有什么区别,我怎么知道该使用哪个? (我很确定我应该使用 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

最佳答案

  1. mysql 是一个完全不同的数据库服务器。不要将它用于 SQL Server。

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

  3. 防火墙可能是个问题,但这对本地主机来说不太可能。我猜问题出在 TCP/IP 监听器、用户名、密码或数据库名称设置上。

这里有一个链接,其中包含有关构建 JDBC 连接字符串的更多信息:http://technet.microsoft.com/en-us/library/ms378428%28v=sql.110%29.aspx

还有一些旁注:

  1. 您不需要包含 1433 端口号。

  2. 打印整个堆栈跟踪将帮助您进行调试。 (见下面代码)

  3. 您应该为您的连接声明一个变量并确保 它被关闭了。示例:

    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) { }
    }
    

关于java - 如何生成 JDBC 数据库 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24517054/

相关文章:

sql-server - 如何将 SQL Server 2005 更改为区分大小写?

database - 带有 Unaccent 的 Postgres 自动生成的表列,使用触发器?

mysql - 一起使用 DISTINCT 和 COUNT

database - Openshift 上的规模数据库

sql - 通过删除执行计划中的排序运算符来优化 SQL 查询

java - 使用 Hibernate 查询多个实体的复合索引

java - 在防止输入错误时使用异常

java - 在 OptaPlanner session 安排示例中,是否可以根据房间的最小容量将 session 分配到房间?

sql - SSMS 语法荧光笔支持超前和滞后

java - 文件读取后无法删除