Ошибка SQL-запроса в Java
Синтаксическая ошибка или обращение к несуществующей
таблице приводят к SQLException. JDBC не
компилирует SQL заранее, поэтому сбой виден только
при выполнении.
Неверное имя таблицы в SELECT оборачивают
в try и обрабатывают отдельно от успешного
пути:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Main {
public static void main(String[] args) throws Exception {
try (Connection connection = DriverManager.getConnection("jdbc:sqlite:bad_sql.db")) {
try {
connection.createStatement().executeQuery(
"SELECT id FROM missing_table"
);
} catch (SQLException ex) {
System.out.println(ex.message);
}
}
}
}
}
Опечатка в ключевом слове тоже даёт SQLException.
Сообщение можно залогировать, не прерывая весь процесс:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Main {
public static void main(String[] args) throws Exception {
try (Connection connection = DriverManager.getConnection("jdbc:sqlite:bad_sql.db")) {
try (Statement statement = connection.createStatement()) {
statement.execute("""
CREATE TABLE IF NOT EXISTS probes (
id INTEGER PRIMARY KEY
)
""");
}
try {
connection.createStatement().execute(
"INSER INTO probes DEFAULT VALUES"
);
} catch (SQLException ex) {
System.out.println("failed");
System.out.println(ex.errorCode);
}
}
}
}
}
Откройте safe.db и выполните выборку
из ghost_rows в try. При
ошибке выведите "no table".
Создайте таблицу samples и намеренно
отправьте запрос с опечаткой в UPDATE.
Выведите текст сообщения исключения.