• <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数据库

        时间:2023-09-08
          <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数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:从 xib 文件加载 ViewController 下一篇:为什么在 Swift 类中使用必需的初始化器?

                  相关文章

                  • <bdo id='SVTWR'></bdo><ul id='SVTWR'></ul>

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

                      <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>