大家好,我是一只在Android学习路上缓慢前行的小白,没有经验,啥也不会,希望大家多多帮助~
SQLite概念简介
SQLite数据库是Android系统自带的一个嵌入式(embeded SQL database)的数据库,适用SQL语法,它提供SQLiteDatabase类处理数据库的创建、修改、删除、查询等操作。如果数据固定而且数量不大,就可以使用类似SQLite这样的嵌入式数据库。
数据库在手机中的默认路径:data/data/包名/database/
SQLite的简单使用
推荐W3School的sql教程
http://www.w3school.com.cn/sql/
1、SQLiteDatabase类
主要用来提供一些管理数据库的方法
//获取SQLiteDatabase对象
//openOrCreateDatabase(String name, int mode, CursorFactory factory);
SQLiteDatabase db = openOrCreateDatabase("people.db", MODE_PRIVATE, null);
//创建一个名为people的数据库(如果有则直接打开)
openOrCreateDatabase会检查数据库是否已经存在,是则打开数据库,否则创建数据库,创建成功会传回一个SQLiteDatabase对象,否则抛出FileNotFoundException异常。
(1)name表示创建的数据库的名称,扩展名为.db,也可以指定扩展名;
(2)mode为配置文件案的访问权限,常用的值如下:
MODE_PRIVATE: 只有本应用程序具有访问权限;
MODE_READABLE:所有应用程序都具有读取权限;
MODE_WORLD_WRITEABLE:所有应用程序都具有写入权限;
SQLiteDatabase中的常用方法:
//1、执行SQL命令
execSQL(String sql);
//举例.创建一张名为person的表,该表有id、名字name、年龄age三个属性列
//这里将id设置为主键且自动增长
String create_table = "create table if not exists person "
+"(_id integer primary key autoincrement, "
+"name text not null, "
+"age integer not null)";
db.execSQL(create_table);
//2、插入数据
insert(String table,String nullColumnHack,ContentValues values);
//举例.使用values存放信息,将values插入到表person中
ContentValues values = new ContentValues();
values.put("name", "zhangsan");
values.put("age", "20");
db.insert("person", null, values);
values.clear();
//3、删除数据
delete(String table, String whereClause, String[] whereArgs)
//举例.
//在表中删除name为zhangsan的这一行数据,?相当于占位符,代替第三个参数
db.delete("person", "name like ?","new Stirng[]{"zhangsan"};
//4、修改数据
update(String table, ContentValues values, String whereClause, String[] whereArgs)
//举例.将zhangsan的年龄修改为22
values.put("age", "22");
db.update("person", values, "name like ?", new String[]{"zhangsan"});
values.clear();
//5、查询数据
(1)query(String table, String[] columns, String selection,String[] selectionArgs, String groupBy, String having,String orderBy);
(2)rawQuery(String sql, String[] selectionArgs)
//举例.查找所有年龄大于18的人的信息并且将查询结果打印出来
Cursor cursor = db.query("person", null, "age>?", "new String[]{"18"}, null, null, "age");
//或者
//Cursor cursor = db.rawQuery("selete * from person where age > ?", new String[]{"18"});
if(cursor != null){
while(cursor.moveToNext()){
int id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
Log.d("MainActivity", "id = " + id + ", name = " + name + ", age = " + price);
}
}
Cursor类是Android查询数据后得到的一个管理数据集合的类。
Cursor:游标接口,提供了遍历查询结果的方法
//6、关闭数据库
db.close();
2、SQLiteOpenHelper类
SQLiteDatabase的帮助类,用于管理数据库的创建和版本更新
(1)建立一个类(如MySQLiteHelper)继承它并重写onCreate()和onUpgrade()方法
onCreate() //创建数据库时调用
onUpgrade() //版本更新时调用
getReadableDatabase() //创建或打开一个只读数据库
getWritableDatabase() //创建或打开一个读写数据库
(2)实例化子类对象
MySQLiteHelper helper = new MySQLite(MainActivity.this, "newPeople.db");
SQLiteDatabase db = helper.getWritableDatabase();
最后补充
SQLite支持的数据类型
NULL – 空值
INTEGER – 整型值
REAL – 浮点值
TEXT – 字符串值
BLOB – 二进制对象
动态数据类型(弱引用):当某个值插入到数据库时,SQLite将会检查它的类型,如果该类型与关联的列不匹配,SQLite会尝试将该值转换为该列的类型,如果不能转换,该值将作为本身的类型存储