Mega Code Archive

 
Categories / Android / Database
 

Extends SQLiteOpenHelper

//package nicolasb1.additifs; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteOpenHelper; public class DataBaseHelper extends SQLiteOpenHelper {      //The Android's default system path of your application database.     private static String DB_PATH = "/data/data/nicolasb1.additifs/databases/";       private static String DB_NAME = "additifs.db";       public static final String KEY_ID = "_id";     public static final String KEY_EID = "eid";     public static final String KEY_COLOR = "color";     public static final String KEY_NAME = "name";     public static final String KEY_TYPE = "type";     public static final String KEY_NAME2 = "name2";     public static final String KEY_TYPE2 = "type2";          private static final int DATABASE_VERSION = 10;          private SQLiteDatabase myDataBase;        private final Context myContext;       /**      * Constructor      * Takes and keeps a reference of the passed context in order to access to the application assets and resources.      * @param context      */     public DataBaseHelper(Context context) {         super(context, DB_NAME, null, DATABASE_VERSION);         this.myContext = context;     }       public SQLiteDatabase getdatabase(){         return this.myDataBase;      }    /**      * 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         this.getWritableDatabase();       }              dbExist = checkDataBase();              if(!dbExist){           //By calling this method and empty database will be created into the default system path                //of your application so we are gonna be able to overwrite that database with our database.           this.getReadableDatabase();             try {                        copyDataBase();           } catch (IOException e) {               throw new Error("Error copying database");             }       }       this.close();     }       /**      * 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.NO_LOCALIZED_COLLATORS);                      int i = checkDB.getVersion();             int a = i;         }catch(SQLiteException e){           //database does't exist yet.         }         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.      * */     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.NO_LOCALIZED_COLLATORS);       }       @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) {     myContext.deleteDatabase(DB_NAME);    }   public Cursor fetchByEID() {     // TODO Auto-generated method stub     return myDataBase.query("additifs", new String[] {KEY_ID, KEY_EID, KEY_COLOR, KEY_NAME, KEY_TYPE, KEY_NAME2, KEY_TYPE2}, null, null, null, null, "_id");   }   public Cursor fetchByName() {     // TODO Auto-generated method stub     return myDataBase.query("additifs", new String[] {KEY_ID, KEY_EID, KEY_COLOR, KEY_NAME, KEY_TYPE, KEY_NAME2, KEY_TYPE2}, null, null, null, null, "name");   }    public Cursor fetchByEID2() {     // TODO Auto-generated method stub     return myDataBase.query("additifs", new String[] {KEY_ID, KEY_EID, KEY_COLOR, KEY_NAME, KEY_TYPE, KEY_NAME2, KEY_TYPE2}, null, null, null, null, "_id");   }   public Cursor fetchByName2() {     // TODO Auto-generated method stub     return myDataBase.query("additifs", new String[] {KEY_ID, KEY_EID, KEY_COLOR, KEY_NAME, KEY_TYPE, KEY_NAME2, KEY_TYPE2}, null, null, null, null, "name2");   }    public Cursor fetchORANGE() {     // TODO Auto-generated method stub     return myDataBase.query("additifs", new String[] {KEY_ID, KEY_EID, KEY_COLOR, KEY_NAME, KEY_TYPE}, "color = 'ORANGE'", null, null, null, "_id");   }    public Cursor fetchRED() {     // TODO Auto-generated method stub     return myDataBase.query("additifs", new String[] {KEY_ID, KEY_EID, KEY_COLOR, KEY_NAME, KEY_TYPE}, "color = 'RED'", null, null, null, "_id");   }          // Add your public helper methods to access and get content from the database.        // You could return cursors by doing "return myDataBase.query(....)" so it'd be easy        // to you to create adapters for your views.   }