Как быстро подключиться к базе данных в AsyncTask? - PullRequest
0 голосов
/ 23 июня 2019

Если соединение с базой данных потеряно, для повторного подключения потребовалось более одной минуты.Как я могу ускорить это переподключение?

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: соединение отклонено.После этого переподключение работает нормально.

1 Ответ

0 голосов
/ 25 июня 2019

Я нашел решение самостоятельно, и это довольно просто, просто добавив таймаут к URL-адресу jtds:

"jdbc:jtds:sqlserver://$ip:$port;instance=MSSQLSERVER;databaseName=$db;user=$username;password=$password;loginTimeout=5"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...