android数据存储中的SQLite

SQLite是一款android系统内置的轻量级的关系型数据库。

一、通过SQLiteOpenHelper类创建数据库

1、新建类DatabaseHelper(可自己命名)继承SQLiteOpenHelper类复写onCreate方法和onUpgrade方法。
2、复写四个参数的构造函数,四个参数分别为,Context(上下文)、name(数据库实例名字)、CursorFactory(查询时返回所用到)、version(版本号)。

3、在onCreate方法里,执行建表sql语句。

DatabaseHelper类代码如下

public class DatabaseHelper extends SQLiteOpenHelper{
	
	private Context mContext;

	//创建Book表的sql语句
	private static final String CREATE_BOOK="create table Book (id integer primary key autoincrement,author text,price integer,name text)";


	public DatabaseHelper(Context context, String name, 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 success", Toast.LENGTH_SHORT).show();
	}


	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		
	}
}

二、操作数据

QLiteOpenHelper类的getWriteableDataBase()方法返回一个SQLiteDataBase类的对象。

1、增加数据
新建ContentValues对象,调用put方法传入列名和值。

调用SQLiteDataBase类的insert方法来添加数据,此方法接受3个参数,分别为所操作的表名、在某些情况下让可为空的列自动赋值NULL(一般用不到次功能填入null即可)、ContentValues对象。

2、更新数据
新建ContentValues对象,调用put方法传入列名和值。

调用SQLiteDataBase类的update方法来更新数据,此方法接受4个参数,分别为所操作的表名、ContentValues对象、sql语句中的where条件(可以使用一个或多个"?"做为占位符)、字符串数组做为占位符的值。

3、删除数据
调用SQLiteDataBase类的delete方法来删除数据,此方法接受3个参数,分别为所操作的表名、sql语句中的where条件(可以使用一个或多个"?"做为占位符)、字符串数组做为占位符的值。

4、查询数据

调用SQLiteDataBase类的query方法来查询数据并返回一个Cursor对象。此方法的多种重载都具有很多参数,需要时可查询api文档,现例举一个来说明。

db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);

7个参数,分别为表名、列名、where条件、where条件占位符的值、需要group by的列、having约束、order排序方式,相信理解它对于熟悉sql语句的同学们来说就更简单了。

通过Cursor对象可将返回结果中的数据取出。

5、sql语句

对于喜欢使用sql语句来操作数据库的同学们来说,SQLiteDataBase类提供了execSQL方法来进行增加、更新、删除数据的操作,rawQuery方法来进行查询操作,这些方法均接受2个参数,分别是sql语句、sql语句占位符的值。


主活动onCreate方法代码如下:

        private DatabaseHelper dbHelper;
	private SQLiteDatabase db;
	
	ContentValues value = new ContentValues();
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //获取数据库
        dbHelper = new DatabaseHelper(this, "Book.db", null, 4);
        
        //获取SQLiteDatabase对象
        db=dbHelper.getWritableDatabase();
        
        //写入第一条数据
        value.put("id", 10);
        value.put("author", "tom");
        value.put("price", 15);
        value.put("name", "the one book");
        db.insert("Book", null, value);
        value.clear();
        
        //写入第二条数据
        value.put("id", 11);
        value.put("author", "jack");
        value.put("price", 20);
        value.put("name", "the two book");
        db.insert("Book", null, value);
        value.clear();
        
        //更新第一条数据的author
        value.put("author", "mary");
        String author[]={"tom"};
        db.update("Book", value, "author=?", author);
        
        //删除第二条数据
        String name[]={"the two book"};
        db.delete("Book", "name=?", name);
        
        //查询数据
        Cursor cs=db.query("Book", null, null, null, null, null, null);
        if(cs.moveToFirst())
        {
        	do{
        		//获取数据
        		int id=cs.getInt(cs.getColumnIndex("id"));
        		String authors=cs.getString(cs.getColumnIndex("author"));
        		int price=cs.getInt(cs.getColumnIndex("price"));
        		String names=cs.getString(cs.getColumnIndex("name"));
        		
        		//输出数据
        		Log.d("MainActivity","id is "+id);
        		Log.d("MainActivity","author is "+authors);
        		Log.d("MainActivity","price is "+price);
        		Log.d("MainActivity","name is "+names);
        		
        	}while(cs.moveToNext());
        }
        Toast.makeText(this, "create success", Toast.LENGTH_SHORT).show();
    }


运行结果:



得到输出:


三、升级数据库

新建DatabaseHelper类对象时,传入的版本号比之前的版本号大时,就会调用onUpgrade方法,在onUpgrade方法里进行升级数据库的操作即可。

四、检验数据库
Andoird SDK自带adb调试工具,可检验数据库。
1、cmd下输入adb shell进入shell命令模式(若不成功,则配置adb环境变量)。
2、进入/data/data/com.example/databases目录。
3、输入sqlite3 Book.db(数据库实例名),进入数据库操作模式。
4、输入.table可显示当前数据库下所有表。
5、通过sql语句遍历表。

截图如下:


adb shell还有很多的命令,这里就不多说了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值