use*_*889 5 java database sql-server jdbc
我今天已经研究了大约 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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我做了一个轻微的语法更改(;databaseName= 而不是 /),现在我收到了这个错误:
com.microsoft.sqlserver.jdbc.SQLServerException:用户“RSquaredMacro”登录失败。ClientConnectionId:35281a40-0f87-42e4-bc46-b9a81a371529
mysql 是一个完全不同的数据库服务器。不要将其用于 SQL Server。
您需要为您的数据库服务器提供一个公共地址。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) { }
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
4696 次 |
| 最近记录: |