0

I have two identical errors in one line using SQLCipher.

I am checking the password for correctness. If the parameter is entered incorrectly, two exceptions occur.

I looked at this page to see if the password I entered was correct. When I repeated the code, I still got two exactly the same exceptions on the same line of code. One exception I can catch, the other is logged.

TaskOpenActivity:

 binding.openDatabaseFab.setOnClickListener(new View.OnClickListener() {
 @OptIn(markerClass = ExperimentalBadgeUtils.class)
 @Override
 public void onClick(View v) {
 Intent intent = new Intent(context, MainActivity.class);
 SharedPreferences sharedPreferences = context.getSharedPreferences("TaskCalendarPreferences", Context.MODE_PRIVATE);
 sharedPreferences.edit().putString("PassphraseMD5", TaskApplication.getInstance().md5(binding.passphrase.getText().toString())).commit();
 SharedPreferences preferences = context.getApplicationContext().getSharedPreferences("TaskCalendarPreferences", MODE_PRIVATE);
 String passphrase = preferences.getString("PassphraseMD5", "");
 Log.d("TaskCalendarLog", passphrase);
 try {
 TaskApplication.getInstance().loadAllData();
 startActivity(intent);
 finish();
 } catch (SQLiteException e) {
 Log.d("TaskCalendarLog", "Incorrect password");
 }
 }
 });

TaskApplication:

 public void loadAllData() {
 taskCalendarDBHelper = new TaskCalendarDBHelper(this);
 try {
 taskCalendarDBHelper.loadAllTasks();
 taskCalendarDBHelper.loadAllNotes();
 taskCalendarDBHelper.loadAllDayAlarms();
 } catch (SQLiteException e) {
 throw e;
 }
 }

TaskBDOpenHelper:

 public void loadAllTasks() {
 SharedPreferences preferences = context.getApplicationContext().getSharedPreferences("TaskCalendarPreferences", MODE_PRIVATE);
 passphrase = preferences.getString("PassphraseMD5", "");
 Log.d("TaskCalendarLog", passphrase);
 TaskManager taskManager = TaskManager.getInstance();
 //SQLiteDatabase actionsDatabase;
 //actionsDatabase = SQLiteDatabase.openDatabase(DATABASE_PATH + DATABASE_NAME, passphrase, null, SQLiteDatabase.OPEN_READONLY, hook);
 try {
 taskCalendarDatabase = SQLiteDatabase.openOrCreateDatabase(DATABASE_PATH + DATABASE_NAME, passphrase, null, null, hook); // <--- Exception here
 } catch (SQLiteException e) {
 throw e;
 }
 //actionsDatabase = this.getReadableDatabase();
 Cursor cursor = taskCalendarDatabase.query(TaskCalendarDBHelper.TASK_TABLE, null, null, null, null, null, null);
 if (cursor.moveToFirst()) {
 int taskInt = cursor.getColumnIndex(TASK);
 int date = cursor.getColumnIndex(DATE);
 int time = cursor.getColumnIndex(TIME);
 int hasAlarm = cursor.getColumnIndex(HAS_ALARM);
 int hasNotification = cursor.getColumnIndex(HAS_NOTIFICATION);
 int isDone = cursor.getColumnIndex(IS_DONE);
 int wasNotifiedIndex = cursor.getColumnIndex(WAS_NOTIFIED);
 int wasAlarmedIndex = cursor.getColumnIndex(WAS_ALARMED);
 boolean wasNotified;
 boolean wasAlarmed;
 int id = taskManager.getMaxId();
 do {
 if (cursor.getInt(wasNotifiedIndex) == 1) {
 wasNotified = true;
 } else {
 wasNotified = false;
 }
 if (cursor.getInt(wasAlarmedIndex) == 1) {
 wasAlarmed = true;
 } else {
 wasAlarmed = false;
 }
 Task task = new Task(cursor.getString(taskInt), cursor.getString(date), cursor.getString(time), cursor.getString(hasAlarm), cursor.getString(hasNotification), cursor.getString(isDone));
 task.setId(id);
 task.setWasNotified(wasNotified);
 task.setWasAlarmed(wasAlarmed);
 taskManager.getTaskList().add(task);
 //Log.d("TaskCalendarLog", taskManager.getTaskList() + "");
 id++;
 } while (cursor.moveToNext());
 taskManager.setMaxId(id);
 }
 cursor.close();
 taskCalendarDatabase.close();
 }

