持久化存储--3、SQLite 数据库存储

前端之家收集整理的这篇文章主要介绍了持久化存储--3、SQLite 数据库存储前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

sqlite:轻量级的关系型数据库,android提供sqliteOpenHelper帮助类,方便对数据库创建和升级。抽象方法onCreate()和 onUpgrade(),创建和升级
数据库逻辑。
实例方法getReadableDatabase() 和
getWritableDatabase(),创建或打开现有数据库

public@H_404_8@ class@H_404_8@ MyDatabaseHelper@H_404_8@ extends@H_404_8@ sqliteOpenHelper@H_404_8@ {@H_404_8@

    public@H_404_8@ static@H_404_8@ final@H_404_8@ String CREATE_BOOK = "create table Book ("@H_404_8@
            + "id integer primary key autoincrement,"@H_404_8@ 
            + "author text,"@H_404_8@
            + "price real,"@H_404_8@ 
            + "pages integer,"@H_404_8@ 
            + "name text)"@H_404_8@;

    public@H_404_8@ static@H_404_8@ final@H_404_8@ String CREATE_CATEGORY = "create table Category ("@H_404_8@
            + "id integer primary key autoincrement,"@H_404_8@
            + "category_name text,"@H_404_8@
            + "category_code integer)"@H_404_8@;

    private@H_404_8@ Context mContext;
    //重写构造方法:Context,数据库名,查询数据时返回自定义Cursor,数据库版本号@H_404_8@
    public@H_404_8@ MyDatabaseHelper@H_404_8@(Context context,String name,CursorFactory factory,int@H_404_8@ version) {
        super@H_404_8@(context,name,factory,version);
        mContext = context;
    }

    @Override@H_404_8@
    public@H_404_8@ void@H_404_8@ onCreate@H_404_8@(sqliteDatabase db) {
        db.execsql(CREATE_BOOK);
        db.execsql(CREATE_CATEGORY);
        Toast.makeText(mContext,"Create succeeded"@H_404_8@,Toast.LENGTH_SHORT).show();
    }

    @Override@H_404_8@
    public@H_404_8@ void@H_404_8@ onUpgrade@H_404_8@(sqliteDatabase db,int@H_404_8@ oldVersion,int@H_404_8@ newVersion) {
        db.execsql("drop table if exists Book"@H_404_8@);
        db.execsql("drop table if exists Category"@H_404_8@);
        onCreate(db);
    }

}

1、创建数据库

dbHelper = new@H_404_8@ MyDatabaseHelper(this@H_404_8@,"BookStore.db"@H_404_8@,null@H_404_8@,2@H_404_8@);
        Button createDatabase = (Button) findViewById(R.id.create_database);
        createDatabase.setOnClickListener(new@H_404_8@ OnClickListener() {
            @Override@H_404_8@
            public@H_404_8@ void@H_404_8@ onClick@H_404_8@(View v) {
                dbHelper.getWritableDatabase();
            }
        });

生成BookStore.db数据库

使用sqliteSpy软件打开,可以看到Book表,里面有5种数据类型

2、添加数据

Button addData = (Button) findViewById(R.id@H_404_8@.add@H_404_8@_data);@H_404_8@
        addData.setOnClickListener@H_404_8@(new OnClickListener() {
            @Override
            public void onClick(View v) {
                sqliteDatabase db = dbHelper.getWritableDatabase@H_404_8@();@H_404_8@
                ContentValues values = new ContentValues();@H_404_8@
                values.put@H_404_8@("name"@H_404_8@,"The Da Vinci Code"@H_404_8@);@H_404_8@
                values.put@H_404_8@("author"@H_404_8@,"Dan Brown"@H_404_8@);@H_404_8@
                values.put@H_404_8@("pages"@H_404_8@,454@H_404_8@);@H_404_8@
                values.put@H_404_8@("price"@H_404_8@,16.96@H_404_8@);@H_404_8@
                db.insert@H_404_8@("Book"@H_404_8@,null,values);@H_404_8@
                values.clear@H_404_8@();@H_404_8@
                values.put@H_404_8@("name"@H_404_8@,"The Lost Symbol"@H_404_8@);@H_404_8@
                values.put@H_404_8@("author"@H_404_8@,510@H_404_8@);@H_404_8@
                values.put@H_404_8@("price"@H_404_8@,19.95@H_404_8@);@H_404_8@
                db.insert@H_404_8@("Book"@H_404_8@,values);@H_404_8@
            }
        });@H_404_8@

可以看到数据库里面的数据

