0

14 ~ 15 個のテーブルを持つデータベースを持つ Android アプリケーションを開発しています。クエリ、挿入、削除などのために明らかにこれらのテーブルにアクセスしたい.

データベースを開くヘルパーを 1 つ作成し、データベースにアクセスしてクエリを実行するアダプターを 1 つ作成する必要がありますか? または、テーブルごとにヘルパーを作成しますか?

私はこの点について混乱しています。データベースを何度も開く必要がないため、最初のオプションの方が現実的です。

4

1 に答える 1

1

から拡張するクラスを作成し、SQLiteOpenHelper それぞれのメソッドを作成します。1 つは挿入用、1 つは削除用、1 つは更新用、もう 1 つは ResultSet の取得用です。次に例を示します。

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();
        }
    }

}

`

于 2013-01-16T02:14:19.960 に答える