If you remove the try-catch block, you will get two absolutely identical errors.

2024年09月30日 20:11:57.458 18829-18829 SQLiteDatabase com.andrewpeterson.todocalendar E Failed to open database '/data/data/com.andrewpeterson.todocalendar/databases/TaskCalendarDatabase.db'.
 android.database.sqlite.SQLiteException: file is not a database (code 26): , while compiling: SELECT COUNT(*) FROM sqlite_schema;
 at net.zetetic.database.sqlcipher.SQLiteConnection.nativePrepareStatement(Native Method)
 at net.zetetic.database.sqlcipher.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:973)
 at net.zetetic.database.sqlcipher.SQLiteConnection.executeForLong(SQLiteConnection.java:628)
 at net.zetetic.database.sqlcipher.SQLiteConnection.open(SQLiteConnection.java:240)
 at net.zetetic.database.sqlcipher.SQLiteConnection.open(SQLiteConnection.java:202)
 at net.zetetic.database.sqlcipher.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:475)
 at net.zetetic.database.sqlcipher.SQLiteConnectionPool.open(SQLiteConnectionPool.java:189)
 at net.zetetic.database.sqlcipher.SQLiteConnectionPool.open(SQLiteConnectionPool.java:181)
 at net.zetetic.database.sqlcipher.SQLiteDatabase.openInner(SQLiteDatabase.java:1028)
 at net.zetetic.database.sqlcipher.SQLiteDatabase.open(SQLiteDatabase.java:1013)
 at net.zetetic.database.sqlcipher.SQLiteDatabase.openDatabase(SQLiteDatabase.java:840)
 at net.zetetic.database.sqlcipher.SQLiteDatabase.openDatabase(SQLiteDatabase.java:812)
 at net.zetetic.database.sqlcipher.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:929)
 at com.andrewpeterson.todocalendar.DataBase.TaskCalendarDBHelper.loadAllTasks(TaskCalendarDBHelper.java:194)
 at com.andrewpeterson.todocalendar.Application.TaskApplication.loadAllData(TaskApplication.java:98)
 at com.andrewpeterson.todocalendar.Activities.OpenDatabaseActivity1ドル.onClick(OpenDatabaseActivity.java:61)
 at android.view.View.performClick(View.java:7184)
 at android.view.View.performClickInternal(View.java:7157)
 at android.view.View.access3500ドル(View.java:821)
 at android.view.View$PerformClick.run(View.java:27660)
 at android.os.Handler.handleCallback(Handler.java:914)
 at android.os.Handler.dispatchMessage(Handler.java:100)
 at android.os.Looper.loop(Looper.java:225)
 at android.app.ActivityThread.main(ActivityThread.java:7563)
 at java.lang.reflect.Method.invoke(Native Method)
 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:994)
2024年09月30日 20:11:57.458 18829-18829 TaskCalendarLog com.andrewpeterson.todocalendar D Incorrect password

UPD:

This exceptions show in log after removing all try-catch blocks and trying to open db with incorrect password.

 2024年10月01日 10:27:12.848 23502-23502 SQLiteConnection com.andrewpeterson.todocalendar I Database keying operation returned:0
