简单使用Android内置SQLite数据库


SQLite介绍

SQLite数据库就像它的名字一样,它是一个很小的关系型数据库,但它基本拥有一般的关系型数据库的基本功能,这对于手机而言,已经不错了,也是手机数据库的比较好的选择。


SQLiteOpenHelper使用方法

SQLiteOpenHelper是一个抽象助手类,我们要使用它,必须继承他,然后必须Override两个回调函数(onCreateonUpgrade)和一个构造函数。

当创建了SQLiteOpenHelper子类的对象之后,该对象就有了getReadableDatabase()getWritableDatabase()两个方法,通过这两个方法就能够得到SQLiteDatabase的对象,就可以对数据库进行操作了。


我们需要创建一个继承SQLiteOpenHelper的类,如下代码:

 
  
  1. publicclass DBHelper extends SQLiteOpenHelper {

  2. privatestaticfinalint VERSION = 1;

  3. public DBHelper(Context context, String name, CursorFactory factory,

  4. int version) {

  5. super(context, name, factory, version);

  6. // TODO Auto-generated constructor stub

  7. }

  8. public DBHelper(Context context, String name,int version){

  9. super(context, name, null, version);

  10. }

  11. public DBHelper(Context context, String name){

  12. super(context, name, null, VERSION);

  13. }

  14. @Override

  15. publicvoid onCreate(SQLiteDatabase db) {

  16. // TODO Auto-generated method stub

  17. System.out.println("Create!!!");

  18. db.execSQL("create table user(id int,name varchar(20),age int)");

  19. }

  20. @Override

  21. publicvoid onUpgrade(SQLiteDatabase db, int oldV, int newV) {

  22. // TODO Auto-generated method stub

  23. System.out.println("Update!!!");

  24. }

  25. }


代码中实现了3个构造函数,含有4个参数的是必须实现的构造函数,3个参数的主要用于数据库版本的修改,2个参数的用于初始数据库的建立。同时实现了两个回调函数,onCreate是在这个数据库首次被建立的时候,会执行的回调函数,因此,我们在这个函数里创建我们想要的数据表,而onUpgrade回调函数是在数据库版本更新的时候需要执行的函数。


创建更新数据库,增删改查等操作

我们先建立一个Activity,上面有6个按钮,分别表示我们的操作。如图:


233804164.png

首先我们要创建数据库,我们为createDB按钮绑定事件,代码如下:

 
  
  1. Button createDB = (Button)findViewById(R.id.createdb);

  2. createDB.setOnClickListener(new OnClickListener() {

  3. @Override

  4. publicvoid onClick(View arg0) {

  5. // TODO Auto-generated method stub

  6. DBHelper dbHelper = new DBHelper(SQLiteDemoActivity.this,"test_db");//创建DBHelper的对象

  7. SQLiteDatabase db = dbHelper.getReadableDatabase();//得到SQLiteDatabase对象,并调用DBHelper中的回调函数onCreate,创建test_db为名字数据库和建立一个user表

  8. }

  9. });

修改数据库版本,对按钮绑定监听器,代码如下:

 
  
  1. Button updateDB = (Button)findViewById(R.id.updatedb);

  2. updateDB.setOnClickListener(new OnClickListener() {

  3. @Override

  4. publicvoid onClick(View arg0) {

  5. // TODO Auto-generated method stub

  6. DBHelper dbHelper = new DBHelper(SQLiteDemoActivity.this,"test_db",2); //创建DBHelper的对象,使用的是3个参数的构造函数

  7. SQLiteDatabase db = dbHelper.getReadableDatabase();

  8. }

  9. });


代码创建DBHelper的对象,使用的是3个参数的构造函数,由于数据库已存在,所以会执行onUpgrade的回调函数,来对数据库的版本进行修改。


Insert操作

