Accés a Dades
5.3 - eXist-db
Anem a provar-lo sobre un projecte nou.
- Creeu un nou projecte d'Android, que el podeu anomenar per exemple eXist-db_Accedir
- Incorporeu els drivers de eXist-db (eren 3). El millor seria incorporar-los en la vista de Project en app -> libs, i després apretar damunt amb el botó de la dreta en cada fitxer i triar Add as library
- Creeu el següent activity_main.xml, on tindrem únicament un TextView per a poder visualitzar els resultats
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text=""
android:id="@+id/text"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
A continuació copieu el següent codi en el MainActivity.kt, on sezillament ens connectem al MongoDB del servidor de l'Institut, i agafem el títol i preu dels llibres de la col·lecció libro ordenats per preu de forma descendent. Recordeu que no el podem fer en el programa principal, per això muntem un thread.
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.mongodb.MongoClient
import com.mongodb.MongoClientURI
import kotlinx.android.synthetic.main.activity_main.*
import org.bson.Document
import com.mongodb.DBCursor
class MainActivity : AppCompatActivity() {
internal var cont: String = ""
private var sqlThread: Thread = object : Thread() {
override fun run() {
val con = MongoClient(MongoClientURI("mongodb://ad:ieselcaminas@89.36.214.106/?authSource=test"))
val bd = con.getDatabase("test")
val ordenar = Document()
ordenar.put("precio", -1)
val llibres = bd.getCollection("libro").find()
for (llibre in llibres)
cont += llibre.get("titulo").toString() + " --> " + llibre.get("precio") + "\n"
con.close()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Des de la versió 3 d'Android, no es permet obrir una connexió des del thread principal.
// Per tant s'ha de crear un nou.
sqlThread.start()
// i ara esperem a que finalitze el thread fill unint-lo (join)
try {
sqlThread.join()
} catch (e: InterruptedException) {
e.printStackTrace()
}
text.setText(cont)
}
}
Aquest seria el resultat:
Llicenciat sota la Llicència Creative Commons Reconeixement NoComercial CompartirIgual 2.5