2017-01-18 2 views
0

Я в основном хочу создать базу данных, и я думал, что этот код будет делать это, но он никогда не создает базу данных, потому что когда я ищу файл базы данных на своем компьютере, никакой базы данных когда-либо создавался. Я не совсем уверен, где создается база данных, либо если это можно было бы указать, это тоже было бы оценено. У меня есть код для помощника базы данных, поставщика и активности входа, потому что я думаю, что это моя проблема. Я также не знаю, связано ли это со мной, используя прямой запрос или нет, поскольку я использую ContentValues ​​в других частях, но если вы хотите увидеть какой-либо другой код, просто дайте мне знать. Спасибо!Как создать базу данных с помощью SQLite в Android Studio

Поставщик Database

public class ChargerPointsProvider extends ContentProvider { 

    @Override 
    public boolean onCreate(){ 
     return true; 
    } 

    /** URI matcher code for the content URI for the userInfo table */ 
    private static final int USER_INFO = 100; 

    /** URI matcher code for the content URI for a single user in the userInfo table */ 
    private static final int USER_INFO_ID = 101; 

    /** URI matcher code for the content URI for the couponInfo table */ 
    private static final int COUPON_INFO = 102; 

    /** URI matcher code for the content URI for a single coupon in the couponInfo table */ 
    private static final int COUPON_INFO_ID = 103; 

    /** URI matcher code for the content URI for the points table */ 
    private static final int POINTS_INFO = 104; 

    /** URI matcher code for the content URI for a single user in the points table */ 
    private static final int POINTS_INFO_ID = 105; 

    /** URI matcher code for the content URI for the userCouponsInfo table */ 
    private static final int USER_COUPONS_INFO = 106; 

    /** URI matcher code for the content URI for a single user in the userCouponsInfo table */ 
    private static final int USER_COUPONS_INFO_ID = 107; 

    /**Tag for the log messages*/ 
    public static final String LOG_TAG = ChargerPointsContract.class.getSimpleName(); 

    private ChargerPointsDbHelper mDbHelper; 

