Ваш метод connect
создает объект подключения, который затем ... немедленно закрывается.Это не то, как вы используете try / finally.(наконец, означает: делайте это в тот момент, когда выполнение пытается выйти из связанного блока try. Это НЕ означает: если отсюда и далее происходит исключение где-либо во всей кодовой базе, делайте этот блок).
СОВЕТ: Исключениясодержит 5 полезных вещей: тип, сообщение, трассировка стека и причинная цепочка.Печать всего, что трудно сделать;так что не пытайся.Если вы не знаете, как обрабатывать исключение, либо бросьте его вперед (просто укажите throws Exception
в вашем основном методе здесь), либо если вы не можете или не хотите этого, throw new RuntimeException(e);
- намного лучший способпо сравнению с e.printStackTrace()
.
Пример лучшей реализации:
import java.sql.*;
public class SqliteConnection {
public static Connection connect() throws SQLException
{
Connection conn = DriverManager.getConnection(url);
System.out.println("Connection to SQLite has been established.");
return conn;
}
public static void main(String[] args) throws SQLException
{
try (Connection c = connect(); Statement stmt = c.createStatement();) {
String sql = "CREATE TABLE Car (CarID INT NOT NULL, Manufacturer TEXT, Type TEXT, FuelEfficiency REAL, PRIMARY KEY(CarID));";
stmt.execute(sql);
}
}
}
Обратите внимание, как в приведенном выше примере:
Использует 'ARM'Конструкция (Automatic Resource Management) для создания объектов соединений и операторов, гарантирующих, что они всегда закрываются при выходе из блока независимо от того, как он выходит.
Код намного короче и легче для чтения.
Исключения SQLE, которые происходят, будут печатать всю необходимую информацию сейчас, а не только биты и кусочки.Кроме того, в случае возникновения исключения путь кода, который вызвал его, будет прерван, а не продолжен в недопустимом состоянии.