我一直在使用JDBC。下面是我用来获取连接的代码。
JDBC代码:
Connection con = null;
Statement st = null;
final String DB_URL = "jdbc:jtds:sqlserver://00.00.00.00:0000/DB";
// Database credentials
final String USER = "usrname";
final String PASS = "pw";
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(DB_URL, USER, PASS);
st = con.createStatement();
System.out.println("successfully connected!");
} catch (Exception err) {
System.out.println(" " + err.getMessage ());
}
finally {
try {
con.close();
} catch (Exception e) { /* ignored */ }
try {
st.close();
} catch (Exception e) {
/* ignored */
}
}
}
}
我已经从包含getter和setter的WSDL生成了一个Webservice。虽然它位于Webservice(它自己的类)的同一个包中,但我可以简单地运行该类,它将生成"Successfully connected"
。 (请记住,构建是相同的,因为它在同一个包中)现在当我将代码插入Webservice上的方法并使用insert();
调用它时。从这里开始,我使用生成的客户端调用Webservice。回头看一下控制台时,我得到"com.microsoft.sqlserver.jdbc.SQLServerDriver"
错误。通常在路径构建不正确时给出。
它在getter和setter类之外工作,但为什么不在里面呢?
答案 0 :(得分:3)
我试图同步完整的文档。它将涵盖
安装JDBC的Microsoft SQL Server 2000驱动程序后,可以通过两种方式完成数据库连接:
1)使用连接网址,或
2)使用JNDI数据源
以下示例代码尝试连接到数据库并显示数据库名称,版本和可用目录。将服务器属性替换为服务器的值:
import java.*;
public class Connect{
private java.sql.Connection con = null;
private final String url = "jdbc:microsoft:sqlserver://";
private final String serverName= "localhost";
private final String portNumber = "1433";
private final String databaseName= "pubs";
private final String userName = "user";
private final String password = "password";
// Informs the driver to use server a side-cursor,
// which permits more than one active statement
// on a connection.
private final String selectMethod = "cursor";
// Constructor
public Connect(){}
private String getConnectionUrl(){
return url+serverName+":"+portNumber+";databaseName="+databaseName+";selectMethod="+selectMethod+";";
}
private java.sql.Connection getConnection(){
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
con = java.sql.DriverManager.getConnection(getConnectionUrl(),userName,password);
if(con!=null) System.out.println("Connection Successful!");
}catch(Exception e){
e.printStackTrace();
System.out.println("Error Trace in getConnection() : " + e.getMessage());
}
return con;
}
/*
Display the driver properties, database details
*/
public void displayDbProperties(){
java.sql.DatabaseMetaData dm = null;
java.sql.ResultSet rs = null;
try{
con= this.getConnection();
if(con!=null){
dm = con.getMetaData();
System.out.println("Driver Information");
System.out.println("\tDriver Name: "+ dm.getDriverName());
System.out.println("\tDriver Version: "+ dm.getDriverVersion ());
System.out.println("\nDatabase Information ");
System.out.println("\tDatabase Name: "+ dm.getDatabaseProductName());
System.out.println("\tDatabase Version: "+ dm.getDatabaseProductVersion());
System.out.println("Avalilable Catalogs ");
rs = dm.getCatalogs();
while(rs.next()){
System.out.println("\tcatalog: "+ rs.getString(1));
}
rs.close();
rs = null;
closeConnection();
}else System.out.println("Error: No active Connection");
}catch(Exception e){
e.printStackTrace();
}
dm=null;
}
private void closeConnection(){
try{
if(con!=null)
con.close();
con=null;
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception
{
Connect myDbTest = new Connect();
myDbTest.displayDbProperties();
}
}
如果此代码成功,则输出类似于以下内容:
Connection Successful! Driver Information
Driver Name: SQLServer
Driver Version: 2.2.0022
Database Information
Database Name: Microsoft SQL Server
Database Version: Microsoft SQL Server 2000 - 8.00.384 (Intel X86)
May 23 2001 00:02:52
Copyright (c) 1988-2000 Microsoft Corporation
Desktop Engine on Windows NT 5.1 (Build 2600: )
Avalilable Catalogs
catalog: master
catalog: msdb
catalog: pubs
catalog: tempdb
错误-1 强>
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Login failed for user 'user'. Reason: Not associated with a trusted SQL Server connection.
<强>答:强>
如果是SQL Server 2000身份验证模式,则会出现此错误消息 设置为Windows身份验证模式。 Microsoft SQL Server 2000 JDBC驱动程序不支持使用Windows NT进行连接 认证。您必须设置SQL的身份验证模式 服务器到混合模式,允许Windows身份验证和 SQL Server身份验证。
错误-2 强>
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]This version of the JDBC driver only supports Microsoft SQL Server 2000. You can either upgrade to SQL Server 2000 or possibly locate another version of the driver.
<强>答:强>
尝试连接到SQL Server版本时会出现此错误消息 早于SQL Server 2000. Microsoft SQL Server 2000驱动程序 JDBC仅支持与SQL Server 2000的连接。
更多信息:System Requirements for the JDBC Driver
必须在CLASSPATH变量中列出JDBC .jar文件的Microsoft SQL Server 2000驱动程序。 CLASSPATH变量是Java虚拟机(JVM)用于在计算机上查找JDBC驱动程序的搜索字符串。如果您的CLASSPATH变量中未列出驱动程序,则在尝试加载驱动程序时会收到以下错误消息:
java.lang.ClassNotFoundException: com/microsoft/jdbc/sqlserver/SQLServerDriver
设置系统CLASSPATH变量以包含以下条目:
\您的安装路径\ Lib \ Msbase.jar
\您的安装路径\ Lib \ Msutil.jar
\您的installationpath \ Lib \ Mssqlserver.jar
这是已配置的CLASSPATH变量的示例:
CLASSPATH =。; c:\ program files \ Microsoft SQL Server 2000 Driver for JDBC \ lib \ msbase.jar; c:\ program files \ Microsoft SQL Server 2000 Driver 对于JDBC \ lib \ msutil.jar; c:\ program files \ Microsoft SQL Server 2000 JDBC \ lib \ mssqlserver.jar的驱动程序
注册驱动程序会指示JDBC Driver Manager加载哪个驱动程序。使用class.forName
函数加载驱动程序时,必须指定驱动程序的名称。这是用于JDBC的Microsoft SQL Server 2000驱动程序的驱动程序名称:
com.microsoft.jdbc.sqlserver.SQLServerDriver
以下示例代码演示了如何注册驱动程序:
Driver d = (Driver)Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
您必须以连接URL的形式传递数据库连接信息。这是用于JDBC的Microsoft SQL Server 2000驱动程序的模板URL。替换数据库的值:
jdbc:microsoft:sqlserver://servername:1433
以下示例代码演示了如何指定连接URL:
con = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433", "userName", "password");
使用sqljdbc.jar类库,应用程序必须首先注册驱动程序,如下所示:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
加载驱动程序后,可以使用连接URL和DriverManager类的getConnection方法建立连接:
String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
"databaseName=AdventureWorks;user=MyUserName;password=*****;";
Connection con = DriverManager.getConnection(connectionUrl);
在JDBC API 4.0中,增强了DriverManager.getConnection
方法以自动加载JDBC驱动程序。因此,在使用sqljdbc4.jar,sqljdbc41.jar或sqljdbc42.jar类库时,应用程序不需要调用Class.forName方法来注册或加载驱动程序。
调用DriverManager类的getConnection方法时,会从已注册的JDBC驱动程序集中找到相应的驱动程序。 sqljdbc4.jar,sqljdbc41.jar或sqljdbc42.jar文件包含"META-INF/services/java.sql.Driver"
文件,其中包含com.microsoft.sqlserver.jdbc.SQLServerDriver
作为注册驱动程序。当前使用Class.forName
方法加载驱动程序的现有应用程序将继续工作而无需修改。
所有数据均来自以下 -
答案 1 :(得分:1)
CLASSPATH变量是Java虚拟机(JVM)用于在计算机上查找JDBC驱动程序的搜索字符串。如果您的CLASSPATH变量中未列出驱动程序,则在尝试加载驱动程序时会收到以下错误消息: java.lang.ClassNotFoundException:com / microsoft / jdbc / sqlserver / SQLServerDriver
检查您的课程路径并告诉我这是否是问题所在。
答案 2 :(得分:1)
您在类路径中不需要jTDS和JDBC。任何一个都是必需的。你最喜欢的只需要sqljdbc.jar。一定要将它放在项目的WEB-INF目录中的lib之类的心理位置,而不是通过IDE将其添加到类路径中。重置您的服务,然后重试。它应该自己解决。
Jar文件可以在这里找到: www.java2s.com/Code/JarDownload/sqlserverjdbc/sqlserverjdbc.jar.zip