SQLiteOpenHelper - 建立在SD卡上的数据库卡上、数据库、SQLiteOpenHelper、SD

2023-09-12 23:47:53 作者:裏予。

在我的测试Android应用程序我打算创建和访问数据库文件,这将是位于SD卡。我使用的一类,它扩展SQLiteOpenHelper帮助的主要活动。我想用同样的方式和以前一样,但我必须以某种方式更改数据库路径。你知不知道,该如何实现呢?

THX

延伸SQLiteOpenHelper类的我目前的code:

 公共类DatabaseDefinition扩展SQLiteOpenHelper {
私有静态最后弦乐DATABASE_NAME =test.db的;
私有静态最终诠释DATABASE_VERSION = 1;

公共DatabaseDefinition(上下文的背景下){
    超(背景下,DATABASE_NAME,空,DATABASE_VERSION);

}

@覆盖
公共无效的onCreate(SQLiteDatabase DB){
    db.execSQL(CREATE TABLE+ TABLE_NAME +(+ _ID +INTEGER PRIMARY KEY AUTOINCREMENT,+姓名+TEXT NOT NULL,+ SURNAME +TEXT NOT NULL,+电话+INT NOT NULL););
}

@覆盖
公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
    db.execSQL(DROP TABLE IF EXISTS+ TABLE_NAME);
    的onCreate(DB);

}
 

和$ C $我的主要的C:

 公共类DatabaseExampleActivity延伸活动{
   私人DatabaseDefinition数据库;
   私有静态的String [] FROM = {_ ID,姓名,电话};
   私有静态字符串ORDER_BY =DESC;


   @覆盖
   公共无效的onCreate(包savedInstanceState){
       super.onCreate(savedInstanceState);
       的setContentView(R.layout.main);
       数据库=新DatabaseDefinition(本);
       尝试{
         字符串名称= NULL;
         字符串姓= NULL;
         INT手机= 0;
         的addEvent(约翰福音,黑,111012345);

    }最后{
        database.close();
    }
  }



}
 
sd卡在电脑上找不到,怎么办

解决方案

首先,你必须指定SD卡的路径。你可以通过创建一个像这样的字符串:

 公共静态最后弦乐DATABASE_FILE_PATH =/ SD卡;
 

但你应该叫

  Environment.getExternalStorageDirectory()
 

要获得根路径到SD卡,并用它来创建数据库。之后,你创建的数据库,只要你想。下面是一个例子

 公共类DatabaseHelper
{
   私有静态最后字符串变量=DatabaseHelper;

  公共静态最后弦乐DATABASE_FILE_PATH = Environment.getExternalStorageDirectory();
  公共静态最后弦乐DATABASE_NAME =mydb的;
  公共静态最后弦乐TRACKS_TABLE =轨道;
  公共静态最后弦乐TRACK_INFO_TABLE =track_info;

  私有静态最后弦乐TRACKS_TABLE_CREATE =创建表
           + TRACKS_TABLE
           +(_id整数主键自动增量,标题文本不为空,说明文字为空,created_at日期不是null);;

  私有静态最后弦乐TRACK_INFO_TABLE_CREATE =创建表
           + TRACK_INFO_TABLE
           +(_id整数主键自动增量,track_id整数不为空,纬度真正不为空,东经实不为空,高度实不为空,created_at日期不是null);;

私人SQLiteDatabase数据库;

公共DatabaseHelper()
{
    尝试
    {
        数据库= SQLiteDatabase.openDatabase(DATABASE_FILE_PATH
            +文件分割符+ DATABASE_NAME,空,SQLiteDatabase.OPEN_READWRITE);
    }
    赶上(SQLiteException前)
    {
        Log.e(TAG,错误 - + ex.getMessage(),前);
        //错误意味着表不退出
        createTables();
    }
    最后
    {
        DBUtil.safeCloseDataBase(数据库);
    }
}

私人无效createTables()
{
    database.execSQL(TRACKS_TABLE_CREATE);
    database.execSQL(TRACK_INFO_TABLE_CREATE);
}

公共无效的close()
{
    DBUtil.safeCloseDataBase(数据库);
}

公共SQLiteDatabase getReadableDatabase()
{
    数据库= SQLiteDatabase.openDatabase(DATABASE_FILE_PATH
            +文件分割符+ DATABASE_NAME,空,
            SQLiteDatabase.OPEN_READONLY);
    返回数据库;
}

公共SQLiteDatabase getWritableDatabase()
{
    数据库= SQLiteDatabase.openDatabase(DATABASE_FILE_PATH
            +文件分割符+ DATABASE_NAME,空,
            SQLiteDatabase.OPEN_READWRITE);
    返回数据库;
}
 

而在最后,你必须在明显的是这样设置权限: android.permission.WRITE_EXTERNAL_STORAG​​E

祝你好运:) Arkde

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 SQLiteOpenHelper. I want to use it the same way as before, but I have to somehow change the database PATH. Do you know, how to achieve it?

thx

My current code of a class which extends SQLiteOpenHelper:

public class DatabaseDefinition extends SQLiteOpenHelper{
private static final String DATABASE_NAME="test.db";
private static final int DATABASE_VERSION=1;

public DatabaseDefinition(Context context) {
    super(context,DATABASE_NAME,null, DATABASE_VERSION);

}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE "+TABLE_NAME+" ("+ _ID +" INTEGER PRIMARY KEY AUTOINCREMENT, "+ NAME+" TEXT NOT NULL, " +SURNAME+" TEXT NOT NULL, "+PHONE+" INT NOT NULL);");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);
    onCreate(db);

}

And code of my main:

public class DatabaseExampleActivity extends Activity {
   private DatabaseDefinition database;
   private static String[] FROM={_ID, NAME, SURNAME,PHONE};
   private static String ORDER_BY=" DESC";


   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       database= new DatabaseDefinition(this); 
       try{
         String name = null;
         String surname=null;
         int phone=0;
         addEvent("John", "Black", 111012345);

    }finally{
        database.close();
    }
  }



}

解决方案

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