I try to write into a existing table in a encrypted(SQLCipher) database, but i get the error message "net.sqlcipher.database.SQLiteException: no such table ". How can i do it?
I have created a SQLCipher database and table via SQLite studio in the assets folder in my project. then i try to write into the table.
every time that the app starts would be the table created renew??
the methods in DatabaseHelper class:
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.util.Log;
import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;
import net.sqlcipher.database.SQLiteDatabase;
import java.io.File;
public class DatabaseHelper extends SQLiteAssetHelper {
public DatabaseHelper(Context context, String dbName) {
super(context, dbName, null, 1);
}
//Command Out
/* public void InitializeSQLCipher(File databaseFile, String dbPass, String tableName) {
databaseFile.mkdirs();
databaseFile.delete();
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFile, dbPass, null);
database.execSQL("create table " + tableName + "( ID INTEGER PRIMARY KEY AUTOINCREMENT, columnOne TEXT, columnTwo TEXT)");
database.close();
}*/
public void FillSQLCipher(File databaseFile, String dbPass, String tableName, String columnOne, String columnTwo, String values) {
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFile, dbPass, null);
ContentValues cValues = new ContentValues();
cValues.put(columnOne, values);
cValues.put(columnTwo, values);
database.insert(tableName, null, cValues);
database.close();
}
public void getDataFromTable(File databaseFile, String dbPass, String tableName) {
try {
SQLiteDatabase enDatabase = SQLiteDatabase.openOrCreateDatabase(databaseFile, dbPass, null);
Cursor cursor = enDatabase.rawQuery("select * from " + tableName, null);
if (cursor.moveToFirst()) {
do {
for (int i = 0; i < cursor.getColumnCount(); i++) {
String neu = cursor.getString(i);
Log.d("Data: ", neu + "");
}
} while (cursor.moveToNext());
cursor.close();
enDatabase.close();
}
cursor.close();
enDatabase.close();
}catch (Exception e){
Log.d(tableName, "can not read the table!");
}
}
public void cleanData(File databaseFile, String dbPass, String tableName) {
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFile, dbPass, null);
database.execSQL("delete from " +tableName);
database.close();
}
}
//and i the Activity
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import net.sqlcipher.database.SQLiteDatabase;
import java.io.File;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SQLiteDatabase.loadLibs(this);
Date now = new Date();
Calendar calendar = Calendar.getInstance();
calendar.getTimeInMillis();
//time now
Log.d("** Zeit jetzt: ", String.valueOf(now));
Log.d("** Milisekunden: ", String.valueOf(calendar.getTimeInMillis()));
***************************************\n");
Log.d("** verschlüsselte", "Datenbank:\n");
//Fill the table in the encrypted database
DatabaseHelper enDBHelper = new EncryptedDatabaseHelper(this, "encryptedDB.db");
File databaseFile = getDatabasePath("encryptedDB.db");
enDBHelper.InitializeSQLCipher(databaseFile, "abc123", "encryptedTableOne");
for (int i = 0; i < 21; i++) {
int randomValue = new Random().nextInt();
enDBHelper.FillSQLCipher(databaseFile, "abc123", "encryptedTableOne", "ColumnOne", "ColumnTwo", String.valueOf(randomValue));
}
//time now
now = new Date();
calendar = Calendar.getInstance();
Log.d("** Zeit jetzt: ", String.valueOf(now));
Log.d("** Milisekunden: ", String.valueOf(calendar.getTimeInMillis()));
Log.d("\n", " daten aus der verschlüsselten Datenbank ***************************************\n");
//read the table from encrypted database!
enDBHelper.getDataFromTable(databaseFile, "abc123", "encryptedTableOne");
/* enDBHelper.cleanData(databaseFile, "abc123", "encryptedTableOne");*/
Log.d("\n*******************", "\n");
now = new Date();
calendar = Calendar.getInstance();
Log.d("** Zeit jetzt: ", String.valueOf(now));
Log.d("** Milisekunden: ", String.valueOf(calendar.getTimeInMillis()));
Log.d("\n", " und hier ist Ende ***************************************\n");
}
}