gpt4 book ai didi

java - JDBC未连接到Web服务中的数据库

转载 作者:行者123 更新时间:2023-11-30 06:18:10 24 4
gpt4 key购买 nike

我一直在使用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生成了Web服务。虽然它在Webservice的同一包中(它自己的类),但我可以简单地运行该类,它将生成 "Successfully connected"。 (请记住,构建是相同的,因为它在同一个程序包中)现在,当我将代码插入Webservice的方法中并使用 insert();对其进行调用时。从这里,我用生成的客户端调用Webservice。回头看控制台时,出现 "com.microsoft.sqlserver.jdbc.SQLServerDriver"错误。通常在路径构建不正确时给出。

它在getter和setter类之外起作用,但是为什么不在里面呢?

最佳答案

我试图同步完整的文档。它将覆盖


各种数据库连接方式
用于测试连接的示例代码
常见错误以及我们如何解决这些问题
定义JRE支持
如何设置CLASSPATH变量?
如何注册驱动程序?
如何传递连接URL?
选择正确的JAR文件
与数据库建立简单连接


安装用于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 Server2000。Microsoft SQL Server 2000驱动程序
  JDBC仅支持与SQL Server 2000的连接。


Java运行时环境要求


从用于SQL Server的Microsoft JDBC驱动程序4.2开始,Sun Java
SE开发套件(JDK)8.0和Java运行时环境(JRE)8.0
支持。支持Java数据库连接(JDBC)规范
API已扩展为包括JDBC 4.1和4.2 API。
从用于SQL Server的Microsoft JDBC驱动程序4.1开始,Sun Java
SE开发套件(JDK)7.0和Java运行时环境(JRE)7.0
支持。
从用于SQL Server的Microsoft JDBC驱动程序4.0开始,JDBC
Java数据库连接(JDBC)Spec API的驱动程序支持
已扩展为包括JDBC 4.0 API。 JDBC 4.0 API是
作为Sun Java SE开发套件(JDK)6.0的一部分引入的,并且
Java运行时环境(JRE)6.0。 JDBC 4.0是
JDBC 3.0 API。


有关更多信息: System Requirements for the JDBC Driver

设置CLASSPATH变量

JDBC .jar文件的Microsoft SQL Server 2000驱动程序必须在CLASSPATH变量中列出。 CLASSPATH变量是Java虚拟机(JVM)用于在您的计算机上定位JDBC驱动程序的搜索字符串。如果驱动程序未在CLASSPATH变量中列出,则在尝试加载驱动程序时会收到以下错误消息:

java.lang.ClassNotFoundException: com/microsoft/jdbc/sqlserver/SQLServerDriver


将系统CLASSPATH变量设置为包含以下条目:


  \您的安装路径\ Lib \ Msbase.jar
  
  \您的安装路径\ Lib \ Msutil.jar
  
  \您的安装路径\ Lib \ Mssqlserver.jar


这是已配置的CLASSPATH变量的示例:


  CLASSPATH = .; c:\ program files \ Microsoft SQL Server 2000驱动程序
  JDBC \ lib \ msbase.jar; c:\ program files \ Microsoft SQL Server 2000驱动程序
  对于JDBC \ lib \ msutil.jar; c:\ program files \ Microsoft SQL Server 2000
  JDBC \ lib \ mssqlserver.jar的驱动程序


注册驱动程序

注册驱动程序将指示JDBC驱动程序管理器加载哪个驱动程序。使用 class.forName函数加载驱动程序时,必须指定驱动程序的名称。这是Microsoft SQL Server 2000 JDBC驱动程序的驱动程序名称:

com.microsoft.jdbc.sqlserver.SQLServerDriver


下面的示例代码演示了如何注册驱动程序:

Driver d = (Driver)Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();


传递连接URL

您必须以连接URL的形式传递数据库连接信息。这是用于JDBC的Microsoft SQL Server 2000驱动程序的模板URL。替换数据库的值:

jdbc:microsoft:sqlserver://servername:1433


以下示例代码演示了如何指定连接URL:

con = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433", "userName", "password");


选择正确的JAR文件


用于SQL Server的Microsoft JDBC驱动程序6.0和4.2提供
sqljdbc.jar,sqljdbc4.jar,sqljdbc41和sqljdbc42.jar类
使用的库文件取决于您的首选Java运行时
环境(JRE)设置。
用于SQL Server的Microsoft JDBC驱动程序4.1提供了sqljdbc.jar,
使用的sqljdbc4.jar和sqljdbc41.jar类库文件
取决于您首选的Java Runtime Environment(JRE)设置。
用于SQL Server 4.0的Microsoft JDBC驱动程序提供了sqljdbc.jar
和sqljdbc4.jar类库文件的使用取决于您的
首选的Java Runtime Environment(JRE)设置。


与数据库建立简单连接

使用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方法加载驱动程序的现有应用程序将继续运行,而无需进行任何修改。

资源链接:

所有数据均取自以下内容-


Using the JDBC Driver
HOW TO: Get Started with Microsoft JDBC
ClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver

关于java - JDBC未连接到Web服务中的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25083812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com