无法从 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的主要内容,如果未能解决你的问题,请参考以下文章
部署到 Azure 应用服务时,Asp.net 成员资格提供程序无法连接到本地 SQL Server
无法从Ubuntu上的Java程序连接到localhost上的MySQL