Как мне этого добиться? Есть ли другой способ, кроме как вызвать KILL
для отдельного соединения? Если да, то я могу это сделать, но не понимаю, как определить точный PID моего длительного запроса. Есть ли для этого надежный метод?
Короче, как я могу, используя MySQL Connector J, отменить длительный запрос по требованию? Я был бы очень признателен за ссылку на рабочий пример с кодом, если это вообще возможно.
Для справки, вот пример кода, написанного на Kotlin:
< pre class="lang-kotlin Prettyprint-override">
Код: Выделить всё
val data = produce {
db.connection.use { conn ->
conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY).use { stmt ->
stmt.fetchSize = Int.MIN_VALUE
stmt.executeQuery("...").use { rs ->
var batch = mutableListOf()
while (rs.next()) {
// Handle result set here
val data = Data(
id = rs.getLong("id"),
subAccountId = rs.getInt("sub_account_id")
)
batch.add(data)
if (batch.size >= 100) {
println("Sending batch...")
send(batch)
if (done) {
println("Done, closing...")
close()
break
}
batch = mutableListOf()
}
}
println("Out of loop, cancelling statement")
synchronized(this) { // my lame attempt at cancelling
println("In synchronized")
if (!stmt.isClosed) {
println("Statement is not yet closed") // DOES print
stmt.cancel()
stmt.close()
conn.close() // probably pointless but I tried
}
}
}
println("Out of statement") // does NOT print
}
println("Out of connection") // does NOT print
}
println("End of production...") // does NOT print
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... y-via-jdbc
Мобильная версия