MySQL Library für Kotlin Multiplatform bzw. JS?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Das funktioniert auch nicht, wie du dir dies vorstelllst.

Datenbanken wie MySQL, MariaDB oder SQLite funktionieren nur im Backend, letzteres setzt sogar Fileaccess vorraus, was bei Websiten nicht gegeben ist.

Du musst zwangsläufig eine Schnittstelle (API, Stichwort RESTful-Service) implementieren, der mit dem Backend kommunizieren kann. Du kannst über den Browser keine Verbindungen über TCP-Sockets aufbauen (anders kannst du dich mit MariaDB oder MySQL nicht verbinden!).

Woher ich das weiß:Berufserfahrung
mprex 
Fragesteller
 29.03.2024, 17:04

Vielen Dank für die Antwort, ich bin jetzt dabei eine REST API im Backend jvm-Teil meines Kobweb Projektes zu programmieren (mithilfe der Kobweb API Library und dem Java MySQL connector) aber seltsamerweise funktioniert der exakt gleiche Code zum Verbinden mit der Datenbank den ich vorher in einem Testprojekt getestet hatte nicht. Hier der Code:

@Api
fun getUsers(context: ApiContext) {
    val mySQL = MySQL.Builder()
        .withUrl("ip")
        .withPort(3306)
        .withDatabase("database")
        .withUser("user")
        .withPassword("passwort")
        .create();

    val users = mutableListOf<User>()

    val rs = mySQL.query("SELECT * FROM testuser")!!
    while (rs.next()){
        users += User(name = rs.getString("name"), password = rs.getString("password"))
    }

    context.res.setBodyText(
        users.toString()
    )
}

Code von der MySQL Klasse: https://pastecode.io/s/om0uzyns

Wenn ich die API im Browser aufrufe bekomme ich nur:

java.lang.NullPointerException
	at ...webapp.api.GetUsersKt.getUsers(GetUsers.kt:20)
0
Bizarrus  29.03.2024, 21:32
@mprex

Was steht denn bei der GetUsers.kt auf Zeile 20? Beachte auch, dass der MySQL-Server von der API aus erreichbar sein muss. Wenn du die API auf einem Server laufen lässt, die Datenbank aber nur lokal läuft, kannst du auch schlecht drauf verbinden.

0
mprex 
Fragesteller
 29.03.2024, 21:33
@Bizarrus
val rs = mySQL.query("SELECT * FROM testuser")!!

Das ResultSet

0
Bizarrus  29.03.2024, 21:35
@mprex

NullPointerException wird hier wohl geworfen, weil das Query entweder fehlerhaft ist (existiert überhaupt die Tabelle?) oder eben keine Einträge existieren, was aber sicher nicht der Fehler sein wird.

0
mprex 
Fragesteller
 29.03.2024, 21:40
@Bizarrus

Wie gesagt habe ich den exakt gleichen Code in einem anderen Projekt auf dem selben PC und dort funktioniert er fehlerfrei, also ja die Tabelle existiert...

0
Bizarrus  29.03.2024, 21:41
@mprex

Ich Wette darauf, dass du irgendein Flüchtigkeitsfehler gemacht hast. Kontrolliere es nochmal Schritt für Schritt. Wenn es bereits in einem anderen Projekt funktioniert, dann hast du beim duplizieren sicherlich irgendetwas vergessen.

0
mprex 
Fragesteller
 29.03.2024, 21:48
@Bizarrus

Ich habe jetzt sicherlich schon 10 mal den Code rüber kopiert aber ja geht immer noch nicht. Ich vermute mal das es irgendwie an den Dependencies oder so liegen muss dass die vielleicht durch das Multiplatform Projekt nicht richtig compilet werden oder so, ist aber auch echt blöd weil ich praktisch keine Fehlermeldungen in der Konsole sehe bei einem Kobweb Projekt

0