2017-02-06 1 views
0

Это мой код для диспетчера соединений классаSQLite ошибки в базе данных

public class ConnectionFactory { 
Connection con = null; 
Statement stmt = null; 
ResultSet rs = null; 
boolean flag=false; 

//Constructor starts 
public ConnectionFactory(){ 
    try{ 
     Class.forName("org.sqlite.JDBC"); 
     con=DriverManager.getConnection("jdbc:sqlite:db.sqlite"); 
     stmt=con.createStatement(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 

}//end of constructor ConnectionFactory 

//method Connection starts 
public Connection getConnection(){ 
    try{ 
     Class.forName("org.sqlite.JDBC"); 
     con=DriverManager.getConnection("jdbc:sqlite:db.sqlite"); 
     System.out.println("Connection to SQLite has been established."); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 

    return con; 

}//end of method Connection 

//method checkLogin starts 
public boolean checkLogin(String username,String password, String user){ 
    if(user=="ADMINISTRATOR"){ 
     String query="SELECT * FROM users WHERE username='"+username+"' AND password='"+password+"' AND category='ADMINISTRATOR'"; 
     try{ 
      rs=stmt.executeQuery(query); 
      while(rs.next()){ 
       flag=true; 
      } 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    }else{ 
     String query="SELECT * FROM users WHERE username='"+username+"' AND password='"+password+"'AND category='NORMAL USER'"; 
     try{ 
      rs=stmt.executeQuery(query); 
      while(rs.next()){ 
       flag=true; 
      } 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 
    return flag; 
    } 
} 

подключения к базе данных успешно. и логин будет успешным. поэтому ясно, что данные доступны из db, но все же это дает некоторые ошибки.

эти ошибки

java.sql.SQLException: database connection closed 
at org.sqlite.core.CoreConnection.checkOpen(CoreConnection.java:336) 
at org.sqlite.jdbc4.JDBC4Connection.createStatement(JDBC4Connection.java:38) 
at org.sqlite.jdbc3.JDBC3Connection.createStatement(JDBC3Connection.java:193) 
at com.inventory.dao.ProductDAO.<init>(ProductDAO.java:37) 
at com.inventory.ui.Products.loadDatas(Products.java:421) 
at com.inventory.ui.Products.<init>(Products.java:38) 
at com.inventory.ui.Dashboard.<init>(Dashboard.java:44) 
at com.inventory.ui.LoginDialog.loginBttnMouseClicked(LoginDialog.java:195) 
at com.inventory.ui.LoginDialog.access$100(LoginDialog.java:18) 
at com.inventory.ui.LoginDialog$2.mouseClicked(LoginDialog.java:68) 
at java.awt.Component.processMouseEvent(Component.java:6536) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) 
at java.awt.Component.processEvent(Component.java:6298) 
at java.awt.Container.processEvent(Container.java:2236) 
at java.awt.Component.dispatchEventImpl(Component.java:4889) 
at java.awt.Container.dispatchEventImpl(Container.java:2294) 
at java.awt.Component.dispatchEvent(Component.java:4711) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4534) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) 
at java.awt.Container.dispatchEventImpl(Container.java:2280) 
at java.awt.Window.dispatchEventImpl(Window.java:2746) 
at java.awt.Component.dispatchEvent(Component.java:4711) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 
at java.awt.EventQueue.access$500(EventQueue.java:97) 
at java.awt.EventQueue$3.run(EventQueue.java:709) 
at java.awt.EventQueue$3.run(EventQueue.java:703) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) 
at java.awt.EventQueue$4.run(EventQueue.java:731) 
at java.awt.EventQueue$4.run(EventQueue.java:729) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at com.inventory.dao.ProductDAO.getQueryResult(ProductDAO.java:482) 
    at com.inventory.ui.Products.loadDatas(Products.java:422) 
    at com.inventory.ui.Products.<init>(Products.java:38) 
    at com.inventory.ui.Dashboard.<init>(Dashboard.java:44) 
    at com.inventory.ui.LoginDialog.loginBttnMouseClicked(LoginDialog.java:195) 
    at com.inventory.ui.LoginDialog.access$100(LoginDialog.java:18) 
    at com.inventory.ui.LoginDialog$2.mouseClicked(LoginDialog.java:68) 
    at java.awt.Component.processMouseEvent(Component.java:6536) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) 
    at java.awt.Component.processEvent(Component.java:6298) 
    at java.awt.Container.processEvent(Container.java:2236) 
    at java.awt.Component.dispatchEventImpl(Component.java:4889) 
    at java.awt.Container.dispatchEventImpl(Container.java:2294) 
    at java.awt.Component.dispatchEvent(Component.java:4711) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4534) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) 
    at java.awt.Container.dispatchEventImpl(Container.java:2280) 
    at java.awt.Window.dispatchEventImpl(Window.java:2746) 
    at java.awt.Component.dispatchEvent(Component.java:4711) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 
    at java.awt.EventQueue.access$500(EventQueue.java:97) 
    at java.awt.EventQueue$3.run(EventQueue.java:709) 
    at java.awt.EventQueue$3.run(EventQueue.java:703) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) 
    at java.awt.EventQueue$4.run(EventQueue.java:731) 
    at java.awt.EventQueue$4.run(EventQueue.java:729) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 

