我今天已经研究了大约 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
最佳答案
mysql 是一个完全不同的数据库服务器。不要将它用于 SQL Server。
您需要为您的数据库服务器提供一个公共(public)地址。 ip 或主机名都可以,只要您的所有客户都能看到它。如果您没有,可以尝试使用 dyndns.org 或类似网站。请注意,您的客户端仍然需要能够通过网络访问您的服务器(潜在的防火墙问题)。在不了解您的情况的情况下很难说更多。
防火墙可能是个问题,但这对本地主机来说不太可能。我猜问题出在 TCP/IP 监听器、用户名、密码或数据库名称设置上。
这里有一个链接,其中包含有关构建 JDBC 连接字符串的更多信息:http://technet.microsoft.com/en-us/library/ms378428%28v=sql.110%29.aspx
还有一些旁注:
您不需要包含 1433 端口号。
打印整个堆栈跟踪将帮助您进行调试。 (见下面代码)
您应该为您的连接声明一个变量并确保 它被关闭了。示例:
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/