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