したがって、次の問題に直面しています。 次のSQL Serverデータベースへの接続を持つWebアプリケーションを開発しました。 (db接続コードが添付されています)java web appがTomcatにデプロイされたときにSQLデータベースへの接続を拒否します
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を使用してアプリケーションとデバッグを実行しています。どちらがうまくいくの? (DB接続が確立されている)
問題は、私がwarファイルを取得して同じTomcat Serverにデプロイすると、DB接続が取得されないという問題です。 (No DB connection) Tomcatとプロジェクトのすべての.jarファイルをチェックして、必要なファイルをすべて追加しました。 この問題の原因を特定できないようです。たぶん、同じ問題で立ち往生してしまった誰かがそこにある
私はこの問題を引き起こしているものを、適切undertandingを取得することはできませんし、それを修正する方法
**編集:私はしようとしたときにエラーが表示された追加した後データをロードする
タイプ例外レポート
メッセージ要求処理に失敗しました。ネストされた例外はjava.lang.NullPointerExceptionです
説明サーバーがこの要求を実行できないような内部エラーが発生しました。
例外
org.springframework.web.util.NestedServletException:要求 処理が失敗しました。ネストされた例外は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 - > trueの場合にテストしました。そして、その接続はどこでもゼロにならない。コードをご覧ください。次に、上記のコードはInteliJデバッガから実行すると再び動作します。
DbLogIn.java 27行 - 投稿できますか? – Fildor
はい。編集中 –
#27の行に印をつけてください。 – Fildor