У меня есть исключение NullPointerException при выполнении запроса моего простого оператора sql; Я думаю, что проблема связана с подключением к sqlite, но я не могу понять это...
Мой метод Java:
public Connection connect() throws SQLException {
Connection conn = null;
try {
try {
Class.forName("org.sqlite.JDBC");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
String url = "jdbc:sqlite:sakila.db.sqlite3";
conn = DriverManager.getConnection(url);
System.out.println("Connection to SQLite has been established.");
} catch (SQLException e) {
System.out.println(e.getMessage());
}
Statement stmt = conn.createStatement();
String sql = "SELECT * FROM FILM LIMIT 10";
stmt.executeQuery(sql);
return conn;
}
А это результат из консоли
Connection to SQLite has been established.
Exception in thread "main" java.lang.NullPointerException
at org.sqlite.Stmt.executeQuery(Stmt.java:121)
at Connect.connect(Connect.java:33)
at Main.main(Main.java:10)
заранее спасибо
@Sometowngeek Как правило, вы не должны ловить NullPointerException
, так как обычно это указывает на ошибки в вашем коде.
@MarkRotteveel Я думал, что Исключение д — это то, чего вам следует избегать.
@Sometowngeek Исключения NullPointerException обычно являются признаком ошибок, которые необходимо исправить, их обнаружение означает игнорирование этих проблем, и их следует избегать. Не перехватывайте исключение NullPointerException, а исправьте основную причину.
похоже, вы закрываете соединение прямо перед его использованием. Попробуйте переместить оператор + executeQuery внутри try-catch
Кажется, это ошибка в реализации оператора sqlite. Такая ситуация должна вызывать SQLException
сообщение «соединение закрыто» (или statement is closed
или подобное).
Ваш блок finally закрывает соединение, поэтому, когда оператор
Statement stmt = conn.createStatement();
будет достигнуто, будет выдано исключение NullPointerException. Чтобы решить эту проблему, ваш код должен выглядеть так:
public Connection connect() throws SQLException {
Connection conn = null;
try {
try {
Class.forName("org.sqlite.JDBC");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
String url = "jdbc:sqlite:sakila.db.sqlite3";
conn = DriverManager.getConnection(url);
System.out.println("Connection to SQLite has been established.");
Statement stmt = conn.createStatement();
String sql = "SELECT * FROM FILM LIMIT 10";
stmt.executeQuery(sql);
return conn;
} catch (SQLException e) {
System.out.println(e.getMessage());
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
}
}
Хм... Пробовали отлаживать? В большинстве случаев ошибки такого типа люди находят при отладке. Кстати, похоже, что вы не обрабатываете исключение
NullPointerException
в своем блоке catch. Добавьте для него блок catch там, где это необходимо.