无法从 java 应用程序连接到 sqlserver

Posted

技术标签:

【中文标题】无法从 java 应用程序连接到 sqlserver【英文标题】:Cannot connect to sqlserver from java application 【发布时间】:2014-12-26 16:25:51 【问题描述】:

我有需要连接到 sqlserver 进行登录的 Web 服务,但不知何故它不起作用并引发异常。我使用以下步骤进行连接:

来自服务客户端:

 TrackingWS_Service service=new TrackingWS_Service();
 User user = service.getTrackingWSPort().login(username,password);

TrackingWS_Service 是同一项目中生成的类:

@WebServiceClient(name = "TrackingWS", targetNamespace = "http://webservices/", wsdlLocation =  "http://localhost:8080/TrackingSystem/TrackingWS?wsdl")
 public class TrackingWS_Service extends Service
 
    @WebEndpoint(name = "TrackingWSPort")
    public TrackingWS getTrackingWSPort() 
    return super.getPort(new QName("http://webservices/", "TrackingWSPort"), TrackingWS.class);
    
 

界面TrackingWs:

 @WebService(name = "TrackingWS", targetNamespace = "http://webservices/")
 @XmlSeeAlso(
 ObjectFactory.class
 )
 public interface TrackingWS 

    @WebMethod
    @WebResult(targetNamespace = "")
    @RequestWrapper(localName = "login", targetNamespace = "http://webservices/", className = "webservices.Login")
    @ResponseWrapper(localName = "loginResponse", targetNamespace = "http://webservices/", className = "webservices.LoginResponse")
    @Action(input = "http://webservices/TrackingWS/loginRequest", output = "http://webservices/TrackingWS/loginResponse")
     public User login(
    @WebParam(name = "arg0", targetNamespace = "")
    String arg0,
    @WebParam(name = "arg1", targetNamespace = "")
    String arg1);
 

在服务项目中,我有以下内容:

TrackingWs - 网络服务:

 @WebService(serviceName = "TrackingWS")
 public class TrackingWS 
   @WebMethod
   public User login(String username,String password)
   DBOperations dbOperations=new DBOperations();
   return dbOperations.findUser(username, password);     
   
 

数据库操作:

public class DBOperations 
private Connection connection = null;
private ResultSet rs = null;
private java.sql.PreparedStatement pst = null;

public synchronized User findUser(String username,String password)
connection=Connect.ConnectDb();

String sql="SELECT * FROM [Assignment5].[dbo].[User] WHERE Username=? AND Password=?";
        User user=null;
        int id;
        String usrname;
        String pasword;
        String type;
    try
        pst=connection.prepareStatement(sql);
        pst.setString(1, username);
        pst.setString(2, password);
        rs=pst.executeQuery();
        if(rs.next())
                    id=rs.getInt("ID");
                    usrname=rs.getString("Username");
                    pasword=rs.getString("Password");
                type=rs.getString("Type");    
                user=new User(id,usrname,pasword,type);
                    close();
                    return user;
            

    
    catch(SQLException e)
        e.printStackTrace();

    
    try 
        close();
     catch (SQLException ex) 
        Logger.getLogger(DBOperations.class.getName()).log(Level.SEVERE, null, ex);
    
  return user;

最后是连接:

公共类连接 // 连接 conn=null;

public static Connection ConnectDb()

    try 
    Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost;databaseName=Assignment5;integratedSecurity=true;");  
    return conn;

catch (Exception e) 
        JOptionPane.showMessageDialog(null, e);
                    return null;

 

我设置了 sqljdbc4,并在 Web 服务项目中复制了 sqljdbc_auth.dll。我不知道为什么在调用 getConnection() 时会抛出异常。

【问题讨论】:

1.您没有加载驱动程序类。 2. 什么错误?找不到合适的驱动程序或找不到类? 您遇到什么错误或异常...请打印堆栈跟踪 我看不到错误,因为我尝试从服务连接到 db,当我想显示错误时,我在 catch 分支上收到错误,所以我只知道它发生了当我尝试连接到数据库时 【参考方案1】:

使用 java 连接 SQLServer 时出现异常的可能原因

    当类路径设置不正确时。 在您正在使用的服务器的 context.xml 文件中添加数据库的资源 像这样
<Resource name="jdbc/vt"

auth="Container"

type="javax.sql.DataSource"

username="ankit"

password="ankit"

driverClassName="com.mysql.jdbc.Driver"

url="jdbc:sqlserver://localhost\\SQLEXPRESS;Database=vt"

maxActive="15"

maxIdle="3"/>
    添加资源后,在应用程序 web.xml 文件中设置对该资源的引用,如下所示
<resource-ref>
    <description>Connection Pool</description>
    <res-ref-name>jdbc/vt</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

注意:资源是根据我的项目,根据你的项目进行更改。

希望对你有帮助

【讨论】:

我正在使用 glassfish,我找不到上下文文件 在 glassfish 的根目录中寻找 conf 文件夹,您将找到所有用于配置 glassfish 的 xml 文件。 M 不确定 glassfish,但检查是否有任何 application.xml 文件实际上用于 tomcat context.xml 是在启动时为每个 Web 应用程序加载其内容的文件【参考方案2】:

最后我成功了,我只需要将 jdbc jar 添加到 glassfish-4.1\glassfish\domains\domain1\lib 文件夹中

【讨论】:

以上是关于无法从 java 应用程序连接到 sqlserver的主要内容,如果未能解决你的问题,请参考以下文章

无法从java连接到mysql [重复]

部署到 Azure 应用服务时,Asp.net 成员资格提供程序无法连接到本地 SQL Server

无法连接到数据库网络或无法登录数据库等问题整合

无法从Ubuntu上的Java程序连接到localhost上的MySQL

Java 连接到 SQL Server 数据库:用户“sa”登录失败 [重复]

无法连接到数据库服务器问题,怎么解决