Inhalt
Aktueller Ordner:
duesseldorfer-schuelerinventar-android-studioDatabaseHelper.java
package com.example.personalitytest.utils;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import com.example.personalitytest.models.Profile;
import com.example.personalitytest.models.User;
import java.util.ArrayList;
import java.util.List;
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "personality_test.db";
private static final int DATABASE_VERSION = 1;
// Tabellennamen
private static final String TABLE_USERS = "users";
private static final String TABLE_PROFILES = "profiles";
// Spalten fΓΌr users
private static final String KEY_USER_ID = "id";
private static final String KEY_USERNAME = "username";
private static final String KEY_EMAIL = "email";
private static final String KEY_PASSWORD_HASH = "password_hash";
private static final String KEY_IS_ADMIN = "is_admin";
private static final String KEY_LAST_LOGIN = "last_login";
// Spalten fΓΌr profiles
private static final String KEY_PROFILE_ID = "id";
private static final String KEY_USER_ID_FK = "user_id";
private static final String KEY_PROFILE_NAME = "name";
private static final String KEY_CREATED_AT = "created_at";
private static final String KEY_MODIFIED_AT = "modified_at";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_USERS_TABLE = "CREATE TABLE " + TABLE_USERS + "("
+ KEY_USER_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ KEY_USERNAME + " TEXT UNIQUE,"
+ KEY_EMAIL + " TEXT UNIQUE,"
+ KEY_PASSWORD_HASH + " TEXT,"
+ KEY_IS_ADMIN + " INTEGER DEFAULT 0,"
+ KEY_LAST_LOGIN + " DATETIME"
+ ")";
String CREATE_PROFILES_TABLE = "CREATE TABLE " + TABLE_PROFILES + "("
+ KEY_PROFILE_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ KEY_USER_ID_FK + " INTEGER,"
+ KEY_PROFILE_NAME + " TEXT,"
+ KEY_CREATED_AT + " DATETIME,"
+ KEY_MODIFIED_AT + " DATETIME,"
+ "FOREIGN KEY(" + KEY_USER_ID_FK + ") REFERENCES " + TABLE_USERS + "(" + KEY_USER_ID + ")"
+ ")";
db.execSQL(CREATE_USERS_TABLE);
db.execSQL(CREATE_PROFILES_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_PROFILES);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_USERS);
onCreate(db);
}
// User-Methoden
public long addUser(User user) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_USERNAME, user.getUsername());
values.put(KEY_EMAIL, user.getEmail());
values.put(KEY_PASSWORD_HASH, user.getPasswordHash());
values.put(KEY_IS_ADMIN, user.isAdmin() ? 1 : 0);
long id = db.insert(TABLE_USERS, null, values);
db.close();
return id;
}
public User getUser(String username) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_USERS,
new String[]{KEY_USER_ID, KEY_USERNAME, KEY_EMAIL, KEY_IS_ADMIN, KEY_LAST_LOGIN},
KEY_USERNAME + "=?",
new String[]{username}, null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
User user = new User(
cursor.getInt(0),
cursor.getString(1),
cursor.getString(2),
cursor.getInt(3) == 1
);
cursor.close();
db.close();
return user;
}
db.close();
return null;
}
// Profile-Methoden
public long addProfile(Profile profile) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_USER_ID_FK, profile.getUserId());
values.put(KEY_PROFILE_NAME, profile.getName());
values.put(KEY_CREATED_AT, System.currentTimeMillis());
values.put(KEY_MODIFIED_AT, System.currentTimeMillis());
long id = db.insert(TABLE_PROFILES, null, values);
db.close();
return id;
}
public List<Profile> getUserProfiles(int userId) {
List<Profile> profileList = new ArrayList<>();
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_PROFILES,
new String[]{KEY_PROFILE_ID, KEY_PROFILE_NAME, KEY_CREATED_AT, KEY_MODIFIED_AT},
KEY_USER_ID_FK + "=?",
new String[]{String.valueOf(userId)}, null, null, KEY_CREATED_AT + " DESC", null);
if (cursor.moveToFirst()) {
do {
Profile profile = new Profile();
profile.setId(cursor.getInt(0));
profile.setName(cursor.getString(1));
profile.setCreatedAt(new java.util.Date(cursor.getLong(2)));
profile.setModifiedAt(new java.util.Date(cursor.getLong(3)));
profile.setUserId(userId);
profileList.add(profile);
} while (cursor.moveToNext());
}
cursor.close();
db.close();
return profileList;
}
// Weitere Methoden fΓΌr Update, Delete, etc.
}