Android中SQLite的使用 快速入门SQLite

3 篇文章 0 订阅

                                  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类型,数据库版本 
     
                      继承的同时需实现两个方法:
                    
 @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  

接下来 对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:数据库表的名称
nullcoumnHack:  
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 穿的参数 都差不多。多动手去试验会有更佳的效果。










)    
                                                           
               
                                    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值