Insert按钮绑定监听器,代码如下:


 
  
  1. Button insert = (Button)findViewById(R.id.insert);

  2. insert.setOnClickListener(new OnClickListener() {

  3. @Override

  4. publicvoid onClick(View arg0) {

  5. // TODO Auto-generated method stub

  6. ContentValues value = new ContentValues();

  7. value.put("id", 3);

  8. value.put("name","Alice");

  9. value.put("age", 14);

  10. DBHelper dbHelper = new DBHelper(SQLiteDemoActivity.this,"test_db");

  11. SQLiteDatabase db = dbHelper.getWritableDatabase();

  12. db.insert("user", null, value);

  13. }

  14. });


首先创建了ContentValue对象,里面放的是键值对,键对应表中的列名,值就是该列的值。然后用同样的方法创建DBHelper对象,由于是写入数据,所以就dbHelper调用getWritableDatabase()方法来得到一个可写入的SQLiteDatabase对象,然后调用该对象的insert方法将数据插入。


Update操作

update按钮绑定监听器,代码如下:

 
  
  1. Button update = (Button)findViewById(R.id.update);

  2. update.setOnClickListener(new OnClickListener() {

  3. @Override

  4. publicvoid onClick(View arg0) {

  5. // TODO Auto-generated method stub

  6. ContentValues value = new ContentValues();

  7. value.put("age", 17);

  8. DBHelper dbHelper = new DBHelper(SQLiteDemoActivity.this,"test_db");

  9. SQLiteDatabase db = dbHelper.getWritableDatabase();

  10. db.update("user",value,"id=?",new String[]{"3"});

  11. }

  12. });


上面代码的目的是将Alice的年龄从14岁改为17岁,这里同样创建一个ContentValues的对象,用来存储需要改变的属性的键值对,同样得到一个可写入的SQLiteDatabase对象,然后使用update方法进行修改。Update函数有四个参数,第一个为要修改的表名,第二个为需要修改的键值对ContentValues对象,第3和第4可以看成是where子句,其中?为占位符,后面的String数组中与前面的键一一对应。上面的代码即表示为“where id=3”。


Delete删除操作

delete按钮绑定监听器,代码如下:

 
  
  1. Button delete = (Button)findViewById(R.id.delete);

  2. delete.setOnClickListener(new OnClickListener() {

  3. @Override

  4. publicvoid onClick(View arg0) {

  5. // TODO Auto-generated method stub

  6. DBHelper dbHelper = new DBHelper(SQLiteDemoActivity.this,"test_db");

  7. SQLiteDatabase db = dbHelper.getWritableDatabase();

  8. db.delete("user","id=?",new String[]{"3"});

  9. }

  10. });


上面代码的目的是将Alice删除,这里同样得到一个可写入的SQLiteDatabase对象,然后使用delete方法进行修改。delete函数有3个参数,第一个为要修改的表名,第2和第3可以看成是where子句,其中?为占位符,后面的String数组中与前面的键一一对应。上面的代码即表示为“where id=3”。


Query查询操作

query按钮绑定监听器,代码如下:


 
  
  1. Button query = (Button)findViewById(R.id.query);

  2. query.setOnClickListener(new OnClickListener() {

  3. @Override

  4. publicvoid onClick(View arg0) {

  5. // TODO Auto-generated method stub

  6. DBHelper dbHelper = new DBHelper(SQLiteDemoActivity.this,"test_db");

  7. SQLiteDatabase db = dbHelper.getReadableDatabase();

  8. Cursor cursor = db.query("user", new String[]{"name","age"}, "id=?",new String[]{"2"}, null,null, null);

  9. while(cursor.moveToNext()){

  10. System.out.println(cursor.getString(cursor.getColumnIndex("name"))+cursor.getString(cursor.getColumnIndex("age")));

  11. }

  12. }

  13. });


代码是要查得id=2nameage,首先还是得到一个可读的SQLiteDatabase对象,然后使用query方法来得到一个游标来遍历数据表,这个query方法有很多参数,可以这么解释query(表名,所要查的列名组成的字符串数组,where子句的前半部分,where子句的后半部分值,groupby子句,having子句,orderby子句),通过这个方法会返回一个Cursor对象,然后用while循环来遍历数据表。


以上就是SQLite的基本使用方法。


附件为示例代码,仅供参考。

如果我的文章给与了你帮助,就不妨请我喝杯咖啡吧,点击-> btn-index.png