2024年10月01日 10:27:13.421 23502-23502 sqlcipher com.andrewpeterson.todocalendar D ERROR CORE sqlcipher_page_cipher: hmac check failed for pgno=1
2024年10月01日 10:27:13.421 23502-23502 sqlcipher com.andrewpeterson.todocalendar D ERROR CORE sqlite3Codec: error decrypting page 1 data: 1
2024年10月01日 10:27:13.421 23502-23502 sqlcipher com.andrewpeterson.todocalendar D ERROR CORE sqlcipher_codec_ctx_set_error 1
2024年10月01日 10:27:13.421 23502-23502 SQLiteLog com.andrewpeterson.todocalendar E (26) file is not a database in "SELECT COUNT(*) FROM sqlite_schema;"
2024年10月01日 10:27:13.427 23502-23502 SQLiteDatabase com.andrewpeterson.todocalendar E Failed to open database '/data/data/com.andrewpeterson.todocalendar/databases/TaskCalendarDatabase.db'.
 android.database.sqlite.SQLiteException: file is not a database (code 26): , while compiling: SELECT COUNT(*) FROM sqlite_schema;
 at net.zetetic.database.sqlcipher.SQLiteConnection.nativePrepareStatement(Native Method)
 at net.zetetic.database.sqlcipher.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:973)
 at net.zetetic.database.sqlcipher.SQLiteConnection.executeForLong(SQLiteConnection.java:628)
 at net.zetetic.database.sqlcipher.SQLiteConnection.open(SQLiteConnection.java:240)
 at net.zetetic.database.sqlcipher.SQLiteConnection.open(SQLiteConnection.java:202)
 at net.zetetic.database.sqlcipher.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:475)
 at net.zetetic.database.sqlcipher.SQLiteConnectionPool.open(SQLiteConnectionPool.java:189)
 at net.zetetic.database.sqlcipher.SQLiteConnectionPool.open(SQLiteConnectionPool.java:181)
 at net.zetetic.database.sqlcipher.SQLiteDatabase.openInner(SQLiteDatabase.java:1028)
 at net.zetetic.database.sqlcipher.SQLiteDatabase.open(SQLiteDatabase.java:1013)
 at net.zetetic.database.sqlcipher.SQLiteDatabase.openDatabase(SQLiteDatabase.java:840)
 at net.zetetic.database.sqlcipher.SQLiteDatabase.openDatabase(SQLiteDatabase.java:812)
 at net.zetetic.database.sqlcipher.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:929)
 at com.andrewpeterson.todocalendar.DataBase.TaskCalendarDBHelper.loadAllTasks(TaskCalendarDBHelper.java:193)
 at com.andrewpeterson.todocalendar.Application.TaskApplication.loadAllData(TaskApplication.java:98)
 at com.andrewpeterson.todocalendar.Activities.OpenDatabaseActivity1ドル.onClick(OpenDatabaseActivity.java:60)
 at android.view.View.performClick(View.java:7317)
 at android.view.View.performClickInternal(View.java:7291)
 at android.view.View.access3600ドル(View.java:838)
 at android.view.View$PerformClick.run(View.java:28247)
 at android.os.Handler.handleCallback(Handler.java:900)
 at android.os.Handler.dispatchMessage(Handler.java:103)
 at android.os.Looper.loop(Looper.java:219)
 at android.app.ActivityThread.main(ActivityThread.java:8676)
 at java.lang.reflect.Method.invoke(Native Method)
 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109)
