2013-01-17 4 views
2

comment enregistrer .db ou .sqlite dans le dossier assets. A ce moment je fais que:Stockez DataBASE .db ou .sqlite dans les assets dans android

@Override 
    public void onCreate(SQLiteDatabase db) { 
     mDatabase = db; 

      SQLiteDatabase.openOrCreateDatabase("assets/"+DATABASE_NAME+".db", null); 

     mDatabase.execSQL(FTS_TABLE_CREATE); 


    } 

mais l'erreur donnant openOrCreateDatabase. J'essaie à la fois avec .db et .sqlite mais l'erreur est la même.

+0

http://stackoverflow.com/questions/9109438/how-to-use-an-database-and-and-android-application/9109728#9109728 –

Répondre

6

Vous ne pouvez pas ouvrir la base de données à partir d'éléments - vous devez d'abord la copier dans le stockage local.

+1

ok. Pouvez-vous s'il vous plaît donner un code sol ou un lien à partir de laquelle je peux undertsand plus – User42590

+0

http://stackoverflow.com/questions/4447477/android-how-to-copy-files-in-assets-to-sdcard donne un exemple, si vous regardez la réponse acceptée. Vous aurez principalement besoin de la méthode 'copyFile()', car vous connaissez déjà le nom du fichier que vous copiez. Vous pouvez également copier pour sécuriser le stockage au lieu de sdcard: Il suffit de laisser le '/ sdcard /' + lors de la création du flux de sortie. – 323go

1

Vous devez d'abord vérifier e base de données dans le dossier de bases de données (il n'y a rien)

alors vous devez copier le .db ou .sqlite à données/données/bases de données dossier et que seulement u peut ouvrir la base de données

ici est mon exemple de code pour le faire:

public void createDataBase() throws IOException { 
    boolean dbExist = checkDataBase(); 
    //boolean dbExist = false; 
    if (dbExist) { 
     // do nothing - database already exist 
    } else { 

     this.getReadableDatabase(); 
     try { 
      copyDataBase(); 
     } catch (IOException e) { 
      throw new Error("Error copying database"); 
     } 
    } 

} 

// this method will check the existance of database 
private boolean checkDataBase() { 
    SQLiteDatabase checkDB = null; 

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

    } 

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

    return checkDB != null ? true : false; 
} 

// copy the database file from asset folder to the DDMS database folder 
private void copyDataBase() throws IOException { 
    // Open your local db as the input stream 
    InputStream myInput = _context.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(); 
} 

// open the database 
public boolean openDataBase() throws SQLException { 
    String mPath = DB_PATH + DB_NAME; 
    // Log.v("mPath", mPath); 
    db = SQLiteDatabase.openDatabase(mPath, null, 
      SQLiteDatabase.CREATE_IF_NECESSARY); 
    return db != null; 
} 
+0

merci. mais acually je veux obtenir ce fichier .db et le mettre dans mon dossier d'actifs. je veux joindre le fichier .db avec mon .apk – User42590

+1

donc pour cela vous devez copier manuellement le fichier .db dans votre dossier de ressources – GOLDEE

+0

yah buit je dois accéder à ce fichier et je ne sais pas comment. S'il vous plaît répondre à ma cette question si possible http://stackoverflow.com/questions/14373380/how-to-attach-db-file-with-another-apk-android – User42590

2

ici, je vous donne le code complet, plz réponse si vous le succès

public class DataBaseHelper extends SQLiteOpenHelper{ 
private Context mycontext; 

private String DB_PATH = "/data/data/gr.peos/databases/"; 
//private String DB_PATH = mycontext.getApplicationContext().getPackageName()+"/databases/"; 
private static String DB_NAME = "BLib.sqlite";//the extension may be .sqlite or .db 
public SQLiteDatabase myDataBase; 
/*private String DB_PATH = "/data/data/" 
          + mycontext.getApplicationContext().getPackageName() 
          + "/databases/";*/ 

public DataBaseHelper(Context context) throws IOException { 
    super(context,DB_NAME,null,1); 
    this.mycontext=context; 
    boolean dbexist = checkdatabase(); 
    if(dbexist) 
    { 
     //System.out.println("Database exists"); 
     opendatabase(); 
    } 
    else 
    { 
     System.out.println("Database doesn't exist"); 
    createdatabase(); 
    } 

} 

public void createdatabase() throws IOException{ 
    boolean dbexist = checkdatabase(); 
    if(dbexist) 
    { 
     //System.out.println(" Database exists."); 
    } 
    else{ 
     this.getReadableDatabase(); 
    try{ 
      copydatabase(); 
     } 
     catch(IOException e){ 
      throw new Error("Error copying database"); 
     } 
    } 
} 
private boolean checkdatabase() { 
    //SQLiteDatabase checkdb = null; 
    boolean checkdb = false; 
    try{ 
     String myPath = DB_PATH + DB_NAME; 
     File dbfile = new File(myPath); 
     //checkdb = SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN_READWRITE); 
     checkdb = dbfile.exists(); 
    } 
    catch(SQLiteException e){ 
     System.out.println("Database doesn't exist"); 
    } 

    return checkdb; 
} 
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("/data/data/gr.peos/databases/BLib.sqlite"); 

    // transfer byte to inputfile to 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_READWRITE); 

} 



public synchronized void close(){ 
    if(myDataBase != null){ 
     myDataBase.close(); 
    } 
    super.close(); 
} 

Merci.