0

I started working on app recently, to give myself a crash course in coding so I can give app and game development a whirl. The code below is what I wrote to create a database with three columns - an ID column, an email column, and a password column. (Full disclosure, i was using tutorials online to write this and am adding my own to it as practice).
I ran the full program on my phone, with the ability to add an delete from the database with only one column and it worked, but when I added code for the the third column, everything stopped working. Did I make a hideous mistake, or am I just missing a line somewhere? Thank you for reading this far.

import android.content.ContentValues;
import android.content.Context; 
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class EmailDBHandler extends SQLiteOpenHelper{

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "loginEntries.db";
public static final String TABLE_LOGINENTRIES = "loginEntries";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_EMAILADDRESS = "emailAddress";
/*this is where I initialized the column "password" */

public static final String COLUMN_PASSWORD = "password";


public EmailDBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
    super(context, DATABASE_NAME, factory, DATABASE_VERSION);
}


@Override
public void onCreate(SQLiteDatabase db) {
    String query = "CREATE TABLE " + TABLE_LOGINENTRIES + "(" +
            COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            COLUMN_EMAILADDRESS + " TEXT " +
/*this part of the code shows that I added the column to my table*/

            COLUMN_PASSWORD + " TEXT " + ");";
    db.execSQL(query);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_LOGINENTRIES);
    onCreate(db);
}

//add new row to Database

public void addEntry(LoginEntries entry){
    ContentValues values = new ContentValues();
    values.put(COLUMN_EMAILADDRESS,entry.get_emailAddress());
    values.put(COLUMN_PASSWORD,entry.get_password());
    SQLiteDatabase db = getWritableDatabase();
    db.insert(TABLE_LOGINENTRIES, null, values);
    db.close();
}


//delete items from database

public void deleteEmailEntry(String emailEntry){
    SQLiteDatabase db = getWritableDatabase();
    db.execSQL("DELETE FROM " + TABLE_LOGINENTRIES + " WHERE " + COLUMN_EMAILADDRESS + "=\"" +
            emailEntry + "\";");
}


public void deletePasswordEntry(String passwordEntry){
    SQLiteDatabase db = getWritableDatabase();
    db.execSQL("DELETE FROM " + TABLE_LOGINENTRIES + " WHERE " + COLUMN_PASSWORD + "=\"" +
            passwordEntry + "\";");
}

//Print database as a string
public String databaseToString(){
    String dbString = "";
    SQLiteDatabase db = getWritableDatabase();
    String query = "SELECT * FROM " + TABLE_LOGINENTRIES + " WHERE 1";

    //cursor point to a location in your results
    Cursor c = db.rawQuery(query, null);
    c.moveToFirst();
    while(!c.isAfterLast()){
        if(c.getString(c.getColumnIndex(COLUMN_EMAILADDRESS)) !=null){
            dbString += c.getString(c.getColumnIndex(COLUMN_EMAILADDRESS));
            dbString += "\n";
        }c.moveToNext();
    }
    db.close();
    return dbString;
}
public String databaseTwoString(){
    String dbStringTwo = "";
    SQLiteDatabase db = getWritableDatabase();
    String query = "SELECT * FROM " + TABLE_LOGINENTRIES + " WHERE 1";

    //cursor point to a location in your results
    Cursor c = db.rawQuery(query, null);
    c.moveToFirst();
    while(!c.isAfterLast()){
        if(c.getString(c.getColumnIndex(COLUMN_PASSWORD)) != null){
            dbStringTwo += c.getString(c.getColumnIndex(COLUMN_PASSWORD));
            dbStringTwo += "\n";
        }
        c.moveToNext();
    }
    db.close();
    return dbStringTwo;
}
}
/*The code below is the declaration of the items in my database*/

public class LoginEntries {
private int _id;
private String _emailAddress;
private String _password;

public LoginEntries(){}

public LoginEntries(String emailAddress, String password){
    this._emailAddress = emailAddress;
    this._password = password;
}
public void set_id(int _id) {
    this._id = _id;
}

public void set_emailAddress(String _emailAddress) {this._emailAddress = _emailAddress;}

public void set_password(String _password) {this._password = _password;}

public int get_id() {
    return _id;
}

public String get_emailAddress() {return _emailAddress;}

public String get_password() {  return _password;}
}
Shadow
  • 33,525
  • 10
  • 51
  • 64
DJ. Aduvanchik
  • 332
  • 5
  • 17

2 Answers2

4

Next time pls indicate the exact error message as well and pay attention to what products you tag your question with!

I believe that the error is in the following line:

COLUMN_EMAILADDRESS + " TEXT " +

because there is no comma to separate this column definition from the next one (password). Change it to:

COLUMN_EMAILADDRESS + " TEXT, " +

Pls note the comna after the word TEXT.

Shadow
  • 33,525
  • 10
  • 51
  • 64
0

You didn't increment DATABASE_VERSION to DATABASE_VERSION = 2 so the app doesn't realize it 'should' re-create the Database.

Either completely uninstall the app and delete all local cache(so that it 'has' to re-create DB on next run) or just make DB_Ver = 2.

mawalker
  • 2,072
  • 2
  • 22
  • 34