    /** 
    * UriMatcher object to match a content URI to a corresponding code. 
    * The input passed into the constructor represents the code to return for the root URI. 
    * It's common to use NO_MATCH as the input for this case. 
    */ 
    private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); 

    // Static initializer. This is run the first time anything is called from this class. 
    static { 
     // The calls to addURI() go here, for all of the content URI patterns that the provider 
     // should recognize. All paths added to the UriMatcher have a corresponding code to return 
     // when a match is found. 

     // The content URI of the form "content://com.example.android.chargerpoints/userInfo" will map to the 
     // integer code {@link #USER_INFO}. This URI is used to provide access to MULTIPLE rows 
     // of the userInfo table. 
     sUriMatcher.addURI(ChargerPointsContract.CONTENT_AUTHORITY, ChargerPointsContract.PATH_USER_INFO, USER_INFO); 

     // The content URI of the form "content://com.example.android.chargerpoints/userInfo/#" will map to the 
     // integer code {@link #USER_INFO_ID}. This URI is used to provide access to ONE single row 
     // of the userInfo table. 
     // 
     // In this case, the "#" wildcard is used where "#" can be substituted for an integer. 
     // For example, "content://com.example.android.chargerpoints/userInfo/3" matches, but 
     // "content://com.example.android.chargerpoints/userInfo" (without a number at the end) doesn't match. 
     sUriMatcher.addURI(ChargerPointsContract.CONTENT_AUTHORITY, ChargerPointsContract.PATH_USER_INFO + "/#", USER_INFO_ID); 

     sUriMatcher.addURI(ChargerPointsContract.CONTENT_AUTHORITY, ChargerPointsContract.PATH_COUPON_INFO, COUPON_INFO); 
     sUriMatcher.addURI(ChargerPointsContract.CONTENT_AUTHORITY, ChargerPointsContract.PATH_COUPON_INFO + "/#", COUPON_INFO_ID); 

     sUriMatcher.addURI(ChargerPointsContract.CONTENT_AUTHORITY, ChargerPointsContract.PATH_POINTS_INFO, POINTS_INFO); 
     sUriMatcher.addURI(ChargerPointsContract.CONTENT_AUTHORITY, ChargerPointsContract.PATH_POINTS_INFO + "/#", POINTS_INFO_ID); 

     sUriMatcher.addURI(ChargerPointsContract.CONTENT_AUTHORITY, ChargerPointsContract.PATH_USER_COUPONS_INFO, USER_COUPONS_INFO); 
     sUriMatcher.addURI(ChargerPointsContract.CONTENT_AUTHORITY, ChargerPointsContract.PATH_USER_COUPONS_INFO + "/#", USER_COUPONS_INFO_ID); 

    } 

    /** 
    * Perform the query for the given URI. Use the given projection, selection, selection arguments, and sort order. 
    */ 
    @Override 
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, 
         String sortOrder) { 

     // Get readable database 
     SQLiteDatabase database = mDbHelper.getReadableDatabase(); 

     // This cursor will hold the result of the query 
     Cursor cursor; 

     // Figure out if the URI matcher can match the URI to a specific code 
     int match = sUriMatcher.match(uri); 
     switch (match) { 
      case USER_INFO: 
       // For the USER_INFO code, query the userInfo table directly with the given 
       // projection, selection, selection arguments, and sort order. The cursor 
       // could contain multiple rows of the userInfo table. 
       cursor = database.query(ChargerPointsContract.UserInfoEntry.TABLE_NAME, projection, selection, selectionArgs, 
         null, null, sortOrder); 
       break; 
      case USER_INFO_ID: 
       // For the USER_INFO_ID code, extract out the ID from the URI. 
       // For an example URI such as "content://com.example.android.chargerpoints/userInfo/3", 
       // the selection will be "_id=?" and the selection argument will be a 
       // String array containing the actual ID of 3 in this case. 
       // 
       // For every "?" in the selection, we need to have an element in the selection 
       // arguments that will fill in the "?". Since we have 1 question mark in the 
       // selection, we have 1 String in the selection arguments' String array. 
       selection = ChargerPointsContract.UserInfoEntry._ID + "=?"; 
       selectionArgs = new String[] { String.valueOf(ContentUris.parseId(uri)) }; 

       // This will perform a query on the userInfo table where the _id equals 3 to return a 
       // Cursor containing that row of the table. 
       cursor = database.query(ChargerPointsContract.UserInfoEntry.TABLE_NAME, projection, selection, selectionArgs, 
         null, null, sortOrder); 
       break; 
      case COUPON_INFO: 
       cursor = database.query(ChargerPointsContract.CouponInfoEntry.TABLE_NAME, projection, selection, selectionArgs, 
         null, null, sortOrder); 
       break; 
      case COUPON_INFO_ID: 
       selection = ChargerPointsContract.CouponInfoEntry._ID + "=?"; 
       selectionArgs = new String[] { String.valueOf(ContentUris.parseId(uri)) }; 
       cursor = database.query(ChargerPointsContract.CouponInfoEntry.TABLE_NAME, projection, selection, selectionArgs, 
         null, null, sortOrder); 
       break; 
      case POINTS_INFO: 
       cursor = database.query(ChargerPointsContract.PointsEntry.TABLE_NAME, projection, selection, selectionArgs, 
         null, null, sortOrder); 
       break; 
      case POINTS_INFO_ID: 
       selection = ChargerPointsContract.PointsEntry._ID + "=?"; 
       selectionArgs = new String[] { String.valueOf(ContentUris.parseId(uri)) }; 
       cursor = database.query(ChargerPointsContract.PointsEntry.TABLE_NAME, projection, selection, selectionArgs, 
         null, null, sortOrder); 
       break; 
      case USER_COUPONS_INFO: 
       cursor = database.query(ChargerPointsContract.UserCouponsEntry.TABLE_NAME, projection, selection, selectionArgs, 
         null, null, sortOrder); 
       break; 
      case USER_COUPONS_INFO_ID: 
       selection = ChargerPointsContract.UserCouponsEntry._ID + "=?"; 
       selectionArgs = new String[] { String.valueOf(ContentUris.parseId(uri)) }; 
       cursor = database.query(ChargerPointsContract.UserCouponsEntry.TABLE_NAME, projection, selection, selectionArgs, 
         null, null, sortOrder); 
       break; 
      default: 
       throw new IllegalArgumentException("Cannot query unknown URI " + uri); 
     } 
     return cursor; 
    } 

    /** 
    * Insert new data into the provider with the given ContentValues. 
    */ 
    @Override 
    public Uri insert(Uri uri, ContentValues contentValues) { 
     final int match = sUriMatcher.match(uri); 
     switch (match) { 
      case USER_INFO: 
       return insertUserInfo(uri, contentValues); 
      case COUPON_INFO: 
       return insertCouponInfo(uri, contentValues); 
      case USER_COUPONS_INFO: 
       return insertUserCouponsInfo(uri, contentValues); 
      case POINTS_INFO: 
       return insertPointsInfo(uri,contentValues); 
      default: 
       throw new IllegalArgumentException("Insertion is not supported for " + uri); 
     } 
    } 

    @Override 
    public int delete(Uri uri, String s, String[] strings) { 
     return 0; 
    } 

    @Override 
    public int update(Uri uri, ContentValues contentValues, String s, String[] strings) { 
     return 0; 
    } 

    /** 
    * Insert a user into the database with the given content values. Return the new content URI 
    * for that specific row in the database. 
    */ 
    private Uri insertUserInfo(Uri uri, ContentValues values) { 

     // Check that the username is not null 
     String username = values.getAsString(ChargerPointsContract.UserInfoEntry.COLUMN_USERNAME); 
     if (username == null) { 
      throw new IllegalArgumentException("Username Required"); 
     } 

     // Check that the password is valid 
     String password = values.getAsString(ChargerPointsContract.UserInfoEntry.COLUMN_PASSWORD); 
     if (password == null) { 
      throw new IllegalArgumentException("Password Required"); 
     } 

     //Get writable database 
     SQLiteDatabase database = mDbHelper.getWritableDatabase(); 

     //Insert the new user with the given values 
     long id = database.insert(ChargerPointsContract.UserInfoEntry.TABLE_NAME, null, values); 

     //If the id is -1, then the insertion failed. Log an error and return null 
     if (id == -1) { 
      Log.e(LOG_TAG, "Failed to insert row for " + uri); 
      return null; 
     } 

     // Once we know the ID of the new row in the table, 
     // return the new URI with the ID appended to the end of it 
     return ContentUris.withAppendedId(uri, id); 
    } 

    /** 
    * Insert a coupon into the database with the given content values. Return the new content URI 
    * for that specific row in the database. 
    */ 
    private Uri insertCouponInfo(Uri uri, ContentValues values) { 

     // Check that the coupon is not null 
     Byte coupon = values.getAsByte(ChargerPointsContract.CouponInfoEntry.COLUMN_COUPON); 
     if (coupon == null) { 
      throw new IllegalArgumentException("Coupon Required"); 
     } 

     //Get writable database 
     SQLiteDatabase database = mDbHelper.getWritableDatabase(); 

     //Insert the new coupon with the given values 
     long id = database.insert(ChargerPointsContract.CouponInfoEntry.TABLE_NAME, null, values); 

     //If the id is -1, then the insertion failed. Log an error and return null 
     if (id == -1) { 
      Log.e(LOG_TAG, "Failed to insert row for " + uri); 
      return null; 
     } 

     // Once we know the ID of the new row in the table, 
     // return the new URI with the ID appended to the end of it 
     return ContentUris.withAppendedId(uri, id); 
    } 

    /** 
    * Insert a coupon a user has into the database with the given content values. Return the new content URI 
    * for that specific row in the database. 
    */ 
    private Uri insertUserCouponsInfo(Uri uri, ContentValues values) { 

     // Check that the userId is not null 
     int userId = values.getAsInteger(ChargerPointsContract.UserCouponsEntry._ID); 
     if (userId == 0) { 
      throw new IllegalArgumentException("User ID required"); 
     } 

     // Check that the name is not null 
     int couponId = values.getAsInteger(ChargerPointsContract.UserCouponsEntry.COUPON_ID); 
     if (couponId == 0) { 
      throw new IllegalArgumentException("Coupon ID required"); 
     } 

     boolean couponRedeemed = values.getAsBoolean(ChargerPointsContract.UserCouponsEntry.COLUMN_REDEEMED); 
     if (couponRedeemed == true) { 
      throw new IllegalArgumentException("Coupon already redeemed"); 
     } 

     //Get writable database 
     SQLiteDatabase database = mDbHelper.getWritableDatabase(); 

     //Insert the new pet with the given values 
     long id = database.insert(ChargerPointsContract.UserCouponsEntry.TABLE_NAME, null, values); 

     //If the id is -1, then the insertion failed. Log an error and return null 
     if (id == -1) { 
      Log.e(LOG_TAG, "Failed to insert row for " + uri); 
      return null; 
     } 

     // Once we know the ID of the new row in the table, 
     // return the new URI with the ID appended to the end of it 
     return ContentUris.withAppendedId(uri, id); 
    } 

    /** 
    * Insert a pet into the database with the given content values. Return the new content URI 
    * for that specific row in the database. 
    */ 
    private Uri insertPointsInfo(Uri uri, ContentValues values) { 

     // Check that the name is not null 
     int points = values.getAsInteger(ChargerPointsContract.PointsEntry.COLUMN_POINTS); 
     if (points == 0) { 
      throw new IllegalArgumentException("Points Required"); 
     } 

     //Get writable database 
     SQLiteDatabase database = mDbHelper.getWritableDatabase(); 

     //Insert the new pet with the given values 
     long id = database.insert(ChargerPointsContract.PointsEntry.TABLE_NAME, null, values); 

     //If the id is -1, then the insertion failed. Log an error and return null 
     if (id == -1) { 
      Log.e(LOG_TAG, "Failed to insert row for " + uri); 
      return null; 
     } 

     // Once we know the ID of the new row in the table, 
     // return the new URI with the ID appended to the end of it 
     return ContentUris.withAppendedId(uri, id); 
    } 

    /** 
    * Returns the MIME type of data for the content URI. 
    */ 
    @Override 
    public String getType(Uri uri) { 
     return null; 
    } 
} 

