我遇到了问题。我有一个控制台应用程序,它正在使用SQLite数据库。用户在控制台中输入密码,而不是我的应用程序对其进行加密,我需要将哈希写入数据库。我只使用javac和java命令在ubuntu终端中编译和推送我的应用程序,因为我使用Console对象实例及其方法readPassword(),并且无法在intellij idea内置终端中使用我的应用程序。 每次我的应用程序尝试使用db时都会出现这种异常:
java.lang.ClassNotFoundException:org.sqlite.JDBC at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:349) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) 在com.company.DBHelper.connect(DBHelper.java:12) 在com.company.StringOperator.save(StringOperator.java:15) 在com.company.PasswordHelper.start(PasswordHelper.java:30) 在com.company.Main.main(Main.java:14)
这是我上班的DB:
package com.company;
import java.sql.*;
class DBHelper {
private static Connection connection;
private static Statement statement;
static private final String tableName = "passwords";
static void connect() throws ClassNotFoundException, SQLException {
connection = null;
Class.forName("org.sqlite.JDBC");
connection = DriverManager.getConnection("jdbc:sqlite:password.db");
System.out.println("Connected");
}
static void createDB() throws ClassNotFoundException, SQLException
{
statement = connection.createStatement();
statement.execute("CREATE TABLE if not exists '" + tableName + "' ('id' INTEGER PRIMARY KEY AUTOINCREMENT, 'hash' text);");
System.out.println("Table was created or already exists");
}
static void writeToDB(String password) throws SQLException
{
String query = "INSERT INTO '" + tableName + "' ('hash') VALUES ('" + password + "');";
statement.execute(query);
System.out.println("Password was successfully added to DB");
}
static void close() throws SQLException
{
statement.close();
connection.close();
System.out.println("Connection is closed");
}
}
我非常确定这段代码没问题,因为我已经在另一个控制台应用程序中测试了它,只需输入简单的数据(简单的Scanner),所以我在IntelliJ内置了它 - 控制台。 我只是不能意识到,我需要如何编译它,也许是以某种特殊的方式使用javac或者smth else。我在很多方面搜索过这个问题,我在intelliJ中设置了不同的属性,但它没有帮助。