【问题标题】:How to write reusable code for Database in Android [closed]如何在 Android 中为数据库编写可重用代码 [关闭]
【发布时间】:2012-03-20 11:06:33
【问题描述】:

我应该如何在 Android 中为数据库编写一个可重用代码。我应该遵循什么模式或架构?

【问题讨论】:

    标签: android database sqlite design-patterns code-reuse


    【解决方案1】:
    Step 1: Make Always different package in Application eg(com.appname.db).
            Step 2: Create DBHelpar Class on it and Put All method relate db on it,.
            Step 3: This is All are Common Method.
    
    i am pasting code for your reference 
    
    
    package com.androidhive.androidsqlite;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    
    public class DatabaseHandler extends SQLiteOpenHelper {
    
        // All Static variables
        // Database Version
        private static final int DATABASE_VERSION = 1;
    
        // Database Name
        private static final String DATABASE_NAME = "contactsManager";
    
        // Contacts table name
        private static final String TABLE_CONTACTS = "contacts";
    
        // Contacts Table Columns names
        private static final String KEY_ID = "id";
        private static final String KEY_NAME = "name";
        private static final String KEY_PH_NO = "phone_number";
    
        public DatabaseHandler(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
    
        // Creating Tables
        @Override
        public void onCreate(SQLiteDatabase db) {
            String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
                    + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
                    + KEY_PH_NO + " TEXT" + ")";
            db.execSQL(CREATE_CONTACTS_TABLE);
        }
    
        // Upgrading database
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // Drop older table if existed
            db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);
    
            // Create tables again
            onCreate(db);
        }
    
        /**
         * All CRUD(Create, Read, Update, Delete) Operations
         */
    
        // Adding new contact
        void addContact(Contact contact) {
            SQLiteDatabase db = this.getWritableDatabase();
    
            ContentValues values = new ContentValues();
            values.put(KEY_NAME, contact.getName()); // Contact Name
            values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone
    
            // Inserting Row
            db.insert(TABLE_CONTACTS, null, values);
            db.close(); // Closing database connection
        }
    
        // Getting single contact
        Contact getContact(int id) {
            SQLiteDatabase db = this.getReadableDatabase();
    
            Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
                    KEY_NAME, KEY_PH_NO }, KEY_ID + "=?",
                    new String[] { String.valueOf(id) }, null, null, null, null);
            if (cursor != null)
                cursor.moveToFirst();
    
            Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
                    cursor.getString(1), cursor.getString(2));
            // return contact
            return contact;
        }
    
        // Getting All Contacts
        public List<Contact> getAllContacts() {
            List<Contact> contactList = new ArrayList<Contact>();
            // Select All Query
            String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;
    
            SQLiteDatabase db = this.getWritableDatabase();
            Cursor cursor = db.rawQuery(selectQuery, null);
    
            // looping through all rows and adding to list
            if (cursor.moveToFirst()) {
                do {
                    Contact contact = new Contact();
                    contact.setID(Integer.parseInt(cursor.getString(0)));
                    contact.setName(cursor.getString(1));
                    contact.setPhoneNumber(cursor.getString(2));
                    // Adding contact to list
                    contactList.add(contact);
                } while (cursor.moveToNext());
            }
    
            // return contact list
            return contactList;
        }
    
        // Updating single contact
        public int updateContact(Contact contact) {
            SQLiteDatabase db = this.getWritableDatabase();
    
            ContentValues values = new ContentValues();
            values.put(KEY_NAME, contact.getName());
            values.put(KEY_PH_NO, contact.getPhoneNumber());
    
            // updating row
            return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
                    new String[] { String.valueOf(contact.getID()) });
        }
    
        // Deleting single contact
        public void deleteContact(Contact contact) {
            SQLiteDatabase db = this.getWritableDatabase();
            db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
                    new String[] { String.valueOf(contact.getID()) });
            db.close();
        }
    
    
        // Getting contacts Count
        public int getContactsCount() {
            String countQuery = "SELECT  * FROM " + TABLE_CONTACTS;
            SQLiteDatabase db = this.getReadableDatabase();
            Cursor cursor = db.rawQuery(countQuery, null);
            cursor.close();
    
            // return count
            return cursor.getCount();
        }
    
    }
    

    我现在知道了如何在 android 中处理数据库。

    【讨论】:

    • 谢谢 Hasmukh:我需要为每个表创建单独的 Handler 类
    • 不,你可以创建多个表,你已经将代码(表)写入 DBHelpar 类的 onCreate..
    • 我认为你应该有一个通用的 db helper 类,以便它可以用作多个应用程序的库。您可能可以对其进行子类化,或编写它以便将表名、键名、定义存储在单独的类中。此外,插入、更新、删除和查询数据库的方法应该写在一个单独的类中,专门用于与数据库的接口。遵循 SOA 风格,代码更容易维护、复用、调试,也可以轻松编写单元测试。
    • @Hasmukh:我认为我们应该在每个方法(CRUD 方法)的开头获取 WritableDatabase/getReadableDatabase 并在方法的结尾调用“关闭”。你这么认为吗?
    • 事务怎么样,这种设计如何适应事务?
    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2011-03-10
    相关资源
    最近更新 更多