如何在 AsyncTask 中快速重新连接到数据库?
How to reconnect to Database quick in AsyncTask?
如果数据库连接丢失,重新连接需要一分多钟。我怎样才能加快重新连接的速度?
class MssqlConnectorHelper (val view: View){
private var isConnected = false
lateinit var mssqlConnector :MssqlConnector
var quitTask = false
inner class SyncData : AsyncTask<String, String, String>() {
override fun onPreExecute() {
mssqlConnector = MssqlConnector()
}
override fun doInBackground(vararg params: String?): String {
var conn : Connection? = null
while (!quitTask) {
if (conn == null || !isConnected) {
conn = mssqlConnector?.dbConn()
isConnected = conn != null
}
if (conn != null && isConnected) {
try {
val preparedStatement = conn.prepareStatement(params[0])
val cursor = preparedStatement.executeQuery()
if (cursor != null) {
while (cursor.next()) {
Log.i("SQL Result: ", cursor.getInt(1).toString() + " "
+ cursor.getInt(2).toString() + " "
+ cursor.getInt(3).toString() + " "
+ cursor.getInt(4).toString())
}
}
}catch (e : Exception) {
isConnected = false
conn = null
Log.e("SQL Error", "Database Exception: "+e.message)
}
}else {
Log.e("SQL Error", "Connection Error")
}
Thread.sleep(3000)
}
return "end background"
}
}
fun getPickUpOrder() {
SyncData().execute("SELECT * FROM pickUpOrder WHERE iStatus = 4")
}
}
我收到网络错误 IOException:连接被拒绝和 ConnectException:连接被拒绝。之后重新连接工作正常。
我自己找到了一个解决方案,很简单,只需将超时添加到 jtds URL:
"jdbc:jtds:sqlserver://$ip:$port;instance=MSSQLSERVER;databaseName=$db;user=$username;password=$password;loginTimeout=5"
如果数据库连接丢失,重新连接需要一分多钟。我怎样才能加快重新连接的速度?
class MssqlConnectorHelper (val view: View){
private var isConnected = false
lateinit var mssqlConnector :MssqlConnector
var quitTask = false
inner class SyncData : AsyncTask<String, String, String>() {
override fun onPreExecute() {
mssqlConnector = MssqlConnector()
}
override fun doInBackground(vararg params: String?): String {
var conn : Connection? = null
while (!quitTask) {
if (conn == null || !isConnected) {
conn = mssqlConnector?.dbConn()
isConnected = conn != null
}
if (conn != null && isConnected) {
try {
val preparedStatement = conn.prepareStatement(params[0])
val cursor = preparedStatement.executeQuery()
if (cursor != null) {
while (cursor.next()) {
Log.i("SQL Result: ", cursor.getInt(1).toString() + " "
+ cursor.getInt(2).toString() + " "
+ cursor.getInt(3).toString() + " "
+ cursor.getInt(4).toString())
}
}
}catch (e : Exception) {
isConnected = false
conn = null
Log.e("SQL Error", "Database Exception: "+e.message)
}
}else {
Log.e("SQL Error", "Connection Error")
}
Thread.sleep(3000)
}
return "end background"
}
}
fun getPickUpOrder() {
SyncData().execute("SELECT * FROM pickUpOrder WHERE iStatus = 4")
}
}
我收到网络错误 IOException:连接被拒绝和 ConnectException:连接被拒绝。之后重新连接工作正常。
我自己找到了一个解决方案,很简单,只需将超时添加到 jtds URL:
"jdbc:jtds:sqlserver://$ip:$port;instance=MSSQLSERVER;databaseName=$db;user=$username;password=$password;loginTimeout=5"