Android հավելվածներում Ձեր SQLite տվյալների բազայի օգտագործում 

Android Dev.Android-ի օրինակներից և ձեռնարկներից շատերը ենթադրում են, որ դուք ցանկանում եք ստեղծել և տեղադրել Ձեր տվյալների բազան աշխատանքի ընթացքում և չեք ցանկանում օգտագործել և մուտք ունենալ առանձին, նախապես բեռնված տվյալների բազային Ձեր Android  հավելվածով:

Այն մեթոդը, որը պատրաստվում եմ Ձեզ ցուցադրել, վերցնում է Ձեր SQLite տվյալների բազայի ֆայլը <<assets>> թղթապանակից և պատճենում է Ձեր հավելվածի համակարգի տվյալների բազայի ուղում, այնպես որ SQLiteDatabase API-ն (Հավելվածների Ծրագրավորման Ինտերֆեյս) կարող է բացել և այնտեղ նորմալ մուտք գործելու հնարավորություն ունենալ:
 
1. SQLite տվյալների բազայի ֆայլի նախապատրաստում:

Ենթադրելով, որ արդեն Ձեր sqlite տվյալների բազան ստեղծվել է՝ անհրաժեշտ է, որ մենք այն որոշ փոփոխությունների ենթարկենք:
Եթե sqlite մենեջեր չունեք, Ձեզ խորհուրդ եմ տալիս ներբեռնել բաց սկզբնակոդով SQLite Տվյալների բազայի Դիտարկիչը, որը հասանելի է Win/Linux/Mac-ի համար:

Բացեք Ձեր տվյալների բազան և ավելացրեք մի նոր աղյուսակ՝ <<android_metadata>> անվամբ: Կարող եք դա իրականացնել հետևյալ SQL տողով՝

  1. CREATE TABLE «android_metadata» («locale» TEXT DEFAULT ‘en_US’)

Այժմ տեղադրեք մեկ շարք՝ ‘en_US’ տեքստով, <<android_metadata>> աղյուսակում՝

  1. INSERT INTO «android_metadata» VALUES (‘en_US’)

Հետո անհրաժեշտ է, որ վերանվանեք Ձեր աղյուսակների նախնական id դաշտը <<_id>>-ի, այսպիսով՝ Android-ը կիմանա, թե որտեղ կապել Ձեր աղյուսակների id դաշտը:
Դուք կարող եք սա հեշտությամբ իրականացնել SQLite Տվյալների բազայի Դիտարկչի հետ՝ սեղմելով խմբագրման աղյուսակի կոճակը  Edit Table, հետո ընտրելով այն աղյուսակը, որը ցանկանում եք խմբագրել, և վերջապես ընտրելով այն դաշտը, որը ցանկանում եք վերանվանել:

Ձեր բոլոր տվյալների աղյուսակների id դաշտը <<_id>> անվանելուց և <<android_metadata>> աղյուսակն ավելացնելուց հետո Ձեր տվյալների բազան պատրաստ է, որ օգտագործվի Ձեր Android հավելվածում:

Modified database
Փոփոխված տվյալների բազա

Ուշադրություն դարձրեք, որ այս պատկերում մենք տեսնում ենք «Categories» (կատեգորիաներ) և «Content» (Պարունակություն) աղյուսակները, որտեղ id դաշտը <<_id>>-ի վերանվանվել, և հենց նոր ավելացված <<android_metadata>> աղյուսակը:

2. Ձեր Android հավելվածում Ձեր տվյալների բազայի պատճենում, բացում և մուտք գործում:

Այժմ պարզապես տեղադրեք Ձեր տվյալների բազայի ֆայլը Ձեր ծրագրի <<assets>> թղթապանակում և ստեղծեք Database Helper (Տվյալների բազայի Օգնող) դաս՝ ընդլայնելով SQLiteOpenHelper դասը <<android.database.sqlite>> փաթեթից:

