2011-02-23 8 views
11

¿cómo podemos agregar nuestra propia base de datos SQLite a un proyecto de Android?agregando su propia base de datos SQLite a una aplicación de Android

+3

no me suelo decir RTFM, pero RTFM: http://developer.android.com/reference/android/database/sqlite/package-summary.html –

+0

I Creo que está compilando una lista de preguntas sobre 'cómo ...'. Podría haber sido peor; Mucha gente viene aquí pidiéndote que escribas código para ellos, como este sitio es una especie de herramienta gratuita de creación de aplicaciones basada en la comunidad. –

+0

Siga con este tutroial el mejor http://www.codeproject.com/Articles/119293/Using-SQLite-Database-with-Android –

Respuesta

10

Prueba este código:

public class DataBaseHelper extends SQLiteOpenHelper { 
    private Context mycontext; 

    //private String DB_PATH = mycontext.getApplicationContext().getPackageName()+"/databases/"; 
    private static String DB_NAME = "(datbasename).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/(packagename)/databases/(datbasename).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(); 
    } 
+0

¿Funcionará esto en un dispositivo sin raíz? – gisek

+0

sí Obviamente, el código está funcionando en todos los dispositivos. además, también he usado en mi aplicación y simplemente funciona bien :) –

+0

@JaydeepKhamar: ¿Qué es DB_PATH? – Deepzz

Cuestiones relacionadas