3、更新数据

Button updateData = (Button) findViewById(R.id.update_data);
        updateData.setOnClickListener(new@H_404_8@ OnClickListener() {
            @Override@H_404_8@
            public@H_404_8@ void@H_404_8@ onClick@H_404_8@(View v) {
                sqliteDatabase db = dbHelper.getWritableDatabase();
                ContentValues values = new@H_404_8@ ContentValues();
                values.put("price"@H_404_8@,10.99@H_404_8@);
                db.update("Book"@H_404_8@,values,"name = ?"@H_404_8@,new@H_404_8@ String[] { "The Da Vinci Code"@H_404_8@ });
            }
        });

更新数据,可以看到价格变成了10.99

4、删除数据

Button deleteButton = (Button) findViewById(R.id.delete_data);
        deleteButton.setOnClickListener(new@H_404_8@ OnClickListener() {
            @Override@H_404_8@
            public@H_404_8@ void@H_404_8@ onClick@H_404_8@(View v) {
                sqliteDatabase db = dbHelper.getWritableDatabase();
                db.delete("Book"@H_404_8@,"pages > ?"@H_404_8@,new@H_404_8@ String[] { "500"@H_404_8@ });
            }
        });

删除数据,可以看到name数据The Lost Symbol被删除,其他项也被删除

5、遍历数据

Button queryButton = (Button) findViewById(R.id@H_404_8@.query@H_404_8@_data);@H_404_8@
        queryButton.setOnClickListener@H_404_8@(new OnClickListener() {
            @Override
            public void onClick(View v) {
                sqliteDatabase db = dbHelper.getWritableDatabase@H_404_8@();@H_404_8@
                Cursor cursor = db.query@H_404_8@("Book"@H_404_8@,null);@H_404_8@
                if (cursor.moveToFirst@H_404_8@()) {
                    do {
                        String name = cursor.getString@H_404_8@(cursor
                                .getColumnIndex@H_404_8@("name"@H_404_8@));@H_404_8@
                        String author = cursor.getString@H_404_8@(cursor
                                .getColumnIndex@H_404_8@("author"@H_404_8@));@H_404_8@
                        int pages = cursor.getInt@H_404_8@(cursor
                                .getColumnIndex@H_404_8@("pages"@H_404_8@));@H_404_8@
                        double price = cursor.getDouble@H_404_8@(cursor
                                .getColumnIndex@H_404_8@("price"@H_404_8@));@H_404_8@
                        Log.d@H_404_8@("MainActivity"@H_404_8@,"book name is "@H_404_8@ + name);@H_404_8@
                        Log.d@H_404_8@("MainActivity"@H_404_8@,"book author is "@H_404_8@ + author);@H_404_8@
                        Log.d@H_404_8@("MainActivity"@H_404_8@,"book pages is "@H_404_8@ + pages);@H_404_8@
                        Log.d@H_404_8@("MainActivity"@H_404_8@,"book price is "@H_404_8@ + price);@H_404_8@
                    } while (cursor.moveToNext@H_404_8@());@H_404_8@
                }
                cursor.close@H_404_8@();@H_404_8@
            }
        });@H_404_8@

设置断点,debug模式下,单击query按键,运行到断点处,可以在watch窗口看到各个变量的数据:

6、代替数据

Button replaceData = (Button) findViewById(R.id.replace_data);
        replaceData.setOnClickListener(new@H_404_8@ OnClickListener() {
            @Override@H_404_8@
            public@H_404_8@ void@H_404_8@ onClick@H_404_8@(View v) {
                sqliteDatabase db = dbHelper.getWritableDatabase();
                db.beginTransaction();
                try@H_404_8@ {
                    db.delete("Book"@H_404_8@,null@H_404_8@);
// if (true) {@H_404_8@
// throw new NullPointerException();@H_404_8@
// }@H_404_8@
                    ContentValues values = new@H_404_8@ ContentValues();
                    values.put("name"@H_404_8@,"Game of Thrones"@H_404_8@);
                    values.put("author"@H_404_8@,"George Martin"@H_404_8@);
                    values.put("pages"@H_404_8@,720@H_404_8@);
                    values.put("price"@H_404_8@,20.85@H_404_8@);
                    db.insert("Book"@H_404_8@,values);
                    db.setTransactionSuccessful();
                } catch@H_404_8@ (Exception e) {
                    e.printStackTrace();
                } finally@H_404_8@ {
                    db.endTransaction();
                }
            }
        });

可以看到name数据被代替:

猜你在找的Sqlite相关文章