Как вставить данные в файл базы данных, который находится в папке активов - PullRequest
2 голосов
/ 02 января 2012

Я создал файл SQLite и поместил его в папку активов.Теперь я могу читать данные из этого файла, но я не знаю, как записать в этот файл базы данных.Мне нужно взять имя пользователя и счет и сохранить его в этом файле базы данных.Я также искал в Интернете и в SO, но есть примеры для обычной вставки базы данных.

Может кто-нибудь сказать мне, как сохранить значения в файле базы данных.Мне нужно хранить имя пользователя и оценку.Просто подумайте об этом как о Строках и, пожалуйста, дайте мне пример для этого.

Ответы [ 3 ]

5 голосов
/ 02 января 2012

Не следует создавать базу данных в папке ресурсов, поскольку мы можем только читать данные из папки активов.

Фактически вам следует создать базу данных во внутренней папке по умолчанию, т.е. data / data / [package-имя] / database ИЛИ вы также можете создать свою базу данных на SD-карте и выполнить операцию чтения-записи, но, конечно, она не будет работать, если нет SD-карты.

Ниже приведен код для созданиябаза данных в SDCard: -

    private SQLiteDatabase db;
    private static Context cntxt;

    public static File filename = null;
    public static String DATABASE_FILE_PATH_EXTERNAL = null;

    public DBHelper(Context context) {
            super(context, DATABASE_NAME, null,1);
            cntxt = context;
            try{
                try{
                    filename = Environment.getExternalStorageDirectory();
                }catch(Exception e){
                    Toast.makeText(DbHelper.cntxt, "Please Insert SD card To create Database", Toast.LENGTH_LONG).show();
                    Log.e("Log",e.getMessage(),e.fillInStackTrace());
                }

                DATABASE_FILE_PATH_EXTERNAL = filename.getAbsolutePath()+File.separator+DATABASE_NAME;

                //  db = SQLiteDatabase.openDatabase(DATABASE_FILE_PATH_EXTERNAL, null, SQLiteDatabase.OPEN_READWRITE + SQLiteDatabase.CREATE_IF_NECESSARY);
            }catch(Exception e){

                Log.e("Log",e.getMessage(),e.fillInStackTrace());
            }
        }



        @Override
        public synchronized SQLiteDatabase getWritableDatabase() {
            // TODO Auto-generated method stub
            try{
                db = SQLiteDatabase.openDatabase(DATABASE_FILE_PATH_EXTERNAL, null, SQLiteDatabase.OPEN_READWRITE + SQLiteDatabase.CREATE_IF_NECESSARY);
                try{
                    onCreate(db);
                }catch(Exception e){
                    Log.e("Log",e.getMessage(),e.fillInStackTrace());
                }
                return db;
            }catch(Exception e){
                Log.e("Log",e.getMessage(),e.fillInStackTrace());
                if(db!=null)
                    db.close();
            }
            return db;
        }// End of getWritableDatabase()



**Inserting  and Retrieving data from database:-**


public void insertIntoTable(String[] userName,int[] score)
    {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues cv = new ContentValues();

        try {
            db.beginTransaction();
            for (int i = 0; i < beatID.length; i++) {
                cv.put("UserName",userName[i]);
                cv.put("Score",score[i]);

                db.insert("TableName", "UserName",
                        cv);
            }
            db.setTransactionSuccessful();
        } catch (Exception ex) {

        } finally {
            db.endTransaction();
            db.close();
        }
    }


public void getUserNamePswd(){
        Cursor c = null;
        SQLiteDatabase db = null;
        try{
            db = this.getReadableDatabase();     
            c = db.rawQuery("Select UserName,Score from TableName",null);
            c.moveToFirst();
            String[] username = new String[c.getCount()];
            int[] score = new int[c.getCount()];            
            int counter = 0;
            c.moveToFirst();
            while(!c.isAfterLast()){
            username[counter] = c.getString(0);
            score[counter] = c.getInt(1);
            c.moveToNext();
            counter++;
            }


        }catch(Exception e){
            Log.e("Log", e.getMessage(), e.fillInStackTrace());
            return null;      
        }finally{
            c.close();
            db.close();
        }
    }
1 голос
/ 02 января 2012

вам нужно скопировать файл базы данных из ресурса и вставить в / data / data / '' / database / folder

private static String DB_NAME = "QuotesData.db";
private static String DB_PATH = "/data/data/[PACKAGE NAME]/databases/";
private void copyDataBase() throws IOException {

        InputStream myInput = context.getAssets().open(DB_NAME);

        String outFileName = DB_PATH + DB_NAME;

        OutputStream myOutput = new FileOutputStream(outFileName);

        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer)) > 0) {
            myOutput.write(buffer, 0, length);
        }

        myOutput.flush();
        myOutput.close();
        myInput.close();

    }

Код выше: замените [ИМЯ ПАКЕТА] на имя вашего пакета, которое я надеюсь вышекод поможет.

Спасибо

1 голос
/ 02 января 2012

Поскольку каталог /asset является только для чтения (поскольку файл android .apk доступен только для чтения), поэтому вы ничего не можете записать в файл папки ресурсов, вам необходимо сначала скопировать этот файл базы данных sqlite. во внутреннюю директорию /data/data/<package_name>/databases вашего приложения, затем вы можете изменить файл базы данных ..

  1. Скопируйте предварительно заполненный файл базы данных sqlite в data/data/<package_name>/databases directory,

  2. Откройте этот файл базы данных (из каталога / database /) в вашем вспомогательном классе базы данных sqlite.

  3. Выполнить операцию вставки, обновления или выбора этой базы данных.

...