2024年10月01日 10:27:13.427 23502-23502 AndroidRuntime com.andrewpeterson.todocalendar D Shutting down VM
2024年10月01日 10:27:13.431 23502-23502 QarthLog com.andrewpeterson.todocalendar I [PatchStore] createDisableExceptionQarthFile
--------- beginning of crash
2024年10月01日 10:27:13.431 23502-23502 QarthLog com.andrewpeterson.todocalendar I [PatchStore] create disable file for com.andrewpeterson.todocalendar uid is 10246
2024年10月01日 10:27:13.432 23502-23502 AndroidRuntime com.andrewpeterson.todocalendar E FATAL EXCEPTION: main
 Process: com.andrewpeterson.todocalendar, PID: 23502
 android.database.sqlite.SQLiteException: file is not a database (code 26): , while compiling: SELECT COUNT(*) FROM sqlite_schema;
 at net.zetetic.database.sqlcipher.SQLiteConnection.nativePrepareStatement(Native Method)
 at net.zetetic.database.sqlcipher.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:973)
 at net.zetetic.database.sqlcipher.SQLiteConnection.executeForLong(SQLiteConnection.java:628)
 at net.zetetic.database.sqlcipher.SQLiteConnection.open(SQLiteConnection.java:240)
 at net.zetetic.database.sqlcipher.SQLiteConnection.open(SQLiteConnection.java:202)
 at net.zetetic.database.sqlcipher.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:475)
 at net.zetetic.database.sqlcipher.SQLiteConnectionPool.open(SQLiteConnectionPool.java:189)
 at net.zetetic.database.sqlcipher.SQLiteConnectionPool.open(SQLiteConnectionPool.java:181)
 at net.zetetic.database.sqlcipher.SQLiteDatabase.openInner(SQLiteDatabase.java:1028)
 at net.zetetic.database.sqlcipher.SQLiteDatabase.open(SQLiteDatabase.java:1013)
 at net.zetetic.database.sqlcipher.SQLiteDatabase.openDatabase(SQLiteDatabase.java:840)
 at net.zetetic.database.sqlcipher.SQLiteDatabase.openDatabase(SQLiteDatabase.java:812)
 at net.zetetic.database.sqlcipher.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:929)
 at com.andrewpeterson.todocalendar.DataBase.TaskCalendarDBHelper.loadAllTasks(TaskCalendarDBHelper.java:193)
 at com.andrewpeterson.todocalendar.Application.TaskApplication.loadAllData(TaskApplication.java:98)
 at com.andrewpeterson.todocalendar.Activities.OpenDatabaseActivity1ドル.onClick(OpenDatabaseActivity.java:60)
 at android.view.View.performClick(View.java:7317)
 at android.view.View.performClickInternal(View.java:7291)
 at android.view.View.access3600ドル(View.java:838)
 at android.view.View$PerformClick.run(View.java:28247)
 at android.os.Handler.handleCallback(Handler.java:900)
 at android.os.Handler.dispatchMessage(Handler.java:103)
 at android.os.Looper.loop(Looper.java:219)
 at android.app.ActivityThread.main(ActivityThread.java:8676)
 at java.lang.reflect.Method.invoke(Native Method)
 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109)
2024年10月01日 10:27:13.456 23502-23502 Process com.andrewpeterson.todocalendar I Sending signal. PID: 23502 SIG: 9
---------------------------- PROCESS ENDED (23502) for package com.andrewpeterson.todocalendar ----------------------------

Sorry for my bad English. It's Google Translate.

asked Sep 30, 2024 at 13:25
19
  • Are you sure the path '/data/data/com.andrewpeterson.todocalendar/databases/TaskCalendarDatabase.db' is correct? Commented Sep 30, 2024 at 13:27
  • Yes, it's correct. Commented Sep 30, 2024 at 13:33
  • The exception message is "file is not a database". Could be possible that the file is broken / corrupted? Commented Sep 30, 2024 at 13:34
  • @GonzaloOdiard It's ok to get exception, because I try open db with wrong password, but why I get two exceptions instead of one. Commented Sep 30, 2024 at 13:36
  • @GonzaloOdiard BD is encrypted with SQLCipher. Commented Sep 30, 2024 at 13:36

1 Answer 1

0

I got it! It's OK, because Android core SQLiteDatabase.java output exception to log before throw it to me (I don't know why):

screen

 private void open() {
 try {
 try {
 openInner();
 } catch (SQLiteDatabaseCorruptException ex) {
 onCorruption();
 openInner();
 }
 } catch (SQLiteException ex) {
 Log.e(TAG, "Failed to open database '" + getLabel() + "'.", ex); //<-- Put to the log before catch in my code.
 close();
 throw ex;
 }
 }
answered Oct 3, 2024 at 14:44
Sign up to request clarification or add additional context in comments.

2 Comments

Please post code as text and not as an image.
@Abra Can I put image and code?

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

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.