Я делаю приложение 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)