0

我正在创建一个将数据库保存在手机应用程序目录中的应用程序我的问题是我知道如何在 Eclipse 中查看数据库但我想在应用程序运行时查看手机中的数据库我将如何在手机中查看数据库???

             public class DataBase extends SQLiteOpenHelper{

//The Android's default system path of your application database.
private static String DB_PATH = "/data/data/com.myapp/databases/";
private static String DB_NAME = "YummiSlice.sqlite";

private SQLiteDatabase myDataBase; 
private SQLiteDatabase myData; 

private final Context myContext;

public DataBase(Context context) {
    super(context, DB_NAME, null, 1);
    this.myContext = context;
}   
/**
 * Creates a empty database on the system and rewrites it with your own database.
 * */
public void createDataBase() throws IOException{

    boolean dbExist = checkDataBase();
    if(dbExist){
        //do nothing - database already exist
    }else{  
        CopyFiles();
    }
}

private void CopyFiles()
{
    try
    { 
       InputStream is = myContext.getAssets().open(DB_NAME); 
       File outfile = new File(DB_PATH,DB_NAME);
       outfile.getParentFile().mkdirs();
       outfile.createNewFile();

      if (is == null)
      throw new RuntimeException("stream is null");
      else
      {
         FileOutputStream out = new FileOutputStream(outfile);      
          byte buf[] = new byte[128];
            do {
          int numread = is.read(buf);
                if (numread <= 0)
                    break;
          out.write(buf, 0, numread);
           } while (true);

            is.close();
            out.close();
      }

    }
    catch (IOException e)
    {
          throw new RuntimeException(e); 
    }

}    

/**
 * Check if the database already exist to avoid re-copying the file each time you open the  
     application.
 * @return true if it exists, false if it doesn't
 */
private boolean checkDataBase(){

    SQLiteDatabase checkDB = null;

    try{
        String myPath = DB_PATH + DB_NAME;
        checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

    }catch(SQLiteException e){

    }

    if(checkDB != null){
        checkDB.close();
    }

    return checkDB != null ? true : false;
}

/**
 * Copies your database from your local assets-folder to the just created empty database in the
 * system folder, from where it can be accessed and handled.
 * This is done by transfering bytestream.
 * */
 @SuppressWarnings("unused")
private void copyDataBase() throws IOException{

    //Open your local db as the input stream
    InputStream myInput = myContext.getAssets().open(DB_NAME);

    // Path to the just created empty db
    String outFileName = DB_PATH + DB_NAME;

    //Open the empty db as the output stream
    OutputStream myOutput = new FileOutputStream(outFileName);

    //transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = myInput.read(buffer))>0){
        myOutput.write(buffer, 0, length);
    }

    //Close the streams
    myOutput.flush();
    myOutput.close();
    myInput.close();

}

 public void openDataBase() throws SQLException{

    //Open the database
  String myPath = DB_PATH + DB_NAME;
    myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

 }

 @Override
public synchronized void close() {

        if(myDataBase != null)
            myDataBase.close();

        super.close();

}

@Override
public void onCreate(SQLiteDatabase db) {

}

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

}


  //---retrieve records---
  public Cursor selectQuery(String query) throws SQLException 
  {
    String myPath = DB_PATH + DB_NAME;
    myData = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
    Cursor mCursor =myData.rawQuery(query, null);
    mCursor.moveToFirst();      
    myData.close();

    return mCursor;
 }


 ////////// For Insert And Update Data ////////
 public void insert_update(String query) throws SQLException 
 {
    String myPath = DB_PATH + DB_NAME;
    myData = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
    myData.execSQL(query);
    myData.close();        
 }



}
4

1 回答 1

1

在 Eclipse 中,使用 root 手机或模拟器,您可以使用 DDMS 选项卡查看 SQLite 数据库。

转到文件资源管理器 -> 数据 -> 数据 -> 包名称 -> 数据库名称

您现在可以推送或拉取数据库...

在非root手机上,您必须使用adb backup来实现数据库的备份。
此处示例:http: //dbremes.wordpress.com/2013/02/11/how-to-get-a-backup-of-your-android-applications-database-in-windows/

于 2013-11-04T08:17:18.450 回答