1. Mitglieder surfen ohne Werbung auf Android-Hilfe.de! ✔ Jetzt kostenlos Mitglied in unserer Community werden.
  1. DoctorBlack, 26.02.2018 #1
    DoctorBlack

    DoctorBlack Threadstarter Neuer Benutzer

    Für ein Schulprojekt müssen ein Mitschüler und Ich eine Stundeplan-App programmieren. Wir wollen das so machen, dass die Fächer in einer Datenbank angelegt werden, das heißt mit Fachname, Kürzel, Raum und Lehrer. Wir wissen jetzt nur nicht genau was man da am Besten für die Datenbank benutzen kann.

    Danke schon mal für die Hilfe im Voraus!
     
  2. swa00, 26.02.2018 #2
    swa00

    swa00 Moderator Team-Mitglied

    Hallo Doctor,

    ich denke , die Datenbank sollte wohl lokal sein.

    Dann definitiv SQLITE, die Bibliothek ist auch bereits im Standard SDK vorhanden ,
     
    Zuletzt bearbeitet: 27.02.2018
  3. deek, 26.02.2018 #3
    deek

    deek Android-Experte

    Es kommt jetzt so ein bisschen auf das Ziel an. Ist es ein Ziel sich mit SQL zu beschäftigen, dann ja definitiv mit Bordmitteln die sqlite ansprechen.
    Ist es ein Ziel eine elegante App zu programmieren würde ich auf ein orm wie Room, SugarORM oder ormlite setzen.
    Damit kannst du Java Objekte direkt gegen die lokale Datenbank mappen.
     
  4. Jaiel, 27.02.2018 #4
    Jaiel

    Jaiel Android-Lexikon

    Falls du Beispiele brauchst hier ist ein Kotlin Code um Kontakte in einer SQL Datenbank zu pflegen.
    Man kann Kontakten updaten, einfügen und löschen. Ist einfach nur etwas Logik mit SQL Befehlen.

    Kann dir auch eine Java Version zeigen aber ich denke es sollte lesbar sein hoffe ich.


    Code:
    class DataBaseHelper internal constructor(context: Context) : SQLiteOpenHelper(context, DB_NAME, null, DB_VERSION) {
    
        override fun onCreate(db: SQLiteDatabase) {
            db.execSQL(SQL_CREATE)
        }
    
        override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
    
        }
    
        companion object {
    
            private val DB_NAME = "contacts.db"
            private val DB_VERSION = 1
    
            internal val TABLE_CONTACT_LIST = "contacts_list"
    
            internal val COLUMN_ID = "_id"
            internal val COLUMN_NAME = "name"
            internal val COLUMN_NUM = "telefon"
            internal val COLUMN_PHOTO = "photo"
    
            private val SQL_CREATE = ("CREATE TABLE " + TABLE_CONTACT_LIST + "(" +
                    COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NUM + " TEXT NOT NULL,"
                    + COLUMN_PHOTO + " TEXT NOT NULL," + COLUMN_NAME + " TEXT NOT NULL);")
        }
    }
    

    Code:
    class DataBaseSource(context: Context) {
    
        private var database: SQLiteDatabase? = null
        private val dbHelper: DataBaseHelper
    
        private val columns = arrayOf(DataBaseHelper.COLUMN_ID, DataBaseHelper.COLUMN_PHOTO, DataBaseHelper.COLUMN_NAME, DataBaseHelper.COLUMN_NUM)
    
        val allContactsFromDB: List<Contact>
            get() {
                val contactList = ArrayList<Contact>()
    
                val cursor = database!!.query(DataBaseHelper.TABLE_CONTACT_LIST,
                        columns, null, null, null, null, null)
    
                cursor.moveToFirst()
                var contact: Contact
    
                while (!cursor.isAfterLast) {
                    contact = cursorToContact(cursor)
                    contactList.add(contact)
                    cursor.moveToNext()
                }
    
                cursor.close()
    
                return contactList
            }
    
        init {
    
            dbHelper = DataBaseHelper(context)
        }
    
        fun open() {
    
            database = dbHelper.writableDatabase
    
        }
    
        fun close() {
            dbHelper.close()
    
        }
    
        fun insertContactToDB(name: String, num: String, photo: String): Contact {
            val values = ContentValues()
            values.put(DataBaseHelper.COLUMN_NAME, name)
            values.put(DataBaseHelper.COLUMN_NUM, num)
            values.put(DataBaseHelper.COLUMN_PHOTO, photo)
    
    
            val cursor = database!!.query(DataBaseHelper.TABLE_CONTACT_LIST,
                    columns, DataBaseHelper.COLUMN_ID + "=" + database!!.insert(DataBaseHelper.TABLE_CONTACT_LIST, null, values), null, null, null, null)
    
            cursor.moveToFirst()
            val contact = cursorToContact(cursor)
            cursor.close()
    
            return contact
        }
    
        fun deleteContactFromDB(benutzer: Contact) {
            val id = benutzer.id.toLong()
    
            database!!.delete(DataBaseHelper.TABLE_CONTACT_LIST,
                    DataBaseHelper.COLUMN_ID + "=" + id, null)
    
    
        }
    
        fun updateContactInDB(id: Long, newName: String, newTelefon: String, newPhoto: String): Contact? {
            val values = ContentValues()
            values.put(DataBaseHelper.COLUMN_PHOTO, newPhoto)
            values.put(DataBaseHelper.COLUMN_NUM, newTelefon)
            values.put(DataBaseHelper.COLUMN_NAME, newName)
    
    
            if (!database!!.isOpen)
                return null
    
            database!!.update(DataBaseHelper.TABLE_CONTACT_LIST,
                    values,
                    DataBaseHelper.COLUMN_ID + "=" + id, null)
    
            val cursor = database!!.query(DataBaseHelper.TABLE_CONTACT_LIST,
                    columns, DataBaseHelper.COLUMN_ID + "=" + id, null, null, null, null)
    
            cursor.moveToFirst()
            val contact = cursorToContact(cursor)
            cursor.close()
    
            return contact
        }
    
        private fun cursorToContact(cursor: Cursor): Contact {
            return Contact(cursor.getInt(cursor.getColumnIndex(DataBaseHelper.COLUMN_ID)),
                    cursor.getString(cursor.getColumnIndex(DataBaseHelper.COLUMN_NAME)),
                    cursor.getString(cursor.getColumnIndex(DataBaseHelper.COLUMN_NUM)),
                    cursor.getString(cursor.getColumnIndex(DataBaseHelper.COLUMN_PHOTO)))
        }
    
        companion object {
    
            private val LOG_TAG = DataBaseSource::class.java!!.getSimpleName()
        }
    }
     
  5. markus.tullius, 01.03.2018 #5
    markus.tullius

    markus.tullius Android-Lexikon

    Hi @Jaiel,

    kurze Frage - habe gerade keine Lust mich durch die Doku zu prügeln - soweit ich sehe, muss du bei Kotlin keine explizite Datentypen deklarieren. Weiß du, ob Kotlin dafür Generics benutzt (das ganze läuft ja in der JavaVM)?
     
  6. deek, 01.03.2018 #6
    deek

    deek Android-Experte

    Nein, alle Typen sind zur compile-Zeit bekannt und stehen so im ByteCode wie bei Java. Was nicht zur compile-Zeit inferiert werden kann muss deklariert werden.
     
  7. Jaiel, 02.03.2018 #7
    Jaiel

    Jaiel Android-Lexikon

    Interessante Frage. Ohne Nachforschung wüsste ich es selber nicht. Ich vertraue da mal deeks Antwort aber.
     
  8. keen, 02.03.2018 #8
    keen

    keen Android-Hilfe.de Mitglied

    Es werden doch auch in dem Beispiel die Datentypen angeben. Es sieht evtl etwas anderes aus als bei anderen Sprachen.

    Zum Beispiel in der Funktion wird 'parametername: Datentyp' angeben.

    Bei Kotlin ist ein Vorteil, dass die Datentypen nicht ständig wiederholt werden müssen, wie zB in Java.

    Wenn eine Funktion in Kotlin ein String zurückgibt wird automatisch der Datentyp String zugewiesen.
    Beispiel:
    Code:
    
    fun concat(a:String, b:String): String = a+b
    val str = concat("Hallo", " Welt")
    println(str)
    

    Wobei auch hier der Returntype der Funktion optional ist.

    Functions: infix, vararg, tailrec - Kotlin Programming Language
     
    Zuletzt bearbeitet: 02.03.2018
  9. markus.tullius, 02.03.2018 #9
    markus.tullius

    markus.tullius Android-Lexikon

    Danke @keen, also ist Kotlin auch statisch typisiert. So wie bei VB oder Swift. Auf einer der Seite muss explizit der Datentyp stehen.
     
  10. deek, 04.03.2018 #10
    deek

    deek Android-Experte

    Der Typ muss nicht zwingend da stehen, in dem Beispiel von keen könnte man das :String von concat (Rückgabetyp) weglassen, weil es durch den return von a+b (wobei a und b String sind) bereits wohldefiniert ist.
    Aber ja, Kotlin ist statisch typisiert. Nur musst du den Typ nur dann schreiben wenn es für den Compiler nicht eindeutig herleitbar ist.
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
Eintrag in einer Datenbank mithilfe einer ListView löschen Android App Entwicklung 20.06.2018
Android Studio: Auf Datenbank mit zwei Spinner zugreifen. Android App Entwicklung 07.06.2018
SQLite Datenbank mit zwei Tabellen erstellen Android App Entwicklung 30.05.2018
Eigene Web DB für App Inventor Android App Entwicklung 10.02.2018
Spinner item in Datenbank schreiben mysql Android App Entwicklung 23.12.2017
[OFFEN] Keine doppelten Einträge in die Firebase Datenbank Android App Entwicklung 27.10.2017
[OFFEN] Übereinstimmung Spracherkennung Datenbank finden Android App Entwicklung 13.10.2017
[ERLEDIGT] Benutzer Aktivitäten überwachen Android App Entwicklung 30.09.2017
[OFFEN] Komplette SQLite Datenbank verschlüsseln Android App Entwicklung 19.09.2017
Du betrachtest das Thema "Was am besten für eine Datenbank benutzen?" im Forum "Android App Entwicklung",
  1. Android-Hilfe.de verwendet Cookies um Inhalte zu personalisieren und dir den bestmöglichen Service zu gewährleisten. Wenn du auf der Seite weitersurfst stimmst du der Cookie-Nutzung zu.  Ich stimme zu.