【问题标题】:Cannot connect to sqlserver from java application无法从 java 应用程序连接到 sqlserver
【发布时间】: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 分支上收到错误,所以我只知道它发生了当我尝试连接到数据库时

标签: java sql-server netbeans


【解决方案1】:

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

  1. 当类路径设置不正确时。
  2. 在您正在使用的服务器的 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"/>
  1. 添加资源后,在应用程序 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 文件夹中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    相关资源
    最近更新 更多