Android之SQLite数据库存储

Android之SQLite数据库存储

一. 创建数据库

  1. 创建一个 “数据库管理器” 实体类来继承 SQLiteOpenHelper抽象类。其中需要重写两个方法用于创建数据库和升级数据库:onCreate()onUpgrade()

  2. 数据库管理器的构造方法接收四个参数。第一个是context(环境),第二个是数据库名,第三个是查询数据返回的自定义的cursor、一般都是null,第四个是数据库的版本号。

  3. 数据库管理器实例的两种方法,getReadableDatabase()getWritableDatabase()。这两个都可以创建或打开一个数据库,没有的时候创建,存在的时候直接打开就行操作。(当数据库不可以写入的时候read以只读方式打开,而write方式会出错。)

创建一个BookStore.db数据库,其中新建Book表

 create table Book(
     id integer primary key autoincrement,
     author text,
     price real,
     pages integer,
     name text
    )

这是SQL语句,代码如下:

  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)";
 
     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 db) {
         db.execSQL(CREATE_BOOK);
         Toast.makeText(mContext, "Create succeeded", Toast.LENGTH_LONG).show();
     }
 
     /*升级数据库*/
     @Override
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)       {
     }
}

在布局中写一个创建按钮,然后MainActivity中的代码如下:

  public class MainActivity extends AppCompatActivity {
  
      private MyDatabaseHelper dbHelper;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
  
         dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1);
         Button createDatabase = (Button) findViewById(R.id.create_database);
         createDatabase.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
                 dbHelper.getWritableDatabase();
             }
         });
     }
 }

二. 添加数据

用insert()方法添加数据。
insert()方法接收三个参数:

  • “表名”
  • “默认空值”
  • “传入组装好的数据values”

而其中用到的contentvalues数据类型则是用来组装传入内容的。相当于一个map组,用put来压入数据。用完后要记得clear();代码如下:

          /*插入数据,insert方法传入三个参数,“表名”“默认空值”“传入组装好的数据values”*/
          Button addData = (Button) findViewById(R.id.add_data);
          addData.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  SQLiteDatabase db = dbHelper.getWritableDatabase();
                 /*用contentValues来组装要插入的数据 未赋值的自动生成默认值*/
                 ContentValues values = new ContentValues();
  //                开始组装第一组数据
                 values.put("name", "The da vi code");
                 values.put("author", "Dan");
                 values.put("pages", 434);
                 values.put("price", 13.33);
                 db.insert("Book", null, values);//输入第一行数据
                 values.clear();//清空values。
 
				 //   开始组装第二条数据
                 values.put("name", "The lost");
                 values.put("author", "mask");
                 values.put("pages", 12);
                 values.put("price", 999);
                 db.insert("Book", null, values);//输入第二行数据
                 values.clear();//清空values。
             }
         });

三. 更新数据

使用update()方法,传入四个参数,分别是:

  • “表名”
  • “contentvalues值 修改的内容值”
  • “SQL语句中的where约束条件”
  • “where中的具体限定值”

同样将要改变的数据压入contentvalues中,然后传入。代码如下:

          /*更新数据,使用update方法,传入四个参数,
          “表名”“修改的内容值”“SQL语句中的where”“where中的具体限定值”*/
          Button updateData = (Button) findViewById(R.id.update_data);
          updateData.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  SQLiteDatabase db = dbHelper.getWritableDatabase();
                  ContentValues values = new ContentValues();
                  values.put("price", 1.2);
                 db.update("Book", values, "name=?", new String[]{"The da vi code"});
             }
         });

四. 删除数据

使用delete()方法,不需要用content数据来传数据,因为只需要指定相应的数据进行删除即可。delete()方法传入三个参数:

  • “表名”
  • “SQL语句中的where约束条件”
  • “where中的具体限定值”

代码如下:

          /*删除数据,使用delete方法,传入三个参数,
          * “表名”“SQL语句中的where”“where中的具体限定值”*/
          Button deleteButton = (Button) findViewById(R.id.delete_data);
          deleteButton.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                 SQLiteDatabase db = dbHelper.getWritableDatabase();
                  db.delete("Book", "pages>?", new String[]{"20"});
              }
         });

查询数据

同时需要用到cursor对象(光标)来输出查询结果,将查询结果赋给cursor对象,得到的cursor对象。

接着调用他的moveToFirst()方法将数据指针移动到第一行开始,然后加入循环,遍历每一行数据,通过moveToNext()来进行跳转。

通过cursor的getColumnIndex()方法获得某一列在表中位置索引,然后将索引传入相应的取值方法中,得到对应的数据。使用完后需要将cursor通过close关闭。

 /*查询数据,使用query方法,传入参数较多。*/
          Button queryButton = (Button) findViewById(R.id.query_data);
          queryButton.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  SQLiteDatabase db = dbHelper.getWritableDatabase();
                  //查询book中所有数据
                  Cursor cursor = db.query("Book", null, null, null, null, null, null);
                  if (cursor.moveToFirst()) {
                     do {
                         //遍历cursor对象 取出数据并打印
                         String name = cursor.getString(cursor.getColumnIndex("name"));
                         String author = cursor.getString(cursor.getColumnIndex("author"));
                         int pages = cursor.getInt(cursor.getColumnIndex("pages"));
                         double price = cursor.getDouble(cursor.getColumnIndex("price"));
                         Log.d("MainActivity", "book name is " + name);
                         Log.d("MainActivity", "book author is " + author);
                        Log.d("MainActivity", "book pages is " + pages);
                         Log.d("MainActivity", "book price is " + price);
                     }while (cursor.moveToNext());
                 }
                 cursor.close();
             }
         });
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值