2013-11-04 41 views
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();   
} 



} 

回答

0

喜,如果u運行在模擬器上的應用程序看到此鏈接view sqlite並沒有辦法在實際設備

+0

任何可用的應用程序顯示數據庫在realdevice? – user2947238

+0

抱歉有沒有應用程序來查看你有root用戶的電話來查看數據庫 – Mohan

1

在Eclipse中看到,有一個根深蒂固的手機或模擬器,可以使用DDMS選項卡查看SQLite數據庫。

進入文件管理器 - >數據 - >數據 - >包的名稱 - >數據庫名稱

您現在可以推或拉數據庫...

在非根深蒂固的電話,你必須使用adb備份來實現數據庫的備份。
例如在這裏:http://dbremes.wordpress.com/2013/02/11/how-to-get-a-backup-of-your-android-applications-database-in-windows/

+0

我將如何看到數據庫在運行時任何應用程序?我不想使用日食 – user2947238