我只想在我的HTTP Servlet程序中使用SQL Server数据库,但我的程序似乎无法连接到数据库。它给了我以下错误:
找不到合适的驱动程序 JDBC:SQLSERVER://本地主机: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时如何提供正确的连接字符串。
我正在使用Eclipse for Java EE,Mars 2,我从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实例名称?
答案 0 :(得分:0)
正如@ScaryWombat和@JozefChocholacek暗示的那样,它原来是一个类路径问题。显然,您必须仅复制并粘贴 sqljdbc42.jar 文件,并且此文件只能直接复制并粘贴到WEB-INF\lib
文件夹中,而不能复制到任何子文件夹中。
我这样做了它仍然给了我这个错误。
那是因为WEB-INF
文件夹结构,当我在Project Explorer
中查看时,仍然具有旧的文件夹结构。因此,我右键单击WEB-INF
中的Project Explorer
文件夹并选择了Refresh
命令。
我还更新了我的环境变量CLASSPATH
,将其指向WEB-INF
文件夹,该错误消失了。
答案 1 :(得分:-1)
尝试添加用户名和密码,它适用于我,
Connection con=DriverManager.getConnection("jdbc:sqlserver://10.100.10.100:1433;databaseName=DB","username","password");
希望它可能有用。
答案 2 :(得分:-2)
你可以这样做
String url = "jdbc:sqlserver://YOUR PC NAME;instanceName=SQLEXPRESS;DatabaseName=dbname;integratedSecurity=true";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection myCon = DriverManager.getConnection(url);
注意:然而,对于新版本的jdbc驱动程序来说,使用class.forname
手动加载驱动程序类并不是必需的