Android数据库管理器和内部DatabaseHelper类

时间:2013-12-23 22:10:02

标签: android database sqlite inner-classes

开发具有数据库功能的Android应用程序。使用名为DatabaseHelper的内部类创建DatabaseManager类与数据库通信。虽然我在实施方面遇到了一些问题,但如果有人能提供一点清晰度,我将不胜感激。

  • 为什么访问数据库需要内部类?

示例,在活动中

DatabaseManager db = new DatabaseManager(this);
db.open();
db.insert(some_values);

DatabaseManager类

public class DatabaseManager{

// Database details
private static final String     DATABASE_NAME = "Test Database";
// Table Names
private static final String     USER_TABLE = "User";    
// Table columns
public static final String      KEY_ROWID = "_id";
public static final String      KEY_USERNAME = "username";

private static final int        DATABASE_VERSION = 1;

private static final String     USER_CREATE =           

    "create table " + USER_TABLE +
    " (_id integer primary key autoincrement not null, " +
    "username text not null);";

public DatabaseHelper   helper;
public SQLiteDatabase   the_db;
public Context          context;

public DatabaseManager(Context c){
    this.context = c;
    helper = new DatabaseHelper(context); 
}

public void open(){
    helper.open();
}


class DatabaseHelper extends SQLiteOpenHelper{

    DatabaseHelper(Context context){
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db){            
            db.execSQL(USER_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }


    public DatabaseManager(Context c){
        this.context = c;
        helper = new DatabaseHelper(context); 
    }


    // Makes the_db available to the Manager class.
    public DatabaseManager open() throws SQLException{
        this.the_db = this.helper.getWritableDatabase();
        return this;
    }

    public void close(){ 
        helper.close();     
    }


    public long insertFacebook(String uname, String pwd){
        ContentValues content = new ContentValues();
        content.put(KEY_USERNAME, uname);           
        content.put(KEY_PASSWORD, pwd);

        return the_db.insertOrThrow(FACEBOOK_TABLE, null, content);
    }}  

1 个答案:

答案 0 :(得分:2)

  

SQLiteOpenHelper:

用于管理数据库创建和版本管理的帮助程序类。

您创建了一个实现 onCreate(SQLiteDatabase) onUpgrade(SQLiteDatabase,int,int)和可选 onOpen(SQLiteDatabase)的子类,以及如果数据库存在,则此类负责打开数据库,如果不存在则创建数据库,并根据需要进行升级。事务用于确保数据库始终处于合理状态。

此类使 ContentProvider 实现可以在第一次使用之前推迟打开和升级数据库,以避免在长时间运行的数据库升级时阻止应用程序启动。