0

I am developing an application requiring persistence functionality.From my limited understanding two classes are required for this - SQLiteHelper class & DatabaseManager class.

To get things moving, I have a simple process that will take a single text input and insert it into the database. However, I am receiving an error:

12-29 19:17:47.952: E/SQLiteDatabase(5840): android.database.sqlite.SQLiteException: no such table: UserTable (code 1): , while compiling: INSERT INTO UserTable(username) VALUES (?)

Implying there is no user table, although when onCreate() is called, this table should be created.

I would be really greatful for any assistance in helping to overcome this obstacle. Below are the two classes used in creating the database functionality. Many thanks.

public class DatabaseHelper extends SQLiteOpenHelper {

private static final String DATABASE_NAME         = "NutrtionIntuition";
private static final int  DATABASE_VERSION    = 2;

// Database creation sql statement
private static final String DATABASE_CREATE =   "create table UserTable " +
                                                "( _id integer primary key,name text not null);";

public DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

// Method is called during creation of the database. Method is also called on upgrade of database?
@Override
public void onCreate(SQLiteDatabase database) {
            database.execSQL(DATABASE_CREATE);
}

// Method is called during an upgrade of the database,
@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {

                database.execSQL("DROP TABLE IF EXISTS User");
                onCreate(database);
} }
public class DatabaseManager{  

    private DatabaseHelper      dbHelper;  
    private SQLiteDatabase      database;  

    private static final String     USER_TABLE          = "UserTable";

    public static final String      KEY_ROWID           = "_id";
    public static final String      KEY_USERNAME        = "username";


    public DatabaseManager(Context context){  
      dbHelper = new DatabaseHelper(context);  
      database = dbHelper.getWritableDatabase();  
    }

    //Insert Records into the User Table
    public long insertRecords(int id, String name){  
        ContentValues values = new ContentValues();  
        //values.put(KEY_ROWID , id);  
        values.put(KEY_USERNAME, name); 
        Log.v("Test","Inserting.....");

        return database.insert(USER_TABLE, null, values);  
    }   

    public Cursor selectRecords() {
         String[] cols = new String[] {KEY_ROWID, KEY_USERNAME};  
         Cursor mCursor = database.query(true, USER_TABLE,cols,null  
              , null, null, null, null, null);  
         if (mCursor != null) {  
          mCursor.moveToFirst();  
       }  
       return mCursor; // iterate to get each value.
    }
}
2
  • Uninstall and reinstall your app so any possible old database versions are removed. Or clear your app data to achieve the same. Commented Dec 29, 2013 at 18:43
  • ... after which your updated onCreate() should run and your app will fail on other issues. Another bug, another logcat. Commented Dec 29, 2013 at 19:38

1 Answer 1

0

You're creating a table with _id and name, while inserting you are using _id and username. One more - in onUpgrade, DROP TABLE IF EXISTS User should be DROP TABLE IF EXISTS UserTable

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.