【发布时间】: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;
}
【问题讨论】:
-
这是给企业的吗?还是只是一个娱乐/教育的副业?
-
这是给小公司测试自动化环境的