Внешняя база данных MySQL в Котлине - PullRequest
3 голосов
/ 04 июля 2019

Я делаю приложение Kotlin, которое должно иметь внешнюю базу данных MySQL. Как я могу настроить его, чтобы получить желаемые результаты?

Приложение должно получить результат из внешней базы данных MySQL в виде строки. Я уже пытался использовать эту ссылку , но, похоже, что-то не так.

Я использую этот код:

class DBConnection {
    internal var conn: Connection? = null
    internal var username = "some username" 
    internal var password = "some password" 

    fun executeMySQLQuery() {
        var stmt: Statement? = null
        var resultset: ResultSet? = null
        try {
            stmt = conn!!.createStatement()
            resultset = stmt!!.executeQuery("SHOW DATABASES;")
            if (stmt.execute("SHOW DATABASES;")) {
                resultset = stmt.resultSet
            }
            while (resultset!!.next()) {
                println(resultset.getString("Database"))
            }
        } catch (ex: SQLException) {
            // handle any errors
            ex.printStackTrace()
        } finally {
            // release resources
            if (resultset != null) {
                try {
                    resultset.close()
                } catch (sqlEx: SQLException) {
                }
                resultset = null
            }
            if (stmt != null) {
                try {
                    stmt.close()
                } catch (sqlEx: SQLException) {
                }
                stmt = null
            }
            if (conn != null) {
                try {
                    conn!!.close()
                } catch (sqlEx: SQLException) {
                }
                conn = null
            }
        }
    }

    fun getConnection() {
        val connectionProps = Properties()
        connectionProps.put("user", username)
        connectionProps.put("password", password)
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance()
            conn = DriverManager.getConnection(
                "jdbc:" + "mysql" + "://" +
                        "remotemysql.com" +
                        ":" + "3306" + "/" +
                        "",
                connectionProps)
        } catch (ex: SQLException) {
            // handle any errors
            ex.printStackTrace()
        } catch (ex: Exception) {
            // handle any errors
            ex.printStackTrace()
        }
    }
}

И в основном файле я использую это:

val submit: Button = findViewById(R.id.submitBtn)
submit.setOnClickListener{
                val dbConnection: DBConnection
                dbConnection = DBConnection()
                dbConnection.getConnection()
                dbConnection.executeMySQLQuery()

        }

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

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: sk.letsdream, PID: 18521
    kotlin.KotlinNullPointerException
        at sk.letsdream.dbMethods.DBConnection.executeMySQLQuery(DBConnection.kt:19)
        at sk.letsdream.DochadzkaActivity$onCreate$2.onClick(DochadzkaActivity.kt:86)
        at android.view.View.performClick(View.java:7125)
        at android.view.View.performClickInternal(View.java:7102)
        at android.view.View.access$3400(View.java:801)
        at android.view.View$PerformClick.run(View.java:27301)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7319)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:934)

EDIT: После добавления mysql-connector-java-8.0.16 выдает ошибку, что мин. SDK должно быть 26. Но после изменения SDK на 26 это выдает ошибку типа:

java.lang.BootstrapMethodError: Exception from call site #39 bootstrap method
        at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.<clinit>(AbandonedConnectionCleanupThread.java:58)

Где 58. Строка:

Class.forName("com.mysql.jdbc.Driver").newInstance()

Когда у нас была более старая версия коннектора mysql, mysql-connector-java-5.1.47 выдает эту ошибку:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.

в этой строке кода:

var conn = DriverManager.getConnection("jdbc:mysql://remotemysql.com:3306/My_DB_Name", connectionProps)

1 Ответ

2 голосов
/ 09 июля 2019

Android не поддерживает MySQL из коробки.«Обычный» способ получить доступ к вашей базе данных - разместить перед ней сервер Restful и использовать протокол HTTPS для подключения к интерфейсу Restful.

Для доступа к MySQL в вашем приложении.Вы можете попробовать с Restful API .С Restful API вы можете перейти к тому же действию, которое вы хотите сделать с MySQL.Для взаимодействия с API Retrofit лучше библиотека.

Одна из локальных баз данных SQLite.Но я не рекомендую его использовать.

Или Вы можете использовать Firebase CloudStore .Лучшая и простая база данных NoSQL.

Если у вас есть запрос, просто закомментируйте его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...