Այնպես արեք, որ Ձեր DataBaseHelper դասն այսպիսի տեսք ունենա՝

  1. public class DataBaseHelper extends SQLiteOpenHelper{
  2. //The Android’s default system path of your application database.
  3. private static String DB_PATH = «/data/data/YOUR_PACKAGE/databases/»;
  4. private static String DB_NAME = «myDBName»;
  5. private SQLiteDatabase myDataBase;
  6. private final Context myContext;
  7. /**
  8.   * Constructor
  9.   * Takes and keeps a reference of the passed context in order to access to the application assets and resources.
  10.   * @param context
  11.   */
  12. public DataBaseHelper(Context context) {
  13. super(context, DB_NAME, null, 1);
  14. this.myContext = context;
  15. }
  16. /**
  17.   * Creates a empty database on the system and rewrites it with your own database.
  18.   * */
  19. public void createDataBase() throws IOException{
  20. boolean dbExist = checkDataBase();
  21. if(dbExist){
  22. //do nothing — database already exist
  23. }else{
  24. //By calling this method and empty database will be created into the default system path
  25. //of your application so we are gonna be able to overwrite that database with our database.
  26. this.getReadableDatabase();
  27. try {
  28. copyDataBase();
  29. } catch (IOException e) {
  30. throw new Error(«Error copying database»);
  31. }
  32. }
  33. }
  34. /**
  35.   * Check if the database already exist to avoid re-copying the file each time you open the application.
  36.   * @return true if it exists, false if it doesn’t
  37.   */
  38. private boolean checkDataBase(){
  39. SQLiteDatabase checkDB = null;
  40. try{
  41. String myPath = DB_PATH + DB_NAME;
  42. checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
  43. }catch(SQLiteException e){
  44. //database does’t exist yet.
  45. }
  46. if(checkDB != null){
  47. checkDB.close();
  48. }
  49. return checkDB != null ? true : false;
  50. }
  51. /**
  52.   * Copies your database from your local assets-folder to the just created empty database in the
  53.   * system folder, from where it can be accessed and handled.
  54.   * This is done by transfering bytestream.
  55.   * */
  56. private void copyDataBase() throws IOException{
  57. //Open your local db as the input stream
  58. InputStream myInput = myContext.getAssets().open(DB_NAME);
  59. // Path to the just created empty db
  60. String outFileName = DB_PATH + DB_NAME;
  61. //Open the empty db as the output stream
  62. OutputStream myOutput = new FileOutputStream(outFileName);
  63. //transfer bytes from the inputfile to the outputfile
  64. byte[] buffer = new byte[1024];
  65. int length;
  66. while ((length = myInput.read(buffer))>0){
  67. myOutput.write(buffer, 0, length);
  68. }
  69. //Close the streams
  70. myOutput.flush();
  71. myOutput.close();
  72. myInput.close();
  73. }
  74. public void openDataBase() throws SQLException{
  75. //Open the database
  76. String myPath = DB_PATH + DB_NAME;
  77. myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
  78. }
  79. @Override
  80. public synchronized void close() {
  81. if(myDataBase != null)
  82. myDataBase.close();
  83. super.close();
  84. }
  85. @Override
  86. public void onCreate(SQLiteDatabase db) {
  87. }
  88. @Override
  89. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  90. }
  91. // Add your public helper methods to access and get content from the database.
  92. // You could return cursors by doing «return myDataBase.query(….)» so it’d be easy
  93. // to you to create adapters for your views.
  94. }

Ահա այն
Այժմ կարող եք ստեղծել այս DataBaseHelper դասի նոր նմուշ և դիմել createDataBase() և openDataBase() մեթոդներին: Հիշեք, որ պետք է փոխել «YOUR_PACKAGE»-ը (ՁԵՐ ՓԱԹԵԹ) Ձեր հավելվածի փաթեթի անվանատարածքում (այն է՝ com.examplename.myapp) DB_PATH շարքում:

  1. DataBaseHelper myDbHelper = new DataBaseHelper();
  2. myDbHelper = new DataBaseHelper(this);
  3. try {
  4. myDbHelper.createDataBase();
  5. } catch (IOException ioe) {
  6. throw new Error(«Unable to create database»);
  7. }
  8. try {
  9. myDbHelper.openDataBase();
  10. }catch(SQLException sqle){
  11. throw sqle;
  12. }

source: http://blog.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/