【问题标题】:Android DB Helper ClassAndroid 数据库助手类
【发布时间】:2011-12-31 19:15:21
【问题描述】:

我正在编写一个通用的 SQLHelper 类以用于我的 android 项目。但是我是 android 新手,因此我不知道应该使用哪些库来返回数据。我的DBHelper 扩展了SQLiteOpenHelper,我使用了那个类的方法。

对于“选择”查询,我应该返回哪种类型? (如 .NET 中的 DataSet) 对于“更新”查询,我应该得到什么作为参数?

我想生成 SQL 查询。

即对于插入,我使用了ContentValuesTableName 参数。

【问题讨论】:

    标签: android class helper


    【解决方案1】:

    看看我用来制作示例项目的这段代码。它为您提供了执行和使用 SQLite 数据库所需的一切。它回答了你的两个问题。 该示例获取用户的书名、作者、isbn 编号、评级和状态,将其插入数据库,允许更新数据删除和获取数据。

        public class DbAdapter {
    
    
        private static final String DATABASE_NAME = " nba";
        private static final String DATABASE_TABLE = "bookList";
        private static final int DATABASE_VERSION = 1;
        private static String TAG = "Upgrading Database!";
        public static final String KEY_BOOK = "book";
        public static final String KEY_AUTHOR = "author";
        public static final String KEY_ISBN = "isbn";
        public static final String KEY_ROWID = "_id";
        public static final String KEY_RATING = "rating";
        public static final String KEY_STATUS = "status";
    
    
        private DatabaseHelper mDbHelper;
        private SQLiteDatabase mDb;
    
    
        private static final String DATABASE_CREATE = 
                " create table  " +  DATABASE_TABLE  + " ("
                + KEY_ROWID + " integer primary key autoincrement,  "
                + KEY_AUTHOR + " text not null, "
                + KEY_BOOK + " text not null, "
                + KEY_RATING + " text not null, "
                + KEY_STATUS + " text not null, "
                + KEY_ISBN + " text not null); ";
    
        private final Context mCtx;
    
    
        public DbAdapter (Context ctx){
            this.mCtx = ctx;
    
    
    
                }
    
                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) {
                      db.execSQL("ALTER TABLE bookList ADD COLUMN String status");
    
            }
        }
                public DbAdapter open() throws SQLException{
    
                    mDbHelper =  new DatabaseHelper(mCtx);
                    mDb = mDbHelper.getWritableDatabase();
                    return this;
                }
                public void close(){
                    mDbHelper.close();
                }
    
                public long createBook(String book, String author, String isbn, float rating, String status){
                    ContentValues initialValues = new ContentValues();
                    initialValues.put(KEY_BOOK, book);
                    initialValues.put(KEY_AUTHOR, author);
                    initialValues.put(KEY_ISBN, isbn);
                    initialValues.put(KEY_RATING, rating);
                    initialValues.put(KEY_STATUS, status);
    
    
    
                    return mDb.insert(DATABASE_TABLE, null, initialValues);
    
                }
                public boolean deleteBook(long rowId){
                    return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
    
                }
                public Cursor fetchAllBooks(){          
                    return mDb.query(DATABASE_TABLE, new String[]{KEY_BOOK, KEY_ISBN,KEY_AUTHOR,KEY_ROWID, KEY_RATING, KEY_STATUS}, null, null, null, null, null);
                }
                public Cursor fetchBook(long rowId) throws SQLException{
                    Cursor mCursor = 
                    mDb.query(DATABASE_TABLE, new String[]{KEY_BOOK, KEY_AUTHOR,KEY_ROWID, KEY_ISBN, KEY_RATING, KEY_STATUS}, KEY_ROWID + "=" +
                                rowId, null, null, null, null);
    
                    if(mCursor != null){
                        mCursor.moveToFirst();
                    }
                    return mCursor;
    
                }
                public boolean updateBook(long rowId, String book, String author, String isbn, float rating, String status){
                    ContentValues args = new ContentValues();
                    args.put(KEY_BOOK, book);
                    args.put(KEY_AUTHOR, author);
                    args.put(KEY_ISBN, isbn);
                    args.put(KEY_RATING, rating);
                    args.put(KEY_STATUS, status);
    
    
                    return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null)> 0;
    
    
                }
    
    
    }
    

    【讨论】:

    • 感谢您的回答。我将使用 Cursor 类返回数据。但我想知道android是否有更好的类来返回数据?像 DataSet 一样,更有用吗?
    • 游标是大多数开发人员使用的。在我 4 年的开发中,我还没有看到有人使用其他任何东西。不是说做不到。
    • 那好吧。这意味着它对我也有用。感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多