• <small id='hizkC'></small><noframes id='hizkC'>

      <bdo id='hizkC'></bdo><ul id='hizkC'></ul>

      <i id='hizkC'><tr id='hizkC'><dt id='hizkC'><q id='hizkC'><span id='hizkC'><b id='hizkC'><form id='hizkC'><ins id='hizkC'></ins><ul id='hizkC'></ul><sub id='hizkC'></sub></form><legend id='hizkC'></legend><bdo id='hizkC'><pre id='hizkC'><center id='hizkC'></center></pre></bdo></b><th id='hizkC'></th></span></q></dt></tr></i><div id='hizkC'><tfoot id='hizkC'></tfoot><dl id='hizkC'><fieldset id='hizkC'></fieldset></dl></div>
        <legend id='hizkC'><style id='hizkC'><dir id='hizkC'><q id='hizkC'></q></dir></style></legend>
        <tfoot id='hizkC'></tfoot>
      1. 如何从Android中的帮助类初始化sqlite数据库

        How to initialize sqlite database once from a helper class in Android(如何从Android中的帮助类初始化sqlite数据库)
          <bdo id='5cqGK'></bdo><ul id='5cqGK'></ul>
            <legend id='5cqGK'><style id='5cqGK'><dir id='5cqGK'><q id='5cqGK'></q></dir></style></legend>

              <tbody id='5cqGK'></tbody>
              • <i id='5cqGK'><tr id='5cqGK'><dt id='5cqGK'><q id='5cqGK'><span id='5cqGK'><b id='5cqGK'><form id='5cqGK'><ins id='5cqGK'></ins><ul id='5cqGK'></ul><sub id='5cqGK'></sub></form><legend id='5cqGK'></legend><bdo id='5cqGK'><pre id='5cqGK'><center id='5cqGK'></center></pre></bdo></b><th id='5cqGK'></th></span></q></dt></tr></i><div id='5cqGK'><tfoot id='5cqGK'></tfoot><dl id='5cqGK'><fieldset id='5cqGK'></fieldset></dl></div>

                  <tfoot id='5cqGK'></tfoot>
                1. <small id='5cqGK'></small><noframes id='5cqGK'>

                  本文介绍了如何从Android中的帮助类初始化sqlite数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我有一个扩展 SQLiteOpenHelper 的自定义 DataBaseHelper 类,如下所示:

                  I have a custom DataBaseHelper class which extends SQLiteOpenHelper,which looks like this :

                  package com.stampii.stampii.comm.rpc;
                  
                  
                  import java.io.File;
                  import java.io.FileOutputStream;
                  import java.io.IOException;
                  import java.io.InputStream;
                  import java.io.OutputStream;
                  import java.sql.ResultSet;
                  
                  import android.content.ContentValues;
                  import android.content.Context;
                  import android.database.Cursor;
                  import android.database.sqlite.SQLiteDatabase;
                  import android.database.sqlite.SQLiteDatabase.CursorFactory;
                  import android.database.sqlite.SQLiteException;
                  import android.database.sqlite.SQLiteOpenHelper;
                  import android.util.Log;
                  
                  public class DataBaseHelper extends SQLiteOpenHelper{
                  
                      private static SQLiteDatabase sqliteDb;
                      private static DataBaseHelper instance;
                      private static final int DATABASE_VERSION = 1;
                      // the default database path is :
                      // /data/data/pkgNameOfYourApplication/databases/
                      private static String DB_PATH_PREFIX = "/data/data/";
                      private static String DB_PATH_SUFFIX = "/databases/";
                      private static final String TAG = "DataBaseHelper";
                      private Context context;
                  
                      /***
                       * Contructor
                       * 
                       * @param context
                       *            : app context
                       * @param name
                       *            : database name
                       * @param factory
                       *            : cursor Factory
                       * @param version
                       *            : DB version
                       */
                      public DataBaseHelper(Context context, String name,
                                      CursorFactory factory, int version) {
                              super(context, name, factory, version);
                              this.context = context;
                              Log.i(TAG, "Create or Open database : " + name);
                      }
                  
                      /***
                       * Initialize method
                       * 
                       * @param context
                       *            : application context
                       * @param databaseName
                       *            : database name
                       */
                      public static  void initialize(Context context, String databaseName) {
                              if (instance == null) {
                                      /**
                                       * Try to check if there is an Original copy of DB in asset
                                       * Directory
                                       */
                                      if (!checkDatabase(context, databaseName)) {
                                              // if not exists, I try to copy from asset dir
                                              try {
                                                  copyDataBase(context, databaseName);
                                              } catch (IOException e) {
                                                      Log.e(TAG,"Database "+ databaseName+" does not exists and there is no Original Version in Asset dir");
                                              }
                                      }
                  
                                      Log.i(TAG, "Try to create instance of database (" + databaseName
                                                      + ")");
                                      instance = new DataBaseHelper(context, databaseName,
                                                      null, DATABASE_VERSION);
                                      sqliteDb = instance.getWritableDatabase();
                                      Log.i(TAG, "instance of database (" + databaseName + ") created !");
                              }
                      }
                  
                      /***
                       * Static method for getting singleton instance
                       * 
                       * @param context
                       *            : application context
                       * @param databaseName
                       *            : database name
                       * @return : singleton instance
                       */
                      public static final DataBaseHelper getInstance(
                                      Context context, String databaseName) {
                              initialize(context, databaseName);
                              return instance;
                      }
                  
                      /***
                       * Method to get database instance
                       * 
                       * @return database instance
                       */
                      public SQLiteDatabase getDatabase() {
                              return sqliteDb;
                      }
                  
                      @Override
                      public void onCreate(SQLiteDatabase db) {
                              Log.d(TAG, "onCreate : nothing to do");
                  
                      }
                  
                      @Override
                      public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                              Log.d(TAG, "onUpgrade : nothing to do");
                  
                      }
                  
                      /***
                       * Method for Copy the database from asset directory to application's data
                       * directory
                       * 
                       * @param databaseName
                       *            : database name
                       * @throws IOException
                       *             : exception if file does not exists
                       */
                      public void copyDataBase(String databaseName) throws IOException {
                              copyDataBase(context, databaseName);
                      }
                  
                      /***
                       * Static method for copy the database from asset directory to application's
                       * data directory
                       * 
                       * @param aContext
                       *            : application context
                       * @param databaseName
                       *            : database name
                       * @throws IOException
                       *             : exception if file does not exists
                       */
                      private static void copyDataBase(Context aContext, String databaseName)
                                      throws IOException {
                  
                              // Open your local db as the input stream
                              InputStream myInput = aContext.getAssets().open(databaseName);
                  
                              // Path to the just created empty db
                              String outFileName = getDatabasePath(aContext, databaseName);
                  
                              Log.i(TAG, "Check if create dir : " + DB_PATH_PREFIX
                                              + aContext.getPackageName() + DB_PATH_SUFFIX);
                  
                              // if the path doesn't exist first, create it
                              File f = new File(DB_PATH_PREFIX + aContext.getPackageName()
                                              + DB_PATH_SUFFIX);
                              if (!f.exists())
                                      f.mkdir();
                  
                              Log.i(TAG, "Trying to copy local DB to : " + outFileName);
                  
                              // 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();
                  
                              Log.i(TAG, "DB (" + databaseName + ") copied!");
                      }
                  
                      /***
                       * Method to check if database exists in application's data directory
                       * 
                       * @param databaseName
                       *            : database name
                       * @return : boolean (true if exists)
                       */
                      public boolean checkDatabase(String databaseName) {
                              return checkDatabase(context, databaseName);
                      }
                  
                      /***
                       * Static Method to check if database exists in application's data directory
                       * 
                       * @param aContext
                       *            : application context
                       * @param databaseName
                       *            : database name
                       * @return : boolean (true if exists)
                       */
                      private static boolean checkDatabase(Context aContext, String databaseName) {
                              SQLiteDatabase checkDB = null;
                  
                              try {
                                      String myPath = getDatabasePath(aContext, databaseName);
                  
                                      Log.i(TAG, "Trying to conntect to : " + myPath);
                                      checkDB = SQLiteDatabase.openDatabase(myPath, null,
                                                      SQLiteDatabase.OPEN_READONLY);
                                      Log.i(TAG, "Database " + databaseName + " found!");
                                      checkDB.close();
                              } catch (SQLiteException e) {
                                      Log.i(TAG, "Database " + databaseName + " does not exists!");
                  
                              }
                  
                              return checkDB != null ? true : false;
                      }
                  
                      /***
                       * Method that returns database path in the application's data directory
                       * 
                       * @param databaseName
                       *            : database name
                       * @return : complete path
                       */
                      private String getDatabasePath(final String databaseName) {
                              return getDatabasePath(context, databaseName);
                      }
                  
                      /***
                       * Static Method that returns database path in the application's data
                       * directory
                       * 
                       * @param aContext
                       *            : application context
                       * @param databaseName
                       *            : database name
                       * @return : complete path
                       */
                      private static String getDatabasePath(Context aContext, String databaseName) {
                              return DB_PATH_PREFIX + aContext.getPackageName() + DB_PATH_SUFFIX
                                              + databaseName;
                      }
                  
                      public boolean executeQuery(String tableName,String keys,String value){
                          return execQuery(tableName,keys,value);
                      }
                  
                      private static boolean execQuery(String tableName,String key,String value){
                          sqliteDb = instance.getWritableDatabase();
                          ContentValues values = new ContentValues();
                          values.put(key, value);
                          sqliteDb.insert(tableName, null, values);
                  
                          return true;
                  
                      }
                  
                      public boolean updateSQL(String tableName,String key,String value){
                          return updateData(tableName,key,value); 
                      }
                  
                      private static boolean updateData(String tableName,String key,String value){
                          sqliteDb = instance.getWritableDatabase();
                          String where = "code_id=?";
                          ContentValues values = new ContentValues();
                          values.put(key, value);
                          values.put(key, value);
                          sqliteDb.update(tableName, values, where, new String[] {"3"});
                          return true;
                      }
                  
                      public boolean deleteSQL(String tableName){
                          return deleteData(tableName);
                      }
                  
                      private static boolean deleteData(String tableName){
                          sqliteDb = instance.getWritableDatabase();
                          String where = "code_id=?";
                          sqliteDb.delete(tableName, where, new String[] {"5"});
                          return true;
                      }
                  
                      public Cursor executeSQLQuery(String query){
                          return sqliteDb.rawQuery(query,null);
                      }
                  
                  }
                  

                  我的问题是:我怎样才能只初始化一次数据库并且可以从我的所有活动中访问它?(提示:我的资产文件夹中有 sqlite 文件,当应用程序启动时,我会将其复制到系统数据库文件夹中.)

                  My question is : How can I initialize the database only once and can access it from all my Activities? (Hint: I have sqlite files in my assets folder,which I copy to my system database folder when the app stars.)

                  提前致谢!

                  我忘了说我的应用程序中有 2 个不同的 sqlite 数据库,我希望能够为整个应用程序初始化它们并可以使用它们.这就是我正在尝试做:

                  EDIT : I forgot to say that I have 2 different sqlite databases in my application and I want to be able to initialize both of them for the whole application and can use them.That's something that I was trying to do :

                  DataBaseHelper dbHelper;
                  //some code
                  dbHelper = new DataBaseHelper(context, "ops_sys_tpl.sqlite", null, 1);
                          DataBaseHelper.initialize(context, "stampii_sys_tpl.sqlite");
                  
                          dbHelper.copyDataBase("ops_sys_tpl.sqlite");
                  
                          dbHelper.getDatabase();
                          dbHelper.executeQuery("users", "objectId", "2");
                          dbHelper.executeQuery("users","serverName","stampii");
                          dbHelper.executeQuery("users", "objectId", "3");
                          dbHelper.executeQuery("users","serverName","stampii");
                          dbHelper.executeQuery("users", "objectId", "3");
                  

                  推荐答案

                  像这样只创建一次实例,您可以在 DB 处理程序类中添加相同的代码,但我更喜欢将其分开.

                  Create your instance only once like this, The same code you can add in DB handler class but I prefer to keep it seperate.

                  public class MyTestDatabaseInstanceHolder {
                  
                      public MyTestDBHandler DBHelper;  
                      public static SQLiteDatabase m_ObjDataBase; // This is global variable to access across the applicaiton
                  
                      public static void createDBInstance(Context pContext){
                          if(DBHelper == null) {
                              DBHelper = new WLDBHandler(pContext); // This will be your DB Handler Class
                              m_cObjDataBase = DBHelper.openAndCreateDataBase(); // Initialze the DB Note: openAndCreateDataBase is a utility method created by you to do everything an return the DB object
                          }
                        }
                  }
                  

                  在您的入口点(启动画面)中调用:

                  In your entry point (Splash Screen) call this:

                  MyTestDatabaseInstanceHolder.createDBInstance(getApplicationContext());
                  

                  用法 - 其他一些类:

                  Usage - Some other Class:

                  MyTestDatabaseInstanceHolder.m_ObjDataBase.rawQuery(---);
                  

                  这篇关于如何从Android中的帮助类初始化sqlite数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  How can I use CClistview in COCOS2d Android?(如何在 COCOS2d Android 中使用 CClistview?)
                  cocos2d-android: how to display score(cocos2d-android:如何显示分数)
                  Sqlite database not copied from asset folder Android(Sqlite 数据库未从资产文件夹 Android 复制)
                  SQLite Database Copy Appears Corrupted When Generated by Device and not Emulator(SQLite 数据库副本在由设备而不是模拟器生成时出现损坏)
                  Android file copy(安卓文件拷贝)
                  Android how to detect Copy event of Edittext in android(Android如何在android中检测Edittext的Copy事件)
                  • <bdo id='SVTWR'></bdo><ul id='SVTWR'></ul>

                    <legend id='SVTWR'><style id='SVTWR'><dir id='SVTWR'><q id='SVTWR'></q></dir></style></legend>

                              <tbody id='SVTWR'></tbody>
                            <tfoot id='SVTWR'></tfoot>

                          1. <small id='SVTWR'></small><noframes id='SVTWR'>

                          2. <i id='SVTWR'><tr id='SVTWR'><dt id='SVTWR'><q id='SVTWR'><span id='SVTWR'><b id='SVTWR'><form id='SVTWR'><ins id='SVTWR'></ins><ul id='SVTWR'></ul><sub id='SVTWR'></sub></form><legend id='SVTWR'></legend><bdo id='SVTWR'><pre id='SVTWR'><center id='SVTWR'></center></pre></bdo></b><th id='SVTWR'></th></span></q></dt></tr></i><div id='SVTWR'><tfoot id='SVTWR'></tfoot><dl id='SVTWR'><fieldset id='SVTWR'></fieldset></dl></div>