Hallo Android-Community,
ich habe nur zu Übungszwecken mit SQLite Datenbanken mir ein neues Projekt angelegt. Die App beinhaltet nur eine Listview, die die Datenbankeinträge, die man über einen Button einpflegen kann, auflistet.
Komischerweise bekomme ich eine Fehlermeldung und bin schon am verzweifeln woran das liegen kann. Habe mir den Code mehrmals angesehen und habe zu Beginn ein Semikolon in der SQL-Abfrage vergessen. Trotzdessen bekomme ich die gleiche Fehlermeldung. Eventuell könnt ihr etwas erkennen was ich nicht sehe.
Meine MainActivity:
Code
public class MainActivity extends AppCompatActivity {
private ListView listView;
private ListViewAdapter adapter;
private DBHelper dbHelper;
private List<DBObjects> dbObjectsList;
private TextView title;
private Button btn_refreshList, btn_add;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e("Eintrag ", "----------------------------------------1");
listView = (ListView) findViewById(R.id.list_view);
title = (TextView) findViewById(R.id.total);
Log.e("Eintrag ", "----------------------------------------2");
dbHelper = new DBHelper(this);
Log.e("Eintrag ", "----------------------------------------3");
dbObjectsList = new ArrayList<>();
Log.e("Eintrag ", "----------------------------------------4");
btn_add = (Button)findViewById(R.id.button5);
btn_refreshList = (Button)findViewById(R.id.button3);
btn_refreshList.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
loadDataBase();
}
});
btn_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addingNewEntry();
}
});
}
public void loadDataBase() {
Log.e("Eintrag ", "----------------------------------------5");
dbObjectsList = dbHelper.getAllEntries();
Log.e("Eintrag ", "----------------------------------------12");
if(dbObjectsList.size() == 0) {
Toast.makeText(this, "Keine Eintäge in der Datenbank vorhanden!", Toast.LENGTH_SHORT).show();
title.setVisibility(View.GONE);
}
Log.e("Eintrag ", "----------------------------------------13");
adapter = new ListViewAdapter(this, R.layout.item_listview, dbObjectsList, dbHelper);
listView.setAdapter(adapter);
title.setVisibility(View.VISIBLE);
title.setText("Total records: " + dbHelper.getTableEntriesCount());
}
// Methoden was das Menü betrifft
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.add) {
addingNewEntry();
return true;
}
return super.onOptionsItemSelected(item);
}
// Dialogfenster öffnet sich wenn ein neuer Eintrag getätigt werden möchte durch einen Alertdialogfenster
private void addingNewEntry() {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);
alertDialog.setTitle("Add a new Friend");
LinearLayout layout = new LinearLayout(this);
layout.setPadding(10, 10, 10, 10);
layout.setOrientation(LinearLayout.VERTICAL);
final EditText vorname = new EditText(this);
vorname.setHint("Vorname");
layout.addView(vorname);
final EditText name = new EditText(this);
name.setHint("Name");
layout.addView(name);
final EditText alter = new EditText(this);
alter.setHint("Alter");
layout.addView(alter);
alertDialog.setView(layout);
alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
DBObjects dbObjects = new DBObjects(getText(vorname), getText(name), getText(alter));
dbHelper.addNewEntry(dbObjects);
loadDataBase();
}
});
alertDialog.setNegativeButton("Cancel", null);
//show alert
alertDialog.show();
}
//get text available in TextView/EditText
private String getText(TextView textView) {
return textView.getText().toString().trim();
}
}
Alles anzeigen
Die DBHelper Klasse:
Code
public class DBHelper extends SQLiteOpenHelper {
// Hier findet die Definition der Datenbank statt, wie sie aufgebaut ist und mit den SQL-Befehlen womit sie aufgebaut werden
public static final String DB_NAME = "beispiel_Datenbank.db";
public static final int DB_VERSION = 1;
public static final String BEISPIEL_TABELLE = "tabelle1";
public static final String SPALTE_ID = "id";
public static final String SPALTE_VORNAME = "vorname";
public static final String SPALTE_NAME = "name";
public static final String SPALTE_ALTER = "alter";
public DBHelper(Context context) {
super(context, DB_NAME , null, DB_VERSION);
}
private static final String SQL_CREATE =
"CREATE TABLE " + BEISPIEL_TABELLE + "(" +
SPALTE_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
SPALTE_VORNAME + " TEXT, " +
SPALTE_NAME + " TEXT, " +
SPALTE_ALTER + " TEXT" + ");";
public static final String SQL_DROP = "DROP TABLE IF EXISTS " + BEISPIEL_TABELLE;
@Override
public void onCreate(SQLiteDatabase db) {
// mit execSQL wird die Tabelle erstellt
try {
db.execSQL(SQL_CREATE);
}catch (Exception ex) {
Log.e("LOG: ERROR MESSAGE!","Fehler beim Anlegen der Tabelle: " + ex.getMessage());
}
}
// Die onUpgrade-Methode wird aufgerufen, sobald die neue Versionsnummer höher
// als die alte Versionsnummer ist und somit ein Upgrade notwendig wird
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.d("LOG_TAG", "Die Tabelle mit Versionsnummer " + oldVersion + " wird entfernt.");
db.execSQL(SQL_DROP);
onCreate(db);
}
// Neuen Eintrag in die DB pflegen
public void addNewEntry(DBObjects dbObjects) {
// DB zum schreiben öffnen
SQLiteDatabase db = this.getWritableDatabase();
// Einträge aus der Klasse DBObjects holen
ContentValues values = new ContentValues();
values.put(SPALTE_VORNAME, dbObjects.getVorname());
values.put(SPALTE_NAME, dbObjects.getName());
values.put(SPALTE_ALTER, dbObjects.getAlter());
// Einträge in die DB-Tabelle einfügen
db.insert(BEISPIEL_TABELLE, null, values);
// DB schließen
db.close();
}
// Alle Einträge in der DB-Tabelle abrufen
public List<DBObjects> getAllEntries() {
Log.e("Eintrag ", "----------------------------------------6");
List<DBObjects> list1 = new ArrayList<>();
Log.e("Eintrag ", "----------------------------------------7");
// Abrage starten
String selectQuery = "SELECT * FROM " + BEISPIEL_TABELLE;
Log.e("Eintrag ", "----------------------------------------8");
SQLiteDatabase db = this.getWritableDatabase();
Log.e("Eintrag ", "----------------------------------------9");
Cursor cursor = db.rawQuery("select * from tabelle1", null);
Log.e("Eintrag ", "----------------------------------------10");
// Alle Einträge in der DB-Tabelle durchlaufen und in die Liste einfügen
if(cursor.moveToFirst()) {
do {
DBObjects dbObjects = new DBObjects();
dbObjects.setId(Integer.parseInt(cursor.getString(0)));
dbObjects.setVorname(cursor.getString(1));
dbObjects.setName(cursor.getString(2));
dbObjects.setAlter(cursor.getString(3));
list1.add(dbObjects);
} while (cursor.moveToNext());
Log.e("Eintrag ", "----------------------------------------11");
}
return list1;
}
// Einen Eintrag in der Tabelle aktualisieren/updaten
public int updateDBEntry(DBObjects dbObjects) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(SPALTE_VORNAME, dbObjects.getVorname());
values.put(SPALTE_NAME, dbObjects.getName());
values.put(SPALTE_ALTER, dbObjects.getAlter());
return db.update(BEISPIEL_TABELLE, values, SPALTE_ID + " = ?", new String[]{String.valueOf(dbObjects.getId())});
}
// Gesamtzahl der Einträge in der DB-Tabelle ausgeben lassen
public int getTableEntriesCount() {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("select " + SPALTE_ID + " from " + BEISPIEL_TABELLE, null);
int count = cursor.getCount();
cursor.close();
db.close();
return count;
}
// Eintag in der DB-Tabelle löschen
public void deleteEntrie(DBObjects dbObjects) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(BEISPIEL_TABELLE, SPALTE_ID + " = ?", new String[]{String.valueOf(dbObjects.getId())});
db.close();
}
}
Alles anzeigen