【发布时间】:2017-01-06 05:59:54
【问题描述】:
我只是想在我的 HTTP Servlet 程序中使用 SQL Server 数据库,但我的程序似乎无法连接到数据库。它给了我以下错误:
找不到合适的驱动程序 jdbc:sqlserver://localhost:1433;databaseName=Bookyard;integratedSecurity=true;
这是我的连接方式。
package practice.bookyard.server.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Database {
public static Connection getConnection() {
String url = "jdbc:sqlserver://(LocalDb)\\MSSQLLocalDB:1433;databaseName=Bookyard;integratedSecurity=true;";
Connection connection = null;
try {
connection = DriverManager.getConnection(url);
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
}
我之前的服务器名称为 localhost:1433,但我将其更改为 SQL Server 实例名称 (LocalDb)\\MSSQLLocalDB:1433,但它似乎仍然使用旧名称。
另外,我不确定在连接到 SQL Server localdb 时如何提供正确的连接字符串。
我正在使用适用于 Java EE、Mars 2 的 Eclipse,并从 this website 下载了适用于 SQL 6.0 的 Microsoft JDBC 驱动程序。
我运行了安装程序,解压缩了结果文件夹的内容。然后,我将 sqljdbc42.jar 文件添加到构建路径中,因为我的目标是 JDK 1.8。
更新
根据 Scary Wombat 的建议,我还将 sqljdbc42.jar 文件的路径添加到我的类路径中。
但是,我仍然遇到同样的错误。
我很确定这是一个反射问题,因为类型加载器无法从我的连接字符串中解析驱动程序类型。这意味着,我使用的连接字符串语法是错误的。
我将连接字符串更改为如下:
String url = "jdbc:sqlserver://localhost:1433;
instance=(LocalDb)\\MSSQLLocalDB;
databaseName=Bookyard;integratedSecurity=true;";
但是,我仍然不仅收到相同的错误,而且我收到的异常消息仍然有我的旧连接字符串。所以,很明显,还有一些缓存正在进行,我只是不知道在哪里。谁在缓存我的连接字符串,我如何刷新/清除该缓存?
如果我连接到 localdb 而不是在主 SQL Server 实例上,您能否告诉我如何提供 SQL Server 实例名称?
【问题讨论】:
-
您能否在 SQL Server 配置管理器中检查 TCP/IP 是否已启用?如果未启用,则需要启用它。如果我没记错的话,您可能还需要在进行此更改后重新启动系统。
-
jar 必须在你的类路径和你的构建路径上。 buildpath 仅用于编译
-
@ScaryWombat 如何将它放在类路径中?我完全是新手?那是环境变量吗?
-
@AdityaGupta 是的,TCP 已启用,我已从 .NET 应用程序连接到我的 SQL 实例一百万次。
-
@ScaryWombat CLASS_PATH 与 JAVA_HOME 不同吗?我有后一套。如果它不同,我必须将它设置为什么?文档太混乱了。
标签: java sql-server eclipse tomcat jdbc