1

私は、コンテンツ プロバイダーの多くの例を見てきました。データベースの作成時にテーブル名が一致しません。以下の例では、テーブルは SQLite データベースの作成で「Country」として宣言されています。

  public static final String SQLITE_TABLE = "Country";

ただし、テーブル名はURIに「countries」と記述されています

  // create content URIs from the authority by appending path to database table
  public static final Uri CONTENT_URI = 
  Uri.parse("content://" + AUTHORITY + "/countries");

テーブル名は URI の権限の後にあるため、この例ではテーブル名は "countries" であると想定されていますが、これはデータベースの作成時に宣言されたものとは異なります

これらのうち、正しいテーブル名は どれCountryですかcountries?

 public class MyContentProvider extends ContentProvider{

  private MyDatabaseHelper dbHelper;

 private static final int ALL_COUNTRIES = 1;
 private static final int SINGLE_COUNTRY = 2;

// authority is the symbolic name of your provider
// To avoid conflicts with other providers, you should use 
// Internet domain ownership (in reverse) as the basis of your provider authority. 
private static final String AUTHORITY = "com.as400samplecode.contentprovider";

// create content URIs from the authority by appending path to database table
public static final Uri CONTENT_URI = 
 Uri.parse("content://" + AUTHORITY + "/countries");

// a content URI pattern matches content URIs using wildcard characters:
// *: Matches a string of any valid characters of any length.
// #: Matches a string of numeric characters of any length.
private static final UriMatcher uriMatcher;
static {
 uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
 uriMatcher.addURI(AUTHORITY, "countries", ALL_COUNTRIES);
 uriMatcher.addURI(AUTHORITY, "countries/#", SINGLE_COUNTRY);
}


 public class CountriesDb {

 public static final String KEY_ROWID = "_id";
 public static final String KEY_CODE = "code";
 public static final String KEY_NAME = "name";
 public static final String KEY_CONTINENT = "continent";

 private static final String LOG_TAG = "CountriesDb";
 public static final String SQLITE_TABLE = "Country";

  private static final String DATABASE_CREATE =
  "CREATE TABLE if not exists " + SQLITE_TABLE + " (" +
  KEY_ROWID + " integer PRIMARY KEY autoincrement," +
  KEY_CODE + "," +
  KEY_NAME + "," +
  KEY_CONTINENT + "," +
 " UNIQUE (" + KEY_CODE +"));";

  public static void onCreate(SQLiteDatabase db) {
  Log.w(LOG_TAG, DATABASE_CREATE);
  db.execSQL(DATABASE_CREATE);
  }

   public static void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
   Log.w(LOG_TAG, "Upgrading database from version " + oldVersion + " to "
   + newVersion + ", which will destroy all old data");
   db.execSQL("DROP TABLE IF EXISTS " + SQLITE_TABLE);
   onCreate(db);
  }

 }
4

1 に答える 1