Android中SQLite的使用
前言:在Android开发中,数据存储有好几种,数据库存储数据是很常用的一种方式。SQLite 是一种轻量级的为嵌入式设备而设计的,在很多嵌入式设备中都使用了它,当然手机也是一种嵌入式设备,因此在Android开发的时候,很经常用到SQLite.
1.如何使用SQLite?
在开发的时候,安卓平台给我们提供了一个数据辅助类这些类都继承SQLiteOpenHelper 。
SQLiteOpenHelper的构造函数:
SQLiteOpenHelper (Context context, String name, CursorFactory factory, int version, DatabaseErrorHandler errorHandler) { }
第一个参数:Context类型,上下文对象。
第二个参数:String类型,数据库的名称
第三个参数:CursorFactory类型
第四个参数:int类型,数据库版本
第二个参数:String类型,数据库的名称
第三个参数:CursorFactory类型
第四个参数:int类型,数据库版本
继承的同时需实现两个方法:
@Override
public void onCreate(SQLiteDatabase db)
{
//创建数据库表
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
//数据库更新
}
首先 onCreate() 是建表操作. 关于SQLite的语句大全可参考:http://blog.csdn.net/gjy_it/article/details/51933496
比如说要建一个学生表:
String sql=""create table if not exists student(_id INTEGER PRIMARY KEY AUTOINCREMENT ,name varchar(20),studentnumber varchar(20),";
这种SQL语句 写法固定 只是添加属性 比如 _id是一种自动增长型数据,插入一条 _id+1
name,studentnumber都是属性,也可以添加更多的属性
组成了一句SQL语句之后,就要开始去执行它,把表创建出来 在oncreate(
<span style="font-size:14px;">SQLiteDatabase db)中参数db 就可以执行创建这条SQL语句:</span>
db.execSQL(sql);
这样的话 这个student表就创建出来了
onUpgrade() 更新数据库,里面传有三个参数 db,oldVersion,newVersion 从英文也可以看出 是 新版本旧版本号
其实就是对比新旧版本。 如果版本不一致 ,则重新创建数据库或修改数据库。
对于实例 这边就不做多解释。
在创建好表后,就可以对表进行 简单的增删改查的操作了。
首先来了解下在 SQLite 中的增删改查操作的语句。具体参考博客:
http://blog.csdn.net/gjy_it/article/details/51933496
在了解了增删改查的语句后,就结合在安卓程序中使用数据库操作。
1.在安卓开发中 Cursor 对获取数据相当重要,我一直把他理解为 游标
也就是查询相对应的数据后,这个游标将会指向这些数据。我们通过Cursor
就可以对这些查询的数据进行操作。
下面给出代码实例并解析:
public static List<String> GetAllDataList(Context context)
{
SearchDBHelper sDbHelper = new SearchDBHelper(context);
SQLiteDatabase database = sDbHelper.getWritableDatabase();
List<String> lists = new ArrayList<String>();
Cursor cursor = database.query("search", null, null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast() && (cursor.getString(1) != null))
{
lists.add(cursor.getString(1));
cursor.moveToNext();
}
if (cursor != null)
{
cursor.close();
}
return lists;
}
这个静态方法 的功能:获取查询数据库中的所有数据。
SearchDBHelper是自己定义的一个辅助工具类 继承于SQLiteOpenHelper 。
database.query()的参数是什么呢?
public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit);
参数说明:
table:数据库表的名称
columns:数据库列名称数组 写入后最后返回的Cursor中只能查到这里的列的内容
selection:查询条件
selectionArgs:查询结果
groupBy:分组列
having:分组条件
orderBy:排序列
limit:分页查询限制
Cursor:返回值,将查询到的结果都存在Cursor
参数说明:
table:数据库表的名称
columns:数据库列名称数组 写入后最后返回的Cursor中只能查到这里的列的内容
selection:查询条件
selectionArgs:查询结果
groupBy:分组列
having:分组条件
orderBy:排序列
limit:分页查询限制
Cursor:返回值,将查询到的结果都存在Cursor
接下来 对Cursor进行操作 moveToFirst() 移到第一条记录(* 一般用 moveToNext 循环 获取里面存储的数据 )
获取出来的数据存储在LIST 集合中。
public static long InsertSearchContext(Context context, String key)
{
SearchDBHelper sDbHelper = new SearchDBHelper(context);
SQLiteDatabase database = sDbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("value", key);
long id = database.insert("search", null, values);
return id;
}
这个静态方法 的功能:向数据库中插入数据。
首先 来看下
的参数
insert(String table,
String
nullColumnHack, ContentValues values) 整体返回值为一个long类型的,也就是插入的第几条记录。
的参数
参数说明:
table:数据库表的名称
table:数据库表的名称
nullcoumnHack:
( nullColumnHack:当values参数为空或者里面没有内容的时候,我们insert是会失败的(底层数据库不允许插入一个空行) 为了防止这种情况,我们要在这里指定一个列名,到时候如果发现将要插入的行为空行时,就会将你指定的这个列名的值设为null,然后再向数据库 values:ContentValues对象,差不多就是一个map.通过键值对的形式存储值,键表示的是Column,值就是对应Column的值咯。
)
( nullColumnHack:当values参数为空或者里面没有内容的时候,我们insert是会失败的(底层数据库不允许插入一个空行) 为了防止这种情况,我们要在这里指定一个列名,到时候如果发现将要插入的行为空行时,就会将你指定的这个列名的值设为null,然后再向数据库 values:ContentValues对象,差不多就是一个map.通过键值对的形式存储值,键表示的是Column,值就是对应Column的值咯。
)
ContentValues:要插入的键值对(这个用法这边就不介绍了 就是value.putString(键,值))
再来看下第二种的插入方式:
public static int queryUserExist(Context context,String where)
{
UserLoginDataBase sDataBase = new UserLoginDataBase(context);
SQLiteDatabase database = sDataBase.getWritableDatabase();
Cursor cursor = database.rawQuery("select * from userdata where user=?", new String[]{where});
int count=0;
while(cursor.moveToNext())
{
count++;
}
if (cursor!=null)
{
cursor.close();
}
return count;
}
第二种的插入方法是
rawQuery(String sql, String[] selectionArgs)
参数说明:
sql:要执行的 sql语句
selectionArgs:条件的参数的替代
返回值也是CURSOR
可以 看下代码:
"select * from userdata where user=?" 要注意这SQL的写法 不要多了逗号,引号或其他符号,多一个都不能正常的执行。
其中 ? 就是用后面的参数代替 new String[]{"a"} 有几个?就有几个替代参数。
删除更新。。。的操作也一样,
关键是API 穿的参数 都差不多。多动手去试验会有更佳的效果。
)