я пытавшиеся большинство доступных в онлайн-форм вариантов. до сих пор нет помощи.

+1

Исключения выглядят довольно самодостаточными. Вы пытаетесь использовать закрытое соединение. И вы пытаетесь использовать нулевой указатель. Ни один из них не считается лучшей практикой. – bradimus

ответ

0

Вы никогда не вызываете соединение в своем запросе. Попробуйте это во всех ваших заявлениях

public boolean checkLogin(String username,String password, String user){  
    this.getConnection(); // See your System.out.prinln in the console 
     Statement stmt = null; 
     ResultSet rs = null; 
       if(user=="ADMINISTRATOR"){ 
      Statement stmt = con.createStatement(); 
      String query="SELECT * FROM users WHERE username='"+username+"' AND password='"+password+"' AND category='ADMINISTRATOR'"; 
      ResultSet rs = stmt.executeQuery(s); 
        try{ 
         rs=stmt.executeQuery(query); 
         while(rs.next()){ 
          flag=true; 
         } 
        }catch(Exception e){ 
         e.printStackTrace(); 
        } 
     finally { 
      stmt.close(); 
      rs.close(); 
     } 
+0

его бесполезно. его все еще показывает ту же ошибку –

+0

Отредактированный мой ответ попробовать с этим и надежда работает – Gatusko

+0

он на самом деле удалена одна ошибка, но один все еще остается –

0

Вы создаете соединение в двух местах, которые не идеальны.

Операции повторного использования и объекты набора результатов не являются хорошей практикой.

Вы создаете соединения, но сообщаете мне, где вы закрываете созданные соединения. Если вы попытаетесь создать соединение, пока у вас уже есть, тогда будут большие шансы на проблемы с подключением.

Так что убедитесь, что у вас одновременно есть только одно соединение с БД и не используйте повторно объекты и объекты набора результатов.

Предлагаю переписать методы getConnection(), checkLogin().

//method Connection starts 
public Connection getConnection(){ 
    Connection con = null; 

    try{ 
     Class.forName("org.sqlite.JDBC"); 

     con = DriverManager.getConnection("jdbc:sqlite:db.sqlite"); 

     System.out.println("Connection to SQLite has been established."); 
    }catch(Exception e){ 

     e.printStackTrace(); 
    } 

    return con; 
}//end of method Connection 

//method checkLogin starts 
public boolean checkLogin(String username,String password, String user){ 

    boolean flag=false; 

    try(Connection con = getConnection(); Statement stmt = con.createStatement();){ 
     if(user == "ADMINISTRATOR"){ 

      String query = "SELECT * FROM users WHERE username='"+username+"' AND password='"+password+"' AND category='ADMINISTRATOR'"; 
     }else{ 

      String query = "SELECT * FROM users WHERE username='"+username+"' AND password='"+password+"'AND category='NORMAL USER'"; 
     } 

     ResultSet rs = stmt.executeQuery(query); 

     while(rs.next()){ 
      flag = true; 
     } 
    }catch(Exception e){ 

     e.printStackTrace(); 
    } 

    return flag; 
} 
+0

Я попробовал все еще показывать ту же ошибку –

+0

@AnshulSharma удалить создание соединения в конструкторе ConnectionFactory –

+0

nope .. его не использовать .. я думаю, что что-то не так с моим кодом. –