AndroidプロジェクトでSQLCipherとともにOrmLiteを使用したいのですが、どちらのライブラリにも独自の抽象SQLiteOpenHelper
クラスを実装する必要があります。Javaでは、クラスが2つのクラスを拡張することは許可されておらず、別々に実装すると、それらは相互に通信しません。
どうすれば両方を一緒に使用できますか?SQLiteOpenHelper
実装の問題を解決するにはどうすればよいですか?
AndroidプロジェクトでSQLCipherとともにOrmLiteを使用したいのですが、どちらのライブラリにも独自の抽象SQLiteOpenHelper
クラスを実装する必要があります。Javaでは、クラスが2つのクラスを拡張することは許可されておらず、別々に実装すると、それらは相互に通信しません。
どうすれば両方を一緒に使用できますか?SQLiteOpenHelper
実装の問題を解決するにはどうすればよいですか?
Rejinderiによる回答をORMLite 4.43のパッチにまとめ、 JAR ファイルにコンパイルしました。これを Android プロジェクトに統合するには、次の手順を実行します。
libs/ormlite-android.jar
と置き換えますormlite-android-sqlcipher.jar
ただし、私が未操作の JAR ファイルを提供し、代わりにパッチのビルド手順に従うとは信じないでください。
編集:パッチを当てたライブラリでは、 への呼び出しgetReadableDatabase()
、getWritableDatabase()
およびOrmLiteSqliteOpenHelper
コンストラクターにパスワードを追加パラメーターとして渡す必要があります。DB ヘルパーを使用している場合は、適切に拡張してパスワードを OrmLiteSqliteOpenHelper に渡します。
AndroidでORMLiteとSQLCipherを一緒に使用するにはどうすればよいですか?
@Brunoが可能であるはずです。
うまくいく1つの方法は、ORMLiteのOrmLiteSqliteOpenHelper
クラスをプロジェクトにコピーし、名前をLocalOrmLiteSqliteOpenHelper
または何かに変更し、基本クラスをSQLCipher
ヘルパークラスに変更することです。彼らがクラスの名前をに変更しなかったなんて信じられませんSQLCipherSQLiteOpenHelper
。(不平を言う)
public abstract class LocalOrmLiteSqliteOpenHelper
extends info.guardianproject.database.sqlcipher.SQLiteOpenHelper {
もう1つの方法は、ヘルパーにSQLCipher
SQLiteOpenHelperを拡張させてから、必要なさまざまなものをOrmLiteSqliteOpenHelper
自分で実装することです。ただし、これにはもう少し作業が必要です。ORMLiteは、データベースの作成中にデータベース接続を少し調整する必要があります。そうしないと、再帰的になります。
これらのいずれかが機能するかどうかを教えてください。
これについて助けが必要な人を更新するために、ormlite のAndroid ソース部分全体をプロジェクトにコピーし、Android の db パッケージのすべての参照のインポートを SQLCipher のバージョンに変更できます。
基本的に、android.database.sqliteに一致するすべてのパッケージをnet.sqlcipher.databaseに変更する必要があります。
たとえば、
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
に
import net.sqlcipher.database.SQLiteDatabase;
import net.sqlcipher.database.SQLiteOpenHelper;
その後、db password パラメータを AndroidConnectionSource.java の getWriteableDatabase の呼び出しに入れます。
私はこれがかなり古いスレッドであることを知っています。しかし、私は最近同じように行かなければなりませんでした。解決策を探すために、2 つのスレッドを読みました: thisとthis。
そして今、私は機能するソリューションを持っています (GitHub から動作するデモを複製できます)。将来他の人を助けるために両方のスレッドに私の答えを入れてください。