1

複数の ContentProvider に同じデータベース名を使用すると、「そのようなテーブルはありません」という例外がスローされてクエリが失敗します。

参考文献、本、インターネットでの議論を調べましたが、解決策が見つかりませんでした。

マニフェストで最初に宣言された 1 つの ContentProvider を除いて、すべての ContentProvider が失敗することに気付きました。したがって、一意のデータベース名を指定すると、例外はなくなります。動作しますが、単一テーブルのデータベースが複数あるのは奇妙です。

可能であれば、問題が発生する理由を突き止めたいと思います。以下は本質的に私の実装です。

すべての ContentProvider には、内部プライベート クラスとして定義された個別の SQLiteOpenHelper があります。DATABASE_NAME と DATABASE_VERSION はすべて同じです。

public class TheFirstProvider extends ContentProvider {

    private static final String DATABASE_NAME = "dbname.db";
    private static final int DATABASE_VERSION = 1;

    private SQLiteOpenHelper dbHelper;

    @Override
    public boolean onCreate(){
        mContext = getContext();
        dbHelper = new FirstDbHelper(mContext, DATABASE_NAME, null, DATABASE_VERSION);
    }

    private class FirstDbHelper extends SQLiteOpenHelper {
         ...
        private static final String DATABASE_CREATE_FIRST = ... ;

        @Override
        public void onCreate(SQLiteDatabase db){
            db.execSQL(DATABASE_CREATE_FIRST);
        }
    }
4

2 に答える 2

0
     private class FirstDbHelper extends SQLiteOpenHelper{      
     public FirstDbHelper(Context context) {
        super(context,DATABASE_NAME,null,DATABASE_VERSION);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        String query="Your Query";
        db.execSQL(query);
    }

コードを以下のように設定します。動作します。

于 2012-12-05T11:59:26.093 に答える
0

Create table ステートメントをチェックして、それが正しく実行されたかどうかを確認し、クエリで使用しているテーブルが作成されたものとまったく同じ名前であるかどうかを確認します。DDL (create ステートメント) の小さなミスが、このような問題を静かに引き起こすことがあります。

また、このEclipseプラグインをインストールして、エミュレーターでデータベースを視覚化することをお勧めします。これにより、作成したテーブルを確認し、期待どおりかどうかを確認できます。

于 2012-12-05T12:27:46.277 に答える