【问题标题】:SQLite Database not connecting while running the .jar file of project运行项目的 .jar 文件时 SQLite 数据库未连接
【发布时间】:2018-03-13 19:31:14
【问题描述】:

我在 NetBeans 8.2 IDE 上创建了一个 java 项目,程序在 IDE 上运行完美,但是当我尝试通过项目的 .jar 文件运行时,sqlite 数据库无法连接,请指导我怎么办? P.S:我是堆栈溢出的新手,所以我不知道提问的确切方式!

这是数据库的连接代码:

   public Connection connect1() {
    try {

        Class.forName("org.sqlite.JDBC");
    } catch (ClassNotFoundException ex) {
        Logger.getLogger(SQLiteJDBCDriverConnection.class.getName()).log(Level.SEVERE, null, ex);
    }
    String url = "jdbc:sqlite:SaeedGoldCastingDB.sqlite";
    Connection conn = null;
    try {
        conn = DriverManager.getConnection(url);
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }
    return conn;
}

通过给出绝对地址,它会抛出一个空指针接收:

run:

线程“AWT-EventQueue-0”中的异常 java.lang.NullPointerException 在 DatabaseConnection.SQLiteJDBCDriverConnection.Login(SQLiteJDBCDriverConnection.java:83) 在 goldsmith.billing.and.database.Login.btnLoginActionPerformed(Login.java:205) 在 goldsmith.billing.and.database.Login.access$000(Login.java:15) 在 goldsmith.billing.and.database.Login$1.actionPerformed(Login.java:90) 在 javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 在 javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) 在 javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 在 javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 在 javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 在 java.awt.Component.processMouseEvent(Component.java:6533) 在 javax.swing.JComponent.processMouseEvent(JComponent.java:3324) 在 java.awt.Component.processEvent(Component.java:6298) 在 java.awt.Container.processEvent(Container.java:2236) 在 java.awt.Component.dispatchEventImpl(Component.java:4889) 在 java.awt.Container.dispatchEventImpl(Container.java:2294) 在 java.awt.Component.dispatchEvent(Component.java:4711) 在 java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) 在 java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) 在 java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) 在 java.awt.Container.dispatchEventImpl(Container.java:2280) 在 java.awt.Window.dispatchEventImpl(Window.java:2746) 在 java.awt.Component.dispatchEvent(Component.java:4711) 在 java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 在 java.awt.EventQueue.access$500(EventQueue.java:97) 在 java.awt.EventQueue$3.run(EventQueue.java:709) 在 java.awt.EventQueue$3.run(EventQueue.java:703) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) 在 java.awt.EventQueue$4.run(EventQueue.java:731) 在 java.awt.EventQueue$4.run(EventQueue.java:729) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) 在 java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

代码如下:

public class SQLiteJDBCDriverConnection {
     /**
     * Connect to a sample database
     */
    public String rate=null;
    public String date=null;


 public Connection connect1() {
    try {
        // SQLite connection string
        Class.forName("org.sqlite.JDBC");
    } catch (ClassNotFoundException ex) {
        Logger.getLogger(SQLiteJDBCDriverConnection.class.getName()).log(Level.SEVERE, null, ex);
    }
    String url = "jdbc:sqlite:C:\\Users\\Hashmi\\Documents\\NetBeansProjects\\Goldsmith-Billing-and-database\\src\\SourceFolder\\SaeedGoldCastingDB.sqlite";
    Connection conn = null;
    try {
        conn = DriverManager.getConnection(url);
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }
    return conn;
}
  public boolean Login(Login l){

   String idLogin = null ;
   String password = null;
   char[] pass = l.jPasswordField1.getPassword();
  String passString = new String(pass);
   String sql = "SELECT idLogin , password from Login where idLogin like '%"+l.jTextField_idLogin.getText()+"%';";
    try (Connection conn = this.connect1();
         Statement stmt  = conn.createStatement();
         ResultSet rs    = stmt.executeQuery(sql)){
        // loop through the result set
        while (rs.next()) {
          idLogin=rs.getString("idLogin");
          password=rs.getString("password");
         }
          if(idLogin.matches(l.jTextField_idLogin.getText() ) && password.matches(passString))
            return true;
           else
               return false;

    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }
    return false;
 }
  public void UpdateLogin(String idLogin,String password){

     String sql = "UPDATE Login SET password=? WHERE idLogin like '%"+idLogin+"%';";
  try (Connection conn = this.connect1();
         PreparedStatement pstmt = conn.prepareStatement(sql))
    {

              pstmt.setString(1,password);
              pstmt.executeUpdate();

    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }

      }     
   public void insertLogin(String idLogin,String password){

     String sql = "insert into Login(idLogin,password)values(?,?);";
  try (Connection conn = this.connect1();
         PreparedStatement pstmt = conn.prepareStatement(sql))
    {

              pstmt.setString(1,idLogin);
              pstmt.setString(2,password);
              pstmt.executeUpdate();



    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }

      }     
  public boolean userCheck(Settings s){

   String idLogin = null ;
   String password = null;
   char[] pass = s.jPasswordField_OldPassword.getPassword();
   String passString = new String(pass);
   String sql = "SELECT idLogin , password from Login where idLogin like '%"+s.jTextField_useName1.getText()+"%';";
    try (Connection conn = this.connect1();
         Statement stmt  = conn.createStatement();
         ResultSet rs    = stmt.executeQuery(sql)){
        // loop through the result set



            while (rs.next())
                 {
                  idLogin=rs.getString("idLogin");
                  password=rs.getString("password");
                 }

                 if(idLogin.matches(s.jTextField_useName1.getText() ) && password.matches(passString))
            return true;
           else
               return false;




    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }
    return false;
 }

【问题讨论】:

  • 这是给企业的吗?还是只是一个娱乐/教育的副业?
  • 这是给小公司测试自动化环境的

标签: java sqlite


【解决方案1】:

您使用 SQLite 数据库文件的相对路径:

jdbc:sqlite:SaeedGoldCastingDB.sqlite

根据文件SaeedGoldCastingDB.sqlite 的实际位置,Java 可能无法在您的程序执行时找到它。

改用绝对路径。

【讨论】:

  • 我也试过了,但是在 IDE 中运行时出现空指针异常错误,String url = "jdbc:sqlite:C:\\Users\\Hashmi\\Documents\\NetBeansProjects\ \Goldsmith-Billing-and-database\\src\\SourceFolder\\SaeedGoldCastingDB.sqlite";
  • 那么您应该向我们展示产生此错误的代码。
  • 我已经添加了代码和错误消息,据我了解,发生异常是因为现在有数据从数据库加载到带有凭据的 mach,
猜你喜欢
  • 2020-09-17
  • 1970-01-01
  • 2019-05-26
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
  • 2021-05-12
  • 1970-01-01
相关资源
最近更新 更多