所以我面临以下问题。 我开发了一个Web应用程序,它具有以下与SQL Server数据库的连接。 (附加了数据库连接代码)
public class DBConnection
{
private DatabaseMetaData dma;
private static Connection con;
private static DBConnection instance = null;
private static String security = "integratedSecurity=true;";
private DBConnection()
{
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver");
} catch (Exception e) {
System.out.println("Can not find the driver");
System.out.println(e.getMessage());
}
try{
con = DriverManager.getConnection("jdbc:jtds:sqlserver://<Machine>;databaseName=<DBName>; useNTLMv2=true;");
//set autocommit
con.setAutoCommit(true);
dma = con.getMetaData(); // get meta data
System.out.println("Connection to " + dma.getURL());
System.out.println("Driver " + dma.getDriverName());
System.out.println("Database product name " + dma.getDatabaseProductName());
}
catch(Exception e){
System.out.println("Problems with the connection to the database");
System.out.println(e.getMessage());
System.out.println(con);
}
}
public static void closeConnection()
{
try{
con.close();
System.out.println("The connection is closed");
}
catch (Exception e){
System.out.println("Error trying to close the database " + e.getMessage());
}
}
public Connection getDBcon()
{
return con;
}
public static DBConnection getInstance()
{
if (instance == null)
{
instance = new DBConnection();
}
return instance;
}
public static void startTransaction()
{ try{
con.setAutoCommit(false);
}
catch(Exception e){
System.out.println("fail start transaction");
System.out.println(e.getMessage());
}
}
public static void commitTransaction()
{ try{
con.setAutoCommit(true);
}
catch(Exception e){
System.out.println("fail commit transaction");
System.out.println(e.getMessage());
}
}
public static void rollbackTransaction()
{
try
{
con.rollback();
con.setAutoCommit(true);
}
catch(Exception e){
System.out.println("fail rollback transaction");
System.out.println(e.getMessage());
}
}
我在InteliJ IDE上使用Tomcat 8来运行应用程序和调试。哪个工作正常。 (建立数据库连接)
问题是,当我获取war文件并将其部署在同一个Tomcat服务器中时,我得不到数据库连接。 (没有数据库连接) 我检查了tomcat和项目中的所有.jar文件,并添加了所有需要的文件。 似乎无法找到导致此问题的原因。也许有人遇到同样的问题
我无法正确处理导致此问题的原因及如何解决问题
**编辑:我添加了尝试加载数据时显示的错误
输入例外报告
消息请求处理失败;嵌套异常是java.lang.NullPointerException
说明服务器遇到内部错误,导致无法完成此请求。
例外
org.springframework.web.util.NestedServletException:Request 处理失败;嵌套异常是java.lang.NullPointerException 根本原因
显示java.lang.NullPointerException com.lifeletapp.business.dataLayer.DbLogIn.isValidUser(DbLogIn.java:27) com.lifeletapp.business.HelloController.verifyLogin(HelloController.java:33) sun.reflect.NativeMethodAccessorImpl.invoke0(原生方法) sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)
DbLogin类:
public class DbLogIn implements ILogIn
{
private Connection conn;
public DbLogIn()
{
conn = DBConnection.getInstance().getDBcon();
}
public Staff isValidUser(String userName, String password)
{
Staff staff = new Staff();
try {
String query = "SELECT * FROM Staff WHERE userName=? AND pass=?";
PreparedStatement preparedStatement = conn.prepareStatement( query );
preparedStatement.setString(1, userName);
preparedStatement.setString(2, password);
ResultSet resultSet = preparedStatement.executeQuery();
while( resultSet.next() ) {
staff.setUserID(resultSet.getInt("userID"));
staff.setfName(resultSet.getString("fName") );
staff.setlName(resultSet.getString("lName") );
staff.setUserName(resultSet.getString("userName") );
staff.setPass(resultSet.getString("pass") );
staff.setEmail(resultSet.getString("email") );
}
resultSet.close();
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
return staff;
}
}
这更像是配置或服务器问题。不是代码问题。 正如评论中所提到的,我测试了如果var conn == null - &gt;结果是真的。并且连接剂量不会在任何地方变得无效。请查看代码。然后,当从InteliJ调试器运行时,上述代码再次起作用。
答案 0 :(得分:0)
所以最终弄清楚问题是什么。 为什么它在我的IDE配置上工作: 1.我使用Java JDK 1.7作为JAVA_HOME 2.我使用旧版Tomcat作为构建版本 3.为了使用JDTS,您需要从.jar存档中提取nlmauth.dll并将其复制到配置的env JDK(jdk1.7 - &gt;&gt;&gt;&gt;&gt;复制到此处)
为什么它不能在Tomcat服务器上运行: 我正在使用Tomcat 8.xxx 2.Tomcat 8.xx需要JDk 8 3.在JDK 8中我没有经过nlmauth.dll(一旦我完成了这一切,一切正常)
为了解决这个问题,第一个线索将是查看tomcat服务器日志。
根据我的假设,只有当您通过集成安全性建立数据库连接时,才会出现此问题。 我的假设与以下事实有关:在tomcat日志中,拒绝JDBC驱动程序的主要错误是基于集成的安全凭证。
祝你们好运。