Update einer Tabelle mit nur einem Datensatz funktioniert nicht richtig.

W

Wolverine566561

Gast
Hi,

ich habe folgendes Problem zu lösen:

Ich entwickle eine App, die Dartsturniere verwalten soll. Ich möchte gerne jedem angemeldeten Spieler App-intern eine eindeutige ID in Form eines Integer-Wertes verpassen.

Die Idee meiner Lösung ist diese:
Ich habe in der SQLite-Datenbank eine Tabelle user_id angelegt, die nur eine Spalte user_id_counter hat. Beim erstmaligen anlegen (onCreate()) der Datenbank wird ein Datensatz angelegt, der den Wert 1 enthält:
Code:
private static final String INIT_USER_ID = "INSERT INTO user_id VALUES ('1')";
db.execSQL(INIT_USER_ID);
Wenn nun ein Spieler in der App registriert wird, soll der id_counter ausgelesen werden und dem aktuellen Spieler zugewiesen werden. Die eingegebenen Spielerdaten werden dann in einer separaten Tabelle gespeichert. Die ID wird dann in Java um 1 inkrementiert und der inkrementierte Wert soll mittels update in die Datenbank geschrieben werden.

Das funktioniert auch, aber leider nur einmal :( Sobald die ID in id_counter den Wert 2 hat, funktioniert das nicht mehr. Warum???

Ich habe jetzt so ziemlich alles, was mir eingefallen ist am update-statement geändert. Immer mit dem gleichen Ergebnis.

Hier mal der Code der beiden Methoden aus der SQLiteOpenHelper-Subklasse:
Code:
	public int getUserId()
	{
		// Open readable db
		SQLiteDatabase db = getReadableDatabase();
		// Abfrage der userID
		Cursor result = db.rawQuery("SELECT * FROM user_id", null);

		result.moveToFirst();
		int userIdIdx = result.getColumnIndex(DatabaseHelper.USER_ID_FIELD_NAME);
		int userId = result.getInt(userIdIdx);
		return userId;
	}
	
	public void updateUserId(int userId)
	{
		SQLiteDatabase db = getWritableDatabase();
		ContentValues cvalues = new ContentValues();
		cvalues.put(USER_ID_FIELD_NAME, userId);
		String args = "user_id_counter IS NOT NULL";
		db.update(TABLE_NAME_USER_ID, cvalues, args, null);
		
	}

Hier der Code, der auf diese Methoden zugreift:
Code:
	public void addPlayerBtnClicked(View view)
	{
		// read username
		username = editTextUsername.getText().toString();
		// read pub
		pub = editTextPub.getText().toString();
		
		if(username.length() == 0)	// No username-input
		{
			// Toast-notification no input
			text = getResources().getString(R.string.toast_message_username_missing);
			Toast.makeText(context, text, duration).show();

		}
		else	// Username-input is not null
		{
			db = new DatabaseHelper(context);
			// UserId zuweisen
			userId = db.getUserId();
			// Insert player into DB
			db.insertUserIntoDB(userId, username, pub);

			// UserId update
			userId++;

			db.updateUserId(userId);
	
		}

Wär echt geil, wenn mir da jemand auf die Sprünge helfen könnte...
 
Hat das einen speziellen Grund, dass du das über eine extra Tabelle lösen möchtest?

Du hast doch bestimmt irgendwo in deiner Datenbank die einzelnen Spieler... Warum fügst du da nicht einen primary key ein? (der würde das manuelle & dadurch fehleranfällige inkrementieren, setzen, etc. der UserID automatisch übernehmen)

Insbesondere, was bringt dir eine einzelne Tabelle in der nur(!) eine ID steht, da ist dann ja noch keinerlei Verknüpfung mit dem Spieler vorhanden. Oder setzt du das dann auch manuell in die Spielerdatenbank?
 
Ich hatte zwar ursprünglich mit der einzelnen Tabelle noch etwas für einen anderen Programmteil lösen wollen, aber Autoinkrement klingt auch ganz verführerisch. Ich probiers mal aus.

Danke ;-)

(Sollte ich scheitern, melde ich mich hier nochmal...)
 

Ähnliche Themen

R
Antworten
6
Aufrufe
1.024
swa00
swa00
SaniMatthias
Antworten
19
Aufrufe
999
swa00
swa00
D
  • Data2006
Antworten
14
Aufrufe
554
jogimuc
J
Zurück
Oben Unten