SQLite数据库存储

      在Android中为了很方便的管理我们的数据库,提供了一个SQLiteOpenHelper的帮助类。首先这个类是一个抽象类,如果想要使用它必须创建一个类去继承它,然后去实现它的抽象方法。其中有两个重要的方法: getReadableDatabase()和getWritableDatabase().这两个方法都可以创建或者打开一个现有的数据库,并且返回一个可对数据库进行读写的对象。然而,如果数据库不可写入了,比如磁盘空间已经满了,这个时候就得使用getReadableDatabase(),它会使用只读的方式打开数据库,然后使用getWritableDatabase()方法就会出现异常,因为已经无法写入,不能以只读只写的方式打开。下面看下一个继承的实例:

public class MyDatabaseHelper extends SQLiteOpenHelper {

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

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

    private Context mContext;

    public MyDatabaseHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version) {
        super(context,name,factory,version);
        mContext = context;
    }
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(CREATE_BOOK);
        sqLiteDatabase.execSQL(CREATE_CATEGORY);
        Toast.makeText(mContext,"Create succeeded",Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        sqLiteDatabase.execSQL("drop table if exists Book");
        sqLiteDatabase.execSQL("drop table if exists Category");
        onCreate(sqLiteDatabase);
    }

 

布局文件中添加一个按钮即可,用于创建数据库,升级数据库写在upgrade函数里面,先将之前的表删除,然后再执行oncreate()函数。 向数据库中添加数据,需要使用到一个Contentvalue,ContentValues 和HashTable类似都是一种存储的机制 但是两者最大的区别就在于,contenvalues只能存储基本类型的数据,像string,int之类的,不能存储对象这种东西,而HashTable却可以存储对象。ContentValues存储对象的时候,以(key,value)的形式来存储数据。
在忘数据库中插入数据的时候,首先应该有一个ContentValues的对象所以:
ContentValues initial = new ContentValues();
initial.put(key,values);
SQLiteDataBase db ;
db.insert(database_name,null,initialValues);
插入成功就返回记录的id否则返回-1;

则主要的Activity代码为: 

public class MainActivity extends AppCompatActivity {

    private MyDatabaseHelper dbHelper;
    private Button createDatabase;
    private Button addData;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dbHelper = new MyDatabaseHelper(this,"BookStore.db",null,2);
        createDatabase = findViewById(R.id.create_database);
        addData = findViewById(R.id.add_data);
        createDatabase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dbHelper.getWritableDatabase();
            }
        });
        addData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                SQLiteDatabase db = dbHelper.getWritableDatabase();
                ContentValues values = new ContentValues();
                values.put("name","The Da Vinci Code");
                values.put("author","Dan Brown");
                values.put("pages",454);
                values.put("price",16.96);
                db.insert("Book",null,values);
                values.clear();
                //开始组装第二条数据
                values.put("name","The Lost Symbol");
                values.put("author","Dan Brown");
                values.put("pages",510);
                values.put("price",19.95);
                db.insert("Book",null,values);
            }
        });

至于删除,更新,查询都是一样的套路,查询要复杂些,它涉及的限制条件更多些,主要是使用query()方法,它会返回一个游标对象,查询到的数据都可以从这个对象取出。使用cursor.getString()方法,当然使用完记得关闭游标,它是比较耗费资源的一个东西。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值