SQLiteOpenHelper - creating database on SD card

前端 未结 2 844
独厮守ぢ
独厮守ぢ 2020-12-01 19:55

in my test android app I intend to create and access database file, which will be located on SD card. I am using main activity with help of a class, which extends SQLiteOpen

2条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-01 20:46

    First you have to specify the path of the sdcard. You can do that by creating a string like this:

    public static final String  DATABASE_FILE_PATH = "/sdcard";
    

    But for you should call

    Environment.getExternalStorageDirectory()   
    

    to get the root path to the SD card and use that to create the database. After that you create the database as you want. Here is an example

    public class DatabaseHelper
    { 
       private static final String TAG                  = "DatabaseHelper";
    
      public static final String  DATABASE_FILE_PATH      = Environment.getExternalStorageDirectory();
      public static final String  DATABASE_NAME      = "mydb"; 
      public static final String  TRACKS_TABLE        = "tracks";
      public static final String  TRACK_INFO_TABLE        = "track_info";
    
      private static final String TRACKS_TABLE_CREATE     = "create table "
               + TRACKS_TABLE
               + " (_id integer primary key autoincrement, title text not null, description text null, created_at date not null);";
    
      private static final String TRACK_INFO_TABLE_CREATE = "create table " 
               + TRACK_INFO_TABLE 
               + " (_id integer primary key autoincrement, track_id integer not null, latitude real not null, longitude real not null, altitude real not null, created_at date not null);";
    
    private SQLiteDatabase      database;
    
    public DatabaseHelper() 
    {  
        try
        {
            database = SQLiteDatabase.openDatabase(DATABASE_FILE_PATH
                + File.separator + DATABASE_NAME, null,SQLiteDatabase.OPEN_READWRITE);
        }
        catch (SQLiteException ex)
        {
            Log.e(TAG, "error -- " + ex.getMessage(), ex);
            // error means tables does not exits
            createTables();
        }
        finally
        {
            DBUtil.safeCloseDataBase(database);
        }
    }
    
    private void createTables()
    {
        database.execSQL(TRACKS_TABLE_CREATE);
        database.execSQL(TRACK_INFO_TABLE_CREATE);
    }
    
    public void close()
    {
        DBUtil.safeCloseDataBase(database);
    }
    
    public SQLiteDatabase getReadableDatabase()
    {
        database = SQLiteDatabase.openDatabase(DATABASE_FILE_PATH
                + File.separator + DATABASE_NAME, null,
                SQLiteDatabase.OPEN_READONLY);
        return database;
    }
    
    public SQLiteDatabase getWritableDatabase()
    {
        database = SQLiteDatabase.openDatabase(DATABASE_FILE_PATH
                + File.separator + DATABASE_NAME, null,
                SQLiteDatabase.OPEN_READWRITE);
        return database;
    }
    

    And in the end you have to set permission in manifest like this: android.permission.WRITE_EXTERNAL_STORAGE

    Good luck :) Arkde

提交回复
热议问题