我应该如何在Android应用程序中构建数据库访问方法?

我应该如何在Android应用程序中构建数据库访问方法?,android,database,sqlite,sqliteopenhelper,Android,Database,Sqlite,Sqliteopenhelper,我正在开发一个Android应用程序,它的数据库有14-15个表。我想访问这些表,显然是为了查询、插入、删除等 我应该创建一个助手来打开数据库,然后创建一个适配器来访问它并按计划查询它吗?或者为每个表创建一个助手 我对这一点感到困惑。第一个选项对我来说更现实,因为我不需要多次打开数据库。创建一个从SQLiteOpenHelper扩展的类,并为每个类生成方法。 一个用于插入,一个用于删除,一个用于更新,一个用于检索结果集。 以下是一个例子: public class Db extends SQLi

我正在开发一个Android应用程序,它的数据库有14-15个表。我想访问这些表,显然是为了查询、插入、删除等

我应该创建一个助手来打开数据库,然后创建一个适配器来访问它并按计划查询它吗?或者为每个表创建一个助手


我对这一点感到困惑。第一个选项对我来说更现实,因为我不需要多次打开数据库。

创建一个从
SQLiteOpenHelper
扩展的类,并为每个类生成方法。 一个用于插入,一个用于删除,一个用于更新,一个用于检索结果集。 以下是一个例子:

public class Db extends SQLiteOpenHelper {
    static final int    version=1;
    static final String dbName="phoneBook";
    static final String dbtable="data";
    Context cont;

    public Db(Context context) 
    {
        super(context, dbName, null, version);
        cont = context;
    }

    public void onCreate(SQLiteDatabase db) 
    {
        try {
            String sql = "CREATE TABLE "+dbtable+" (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, phone TEXT)";
            db.execSQL(sql);
        } catch (SQLException e) {
            Toast.makeText(cont, e.toString(), Toast.LENGTH_LONG).show();
        }
    }

    public void addContact(String name, String number) 
    {
        try 
        {
            SQLiteDatabase db = getWritableDatabase();
            String sql = "INSERT INTO "+dbtable+" VALUES(NULL,'"+name+"', '"+number+"')";
            db.execSQL(sql);
            db.close();
        } catch (SQLException e) {
            Toast.makeText(cont, e.toString(), Toast.LENGTH_LONG).show();
        }
    }
    public void updateContact(int sid, String name, String number) {
        try {
            SQLiteDatabase db = getWritableDatabase();
            String sql = "UPDATE "+dbtable+" SET name = '"+name+"', phone = '"+number+"' WHERE id = "+sid;
            db.execSQL(sql);
            db.close();
        } catch (SQLException e) {
            Toast.makeText(cont, e.toString(), Toast.LENGTH_LONG).show();
        }
    }
    public ArrayList<String> getContactByPhone(String number) {
        try {
            SQLiteDatabase db=this.getReadableDatabase();
            ArrayList<String> al = new ArrayList<String>();
            Cursor cur = db.rawQuery("SELECT * from "+dbtable+" WHERE phone like '%"+number+"%'",null);
            while(cur.moveToNext())
                al.add(cur.getInt(0)+","+cur.getString(1)+","+cur.getString(2));
            db.close();
            return al;
        } catch(SQLException e) {
            Toast.makeText(cont, e.toString(), Toast.LENGTH_LONG).show();
        }
        return null;
    }

    public ArrayList<String> getContactByName(String sname) {
        try {
            SQLiteDatabase db=this.getReadableDatabase();
            ArrayList<String> al = new ArrayList<String>();
            Cursor cur = db.rawQuery("SELECT * from "+dbtable+" WHERE name like '%"+sname+"%'",null);
            while(cur.moveToNext())
                al.add(cur.getInt(0)+","+cur.getString(1)+","+cur.getString(2));
            db.close();
            return al;
        } catch(SQLException e) {
            Toast.makeText(cont, e.toString(), Toast.LENGTH_LONG).show();
        }
        return null;
    }

    public ArrayList<String> getAllContact() {
        try {
            SQLiteDatabase db=this.getReadableDatabase();
            ArrayList<String> al = new ArrayList<String>();
            Cursor cur = db.rawQuery("SELECT * from "+dbtable,null);
            while(cur.moveToNext())
                al.add(cur.getInt(0)+","+cur.getString(1)+","+cur.getString(2));
            db.close();
            return al;
        } catch(SQLException e) {
            Toast.makeText(cont, e.toString(), Toast.LENGTH_LONG).show();
        }
        return null;
    }

    public void deleteContact(int sid) {
        try {
            SQLiteDatabase db = getWritableDatabase();
            String sql = "DELETE FROM "+dbtable+" WHERE id = "+sid;
            db.execSQL(sql);
            db.close();
        } catch (SQLException e) {
            Toast.makeText(cont, e.toString(), Toast.LENGTH_LONG).show();
        }
    }

    public void deleteData() {
        try {
            SQLiteDatabase db = getWritableDatabase();
            db.execSQL("DELETE FROM "+dbtable);
            db.close();
        } catch (SQLException e) {
            Toast.makeText(cont, e.toString(), Toast.LENGTH_LONG).show();
        }
    }

    public void showAll() {
        try {
            SQLiteDatabase db = getReadableDatabase();
            Cursor cur = db.rawQuery("SELECT * from "+dbtable, null);
            while(cur.moveToNext())
                Toast.makeText(cont, cur.getString(1)+" "+cur.getString(2), Toast.LENGTH_LONG).show();
            db.close();
        } catch (SQLException e) {
            Toast.makeText(cont, e.toString(), Toast.LENGTH_LONG).show();
        }
    }

