0

I'm using a premade database and I seem to be getting an error when I try to update a row. The exact error from logcat is: (1) no such table: AUD. Heres what my dbhelper class looks like:

public class DataBaseHelper extends SQLiteOpenHelper {
private static String TAG = "DataBaseHelper"; // Tag just for the LogCat window
//destination path (location) of our database on device
private static String DB_PATH = "/data/data/com.example.simplecurrency3/databases/"; 
private static String DB_NAME ="Currencies";// Database name
private SQLiteDatabase mDataBase; 
private final Context mContext;

public DataBaseHelper(Context context) {
super(context, DB_NAME, null, 2);// 1? its Database Version
if(android.os.Build.VERSION.SDK_INT >= 17){
   DB_PATH = context.getApplicationInfo().dataDir + "/databases/";         
}
else
{
   DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
}
this.mContext = context;
}   

public void createDataBase() throws IOException {
//If database not exists copy it from the assets

boolean mDataBaseExist = checkDataBase();
if(!mDataBaseExist)
{
    this.getReadableDatabase();
    this.close();
    try 
    {
        //Copy the database from assests
        copyDataBase();
        Log.e(TAG, "createDatabase database created");
    } 
    catch (IOException mIOException) 
    {
        throw new Error("ErrorCopyingDataBase");
    }
}
}
//Check that the database exists here: /data/data/your package/databases/Da Name
private boolean checkDataBase()
{
    File dbFile = new File(DB_PATH + DB_NAME);
    //Log.v("dbFile", dbFile + "   "+ dbFile.exists());
    return dbFile.exists();
}

//Copy the database from assets
private void copyDataBase() throws IOException
{
    InputStream mInput = mContext.getAssets().open(DB_NAME);
    String outFileName = DB_PATH + DB_NAME;
    OutputStream mOutput = new FileOutputStream(outFileName);
    byte[] mBuffer = new byte[1024];
    int mLength;
    while ((mLength = mInput.read(mBuffer))>0)
    {
        mOutput.write(mBuffer, 0, mLength);
    }
    mOutput.flush();
    mOutput.close();
    mInput.close();
}

//Open the database, so we can query it
public boolean openDataBase() throws SQLException
{
    String mPath = DB_PATH + DB_NAME;
    //Log.v("mPath", mPath);
    mDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.CREATE_IF_NECESSARY);
    //mDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
    return mDataBase != null;
}

@Override
public synchronized void close() 
{
    if(mDataBase != null)
        mDataBase.close();
    super.close();
}

@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub

}

}

And when I try to update a row:

        Context context = getActivity().getApplicationContext();
        DataBaseHelper dbHelper = new DataBaseHelper(context);
        dbHelper.openDataBase();
        SQLiteDatabase db = dbHelper.getWritableDatabase();         
        db.execSQL("UPDATE AUD SET AUD = 2.0")
SpecialSnowflake
  • 945
  • 4
  • 16
  • 32
  • What is your database schema? – vokilam Aug 18 '14 at 13:30
  • CREATE TABLE AUD(AUD float, CAD float, CHF float, EUR float, GBP float, HKD float, INR float, JPY float, KRW float, MXN float, NOK float, NZD float, SEK float, SGD fl oat, USD float); every currency listed is also a table, containing the rates of those currencies (ex what 1 AUD is equal to in USD and vise versa). – SpecialSnowflake Aug 18 '14 at 13:38
  • when you modify your database schema you have to delete all files from your app on your device / emulator – TheOnlyJakobob Aug 18 '14 at 13:39
  • Try to list all tables in database as described here http://stackoverflow.com/questions/82875/how-do-i-list-the-tables-in-a-sqlite-database-file – vokilam Aug 18 '14 at 13:44
  • Do they exist in device's database? – vokilam Aug 18 '14 at 14:00
  • Apparently it doesn't matter what I name the db for the DB_NAME variable, I get the exact same error regardless. – SpecialSnowflake Aug 18 '14 at 14:02
  • If someone answers your question, it would be nice at least to put a short comment on their answer!!!! – Sadegh Aug 20 '14 at 04:04

2 Answers2

1

You have never called createDataBase() method! You can put it into onCreate() method.

Good luck

Sadegh
  • 2,669
  • 1
  • 23
  • 26
0

Instead of updating a row, first check whether the table really exists by using the following query.

SELECT name FROM sqlite_master WHERE type='table'
toadalskiii
  • 136
  • 2
  • 14