【发布时间】:2014-07-01 18:31:27
【问题描述】:
我今天已经研究了大约 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
【问题讨论】:
-
如果您在连接时遇到问题,很可能是您尚未在端口 1433 上启用 TCP/IP 侦听器。快速的“netstat -an”命令会告诉您它是否正在侦听.检查并评论你得到了什么???
-
这是我做“netstat -an”时得到的:Image of log
-
根据你的图,端口号。 1433在听。所以,这根本不是问题!
标签: java sql-server database jdbc