    public int getCount() {
        int total = 0;
        try {
            SQLiteDatabase db = getReadableDatabase();
            Cursor curs = db.rawQuery("SELECT * FROM "+dbtable+" WHERE 1",null);
            total = curs.getCount();            
            db.close();
        } catch (SQLException e) {
            Toast.makeText(cont, e.toString(), Toast.LENGTH_LONG).show();
        }
        return total;
    }

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        try {
            db.execSQL("DROP TABLE IF EXISTS "+dbtable);
            onCreate(db);
        } catch (SQLException e) {
            Toast.makeText(cont, e.toString(), Toast.LENGTH_LONG).show();
        }
    }

}
public类数据库扩展了SQLiteOpenHelper{
静态最终int版本=1;
静态最终字符串dbName=“phoneBook”;
静态最终字符串dbtable=“data”;
语境控制;
公共数据库(上下文)
{
super(上下文、数据库名、null、版本);
cont=上下文;
}
public void onCreate(SQLiteDatabase db)
{
试一试{
String sql=“CREATE TABLE”+dbtable+“(id整数主键自动递增,名称文本,电话文本)”;
execSQL(sql);
}捕获(SQLE异常){
Toast.makeText(cont,e.toString(),Toast.LENGTH_LONG).show();
}
}
public void addContact(字符串名称、字符串编号)
{
尝试
{
SQLiteDatabase db=getWritableDatabase();
String sql=“插入到“+dbtable+”值中(NULL、“+name+”、“+number+”)”;
execSQL(sql);
db.close();
}捕获(SQLE异常){
Toast.makeText(cont,e.toString(),Toast.LENGTH_LONG).show();
}
}
public void updateContact(int sid、字符串名称、字符串编号){
试一试{
SQLiteDatabase db=getWritableDatabase();
String sql=“UPDATE”+dbtable+“SET name=”“+name+”,phone=”“+number+”,其中id=“+sid;
execSQL(sql);
db.close();
}捕获(SQLE异常){
Toast.makeText(cont,e.toString(),Toast.LENGTH_LONG).show();
}
}
公共阵列列表getContactByPhone(字符串编号){
试一试{
SQLiteDatabase db=this.getReadableDatabase();
ArrayList al=新的ArrayList();
Cursor cur=db.rawQuery(“从“+dbtable+”中选择*,其中类似“%”+number+“%”的电话,null);
while(cur.moveToNext())
al.add(cur.getInt(0)+“,+cur.getString(1)+“,+cur.getString(2));
db.close();
返回al;
}捕获(SQLE异常){
Toast.makeText(cont,e.toString(),Toast.LENGTH_LONG).show();
}
返回null;
}
公共ArrayList getContactByName(字符串sname){
试一试{
SQLiteDatabase db=this.getReadableDatabase();
ArrayList al=新的ArrayList();
Cursor cur=db.rawQuery(“从“+dbtable+”中选择*,其中名称类似“%””+sname+“%”,null);
while(cur.moveToNext())
al.add(cur.getInt(0)+“,+cur.getString(1)+“,+cur.getString(2));
db.close();
返回al;
}捕获(SQLE异常){
Toast.makeText(cont,e.toString(),Toast.LENGTH_LONG).show();
}
返回null;
}
公共阵列列表getAllContact(){
试一试{
SQLiteDatabase db=this.getReadableDatabase();
ArrayList al=新的ArrayList();
Cursor cur=db.rawQuery(“SELECT*from”+dbtable,null);
while(cur.moveToNext())
al.add(cur.getInt(0)+“,+cur.getString(1)+“,+cur.getString(2));
db.close();
返回al;
}捕获(SQLE异常){
Toast.makeText(cont,e.toString(),Toast.LENGTH_LONG).show();
}
返回null;
}
公共无效删除联系人(int sid){
试一试{
SQLiteDatabase db=getWritableDatabase();
String sql=“从“+dbtable+”中删除,其中id=“+sid;
execSQL(sql);
db.close();
}捕获(SQLE异常){
Toast.makeText(cont,e.toString(),Toast.LENGTH_LONG).show();
}
}
公共void deleteData(){
试一试{
SQLiteDatabase db=getWritableDatabase();
db.execSQL(“从”+dbtable中删除”);
db.close();
}捕获(SQLE异常){
Toast.makeText(cont,e.toString(),Toast.LENGTH_LONG).show();
}
}
公屋空置空置空置空置空置空置空置空置空置空置空置空置空置空置空置空置空置空置空置空置空置空置空置空置空置空置空置{
试一试{
SQLiteDatabase db=getReadableDatabase();
Cursor cur=db.rawQuery(“SELECT*from”+dbtable,null);
while(cur.moveToNext())
Toast.makeText(cont,cur.getString(1)+“”+cur.getString(2),Toast.LENGTH_LONG.show();
db.close();
}捕获(SQLE异常){
Toast.makeText(cont,e.toString(),Toast.LENGTH_LONG).show();
}
}
public int getCount(){
int-total=0;
试一试{
SQLiteDatabase db=getReadableDatabase();
Cursor curs=db.rawQuery(“从“+dbtable+”中选择*,其中1”,null);
总计=curs.getCount();
db.close();
}捕获(SQLE异常){
Toast.makeText(cont,e.toString(),Toast.LENGTH_LONG).show();
}
返回总数;
}
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
试一试{
db.execSQL(“如果存在删除表”+dbtable);
onCreate(db);
}捕获(SQLE异常){
Toast.makeText(cont,e.toString(),Toast.LENGTH_LONG).show();
}
}
}

`

明白了,我需要一个助手来管理所有的表