I am trying to create a sqlCipher encrypted database in sdCard and then read from there and store values.
This is my code.
public class DataBaseHelper extends SQLiteOpenHelper
{
private static String TAG = "DataBaseHelper"; // Tag just for the LogCat window
private static String DB_PATH ;//path of our database
private static String DB_NAME = "application-database";// Database name
private static int DATABASE_VERSION = 1;
private SQLiteDatabase mDataBase;
private final Context mContext;
private static final String DATABASE_CREATE_TABLE1 =
"create table notes (_id integer primary key autoincrement, myval);";
public DataBaseHelper(Context context)
{
super(context, DB_NAME, null, DATABASE_VERSION );
this.mContext = context;
DB_PATH = Environment.getExternalStorageDirectory() + "/Personal Folder/";
}
public void createDataBase() throws IOException
{
//If database not exists create it from the assets
boolean mDataBaseExist = checkDataBase();
if(!mDataBaseExist)
{
try
{
File dbFile = new File(DB_PATH + DB_NAME);
SQLiteDatabase.loadLibs(mContext);
dbFile.mkdirs();
dbFile.delete();
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbFile, "setPassword", null);
db.execSQL(DATABASE_CREATE_TABLE1);
Log.e(TAG, "createDatabase database created");
}
catch (SQLException mIOException)
{
throw new Error("Error Creating Database");
}
}
}
private boolean checkDataBase()
{
File dbFile = new File(DB_PATH + DB_NAME);
return dbFile.exists();
}
//Open the database, so we can query it
public boolean openDataBase() throws SQLException
{
String mPath = DB_PATH + DB_NAME;
SQLiteDatabase.loadLibs(mContext);
mDataBase = SQLiteDatabase.openDatabase(mPath, "setPassword", null, SQLiteDatabase.CREATE_IF_NECESSARY);
return mDataBase != null;
}
@Override
public synchronized void close()
{
if(mDataBase != null)
mDataBase.close();
super.close();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data");
/*
if (oldVersion == 2)
{
db.execSQL("ALTER TABLE notes ADD " + KEY_DATA + " blog");
db.execSQL("ALTER TABLE notes ADD " + KEY_TYPE + " text");
}
if (newVersion == 3)
{
db.execSQL("ALTER TABLE notes ADD " + KEY_TYPE + " text");
}
*/
}
@Override
public void onCreate(SQLiteDatabase arg0) {
// TODO Auto-generated method stub
}
}
public class PADatabaseAdapter
{
private static final String TAG = "DbAdapter";
private final Context mContext;
private DataBaseHelper mDbHelper;
private SQLiteDatabase mDb;
/**
* Database creation sql statement
*/
public PADatabaseAdapter(Context ctx)
{
this.mContext = ctx;
mDbHelper = new DataBaseHelper(mContext);
}
public PADatabaseAdapter createDatabase() throws SQLException
{
try
{
mDbHelper.createDataBase();
}
catch (IOException mIOException)
{
Log.e(TAG, mIOException.toString() + " UnableToCreateDatabase");
throw new Error("UnableToCreateDatabase");
}
return this;
}
public PADatabaseAdapter open(String password) throws SQLException
{
try
{
mDbHelper.openDataBase(password);
//mDbHelper.close();
mDb = mDbHelper.getmDataBase();
// mDbHelper.getWritableDatabase(password);
}
catch (SQLException mSQLException)
{
Log.e(TAG, "open >>"+ mSQLException.toString());
throw mSQLException;
}
System.gc();
return this;
}
public boolean isOpen ()
{
if (mDb !=null)
return mDb.isOpen();
else
return false;
}
public void rekey (String password)
{
mDb.execSQL("PRAGMA rekey = '" + password + "'");
System.gc();
}
public void close()
{
mDb.close();
mDbHelper.close();
}
This is the code I am using in my activity
mContext = this;
mDbHelper = new PADatabaseAdapter(this);
mDbHelper.createDatabase();
mDbHelper.open("setPassword");
long as = mDbHelper.createNote("abc");
mDbHelper.close();
mDbHelper.open("setPassword");
Cursor mCursor = mDbHelper.fetchAllNotes();
mDbHelper.close();
The problem is, in db.exec(CREATE_tABLE)
it either does not create table OR something else is wrong because long as = mDbHelper.createNote("abc");
gives error no such table notes