Может кто-нибудь объяснить рабочий процесс базы данных Android при создании базы данных - PullRequest
0 голосов
/ 06 февраля 2012

Текущий пакет относится к классу соединений с базой данных.Он создает базу данных и содержит некоторые другие методы.Но я не совсем понимаю, как это работает, и каков рабочий процесс. Кто-нибудь может мне это объяснить?

package panda.com.db;

import android.content.ContentValues;
import android.content.Context;
import android.database.*;
import android.util.Log;
import android.database.sqlite.*;

public class DBAdapter{
    public static final String KEY_ROWID = "_id";
    public static final String KEY_ISBN = "isbn";
    public static final String KEY_TITLE = "title";
    public static final String KEY_PUBLISHER = "publisher";
    private static final String TAG = "DBAdapter";
    private static final String DATABASE_NAME = "books";
    private static final String DATABASE_TABLE = "titles";
    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_CREATE =
    "create table titles (_id integer primary key autoincrement, "
    + "isbn text not null, title text not null, "
    + "publisher text not null);";
    private final Context context;
    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;

    public DBAdapter(Context ctx){
        this.context=ctx;
        DBHelper=new DatabaseHelper(context);
    }

    private static class DatabaseHelper extends SQLiteOpenHelper{
        DatabaseHelper(Context context){
            super(context,DATABASE_NAME,null,DATABASE_VERSION);
        }
        @Override
        public void onCreate(SQLiteDatabase db){
            db.execSQL(DATABASE_CREATE);
        }
        @Override
        public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
            Log.w(TAG, "Upgrading database from version " + oldVersion + "to" + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS titles");
            onCreate(db);
        }
    }
    public DBAdapter open() throws SQLException
    {
        db=DBHelper.getWritableDatabase();
        return this;
    }
    public void close(){
        DBHelper.close();
    }
    public long insertTitle(String isbn, String title, String publisher){
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_ISBN, isbn);
        initialValues.put(KEY_TITLE, title);
        initialValues.put(KEY_PUBLISHER, publisher);
        return db.insert(DATABASE_TABLE, null, initialValues);
    }
    public boolean deleteTitle(long rowId){
        return db.delete(DATABASE_TABLE, KEY_ROWID+"="+rowId, null)>0;
    }
    public Cursor getAlltitles(){
        return db.query(DATABASE_TABLE, new String[]{
                KEY_ROWID,
                KEY_ISBN,
                KEY_TITLE,
                KEY_PUBLISHER
        }, null, null, null, null, null);
    }
    public Cursor getTitle(long rowId) throws SQLException
    {
        Cursor mCursor = 
                db.query(true, DATABASE_TABLE, new String[]{
                        KEY_ROWID,
                        KEY_ISBN,
                        KEY_TITLE,
                        KEY_PUBLISHER
                }, KEY_ROWID+"="+rowId, null, null, null, null, null);
        if(mCursor != null){
            mCursor.moveToFirst();
        }
        return mCursor;
    }
    public boolean updateTitle(long rowId, String isbn,String title,String publisher)
    {
        ContentValues args=new ContentValues();
        args.put(KEY_ISBN, title);
        args.put(KEY_TITLE, title);
        args.put(KEY_PUBLISHER, publisher);
        return db.update(DATABASE_TABLE, args, KEY_ROWID+"="+rowId, null)>0;
    }
}

1 Ответ

3 голосов
/ 06 февраля 2012

У вас есть 2 класса -

  1. DatabaseHelper - этот класс отвечает за создание вашей базы данных и ее обновление при необходимости (метод onUpgrade будет выполняться, если newVersion> oldVersion).

  2. Класс DBAdapter содержит метод для вставки, обновления и извлечения записей из БД.Эти методы актуальны для конкретной БД, с которой они планировали работать, в отличие от методов DatabaseHelper, которые являются общими для sqlite DB.

Надеюсь, это поможет Вам

...