Helper Database

/*Database helper for Charger Points app. Manages database creation and version management.*/ 
public class ChargerPointsDbHelper extends SQLiteOpenHelper { 

    public static final String LOG_TAG = ChargerPointsDbHelper.class.getSimpleName(); 

    /* Name of the database file */ 

    private static final String DATABASE_NAME = "chargerPoints.db"; 

    /* Database version. If you change the database schema, you must increment the database version.*/ 

    private static final int DATABASE_VERSION = 1; 

    /*Constructs a new instance of {@link ChargerPointsDbHelper}. @param context of the app */ 

    public ChargerPointsDbHelper(Context context) { 

     super(context, DATABASE_NAME, null, DATABASE_VERSION); 

    } 

    /*This is called when the database is created for the first time.*/ 

    @Override 

    public void onCreate(SQLiteDatabase db) { 

     // Create a String that contains the SQL statement to create the User Info table 

     String SQL_CREATE_USER_INFO_TABLE = "CREATE TABLE " + UserInfoEntry.TABLE_NAME + " (" 

       + UserInfoEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 

       + UserInfoEntry.COLUMN_USERNAME + " TEXT NOT NULL, " 

       + UserInfoEntry.COLUMN_PASSWORD + " TEXT NOT NULL);"; 

     // Create a String that contains the SQL statement to create the Coupon Info table 

     String SQL_CREATE_COUPON_INFO_TABLE = "CREATE TABLE " + CouponInfoEntry.TABLE_NAME + " (" 

       + CouponInfoEntry.COUPON_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 

       + CouponInfoEntry.COLUMN_COUPON + " BLOB NOT NULL);"; 

     // Create a String that contains the SQL statement to create the Points table 

     String SQL_CREATE_POINTS_TABLE = "CREATE TABLE " + PointsEntry.TABLE_NAME + " (" 

       + PointsEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 

       + PointsEntry.COLUMN_POINTS + " INTEGER NOT NULL);"; 

     // Create a String that contains the SQL statement to create the UserCoupons table 

     String SQL_CREATE_USER_COUPONS_TABLE = "CREATE TABLE " + UserCouponsEntry.TABLE_NAME + " (" 

       + UserCouponsEntry._ID + " INTEGER NOT NULL, " 

       + UserCouponsEntry.COUPON_ID + " INTEGER NOT NULL, " 

       + UserCouponsEntry.COLUMN_REDEEMED + " BOOLEAN NOT NULL);"; 

     // Execute the SQL statement 

     db.execSQL(SQL_CREATE_USER_INFO_TABLE); 

     db.execSQL(SQL_CREATE_COUPON_INFO_TABLE); 

     db.execSQL(SQL_CREATE_POINTS_TABLE); 

     db.execSQL(SQL_CREATE_USER_COUPONS_TABLE); 

    } 

    /*This is called when the database needs to be upgraded.*/ 

    @Override 

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

     // The database is still at version 1, so there's nothing to do be done here. 
    } 
} 

Logon активность

(извините, но вот ссылка на него)

https://docs.google.com/document/d/1VrrDBixULAEdhKiyWJ-8FrtT0By0JDYid9VExVOLBwE/edit?usp=sharing

+1

'когда я ищу файл базы данных на моем компьютере' **, где ** вы ищете? И как**? База данных (по отказу) не отображается. Он создается внутри частного пространства приложения. И если у вас нет корневого устройства, вы не получите его оттуда. Если вы используете IDE, вы просто найдете его в обычном месте ('/ data/data/...'). –

+0

Если вы только начали работать с базами данных. Переход в область, ее более быстрая, эффективная и простая в использовании. https://realm.io/docs/java/latest/ –

ответ

-1

Попробуйте удалить приложение, чтобы созданная база данных стерлась. Очистите и переустановите приложение или обновите версию базы данных до 2.

Смежные вопросы