android sqlite 简明教程-阿里云开发者社区

开发者社区> 数据库> 正文
登录阅读全文

android sqlite 简明教程

简介:     Android中通过SQLite数据库引擎来实现结构化数据存储。SQLite是一个嵌入式数据库引擎,针对内存等资源有限的设备(如手机、PDA、MP3)提供的一种高效的数据库引擎。

    Android中通过SQLite数据库引擎来实现结构化数据存储。SQLite是一个嵌入式数据库引擎,针对内存等资源有限的设备(如手机、PDA、MP3)提供的一种高效的数据库引擎。SQLite数据库不想其他的数据库(如Oracle),它没有服务器进程。所有的内容包含在同一个单文件中。该文件是跨平台的,可以自由复制。基于其自身的先天优势,SQLite在嵌入式领域得到广泛应用。Android也没有重复发明“轮子”,而是直接是用了SQLite数据库。

一、SQLiteDatabase

Android提供了创建和是用SQLite数据库的API。SQLiteDatabase代表一个数据库对象,提供了操作数据库的一些方法,另外还有一个SQLiteOpenHelper工具类提供了更简洁的功能。在Android的SDK目录下有sqlite3工具,我们可以利用它创建数据库、创建表和执行一些SQL语句。下面我们先看看SQLiteDatabase的常用方法。

 

SQLiteDatabase的常用方法

 

方法名称

方法描述

openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory)

打开或创建数据库

insert(String table,String nullColumnHack,ContentValues values)

添加一条记录

delete(String table,String whereClause,String[] whereArgs)

删除一条记录

query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy)

查询一条记录

update(String table,ContentValues values,String whereClause,String[] whereArgs)

修改记录

execSQL(String sql)

执行一条SQL语句

close()

关闭数据库

 

1、打开或者创建数据库

可以使用SQLiteDatabase的静态方法openOrCreateDatabase(String path,SQLiteDatabae.CursorFactory factory)打开或者创建一个数据库,该方法的第一个参数是数据库的创建路径,注意这个路径一定是数据库的全路径。例如/data/data/package/databases/dbname.db。第二个参数是指定返回一个Cursor子类的工厂,如果没有指定(null)则使用默认工厂。

下面的代码创建了一个temp.db数据库

SQLiteDatabase.openOrCreateDatabase("/data/data/com.hualang.test/databases/temp.db",null);

 

2、创建表

创建一张表很简单。首先,编写创建表的SQL语句,然后,调用SQLiteDatabase的execSQL()方法便可以创建一张表了。

复制代码
private void createTable(SQLiteDatabase db)   
  
{   
  
      //创建表SQL语句   
  
      String sql="create table usertable(id integer primary key autoincrement,username text,password text)";   
  
      //执行SQL语句   
  
      db.execSQL(sql);   
  
}  
复制代码

3、插入数据

插入数据有两种方法:一种是调用SQLiteDatabase的insert(String table,String nullColumnHack,ContentValues values)方法,该方法的第一个参数是表名称,第二个参数是空列的默认值,第三个参数是ContentValues类型的一个封装了列名称和列值的Map;令一种方法是编写插入数据的SQL语句,直接调用SQLiteDatabase的execSQL()方法来执行

 

下面的代码演示了如何插入一条记录到数据库。

方法1:

复制代码
//插入数据   
  
private void insert(SQLiteDatabase db)   
  
{   
  
     //插入数据SQL语句   
  
     String sql="insert into usertable(username,password) values('hualang','123456')";   
  
    //执行SQL语句   
  
     db.execSQL(sql);   
  
}  
复制代码

方法2:

复制代码
private void insert(SQLiteDatabase db)   
  
{   
  
    //实例化常量值   
  
    ContentValues cv = new ContentValues();   
  
    //添加用户名   
  
    cv.put("username","hualang");   
  
    //添加密码   
  
    cv.put("password","123456");   
  
    //插入   
  
    db.insert("usertable",null,cv);   
  
}  
复制代码

4、删除数据

和插入数据类似,删除数据也有两种方法:一种是调用SQLiteDatabase的delete(String table,String whereClause,String[] whereArgs)方法,该方法的第一个参数是表名称,第二个参数是删除条件,第三个参数是删除条件值数组;另一种方法是编写删除SQL语句,调用SQLiteDatabase的execSQL()方法来执行删除。

下面代码演示了如何删除记录

方法1:

复制代码
//删除   
  
private void delete(SQLiteDatabase db)   
  
{   
  
   //删除SQL语句   
  
   String sql = "delete from usertable where id  = 6";   
  
   //执行SQL语句   
  
   db.execSQL(sql);   
  
}  
复制代码

方法2:

复制代码
private void delete(SQLiteDatabase db)   
  
{   
  
   //删除条件   
  
   String whereClause = "id=?";   
  
   //删除条件参数   
  
   String[] whereArgs = {String.valueOf(5)};   
  
   //执行删除   
  
   db.delete("usertable",whereClause,whereArgs);   
  
}  
复制代码

5、查询数据

查询数据相对比较傲复杂,因为查询可能会带来很多条件。不过熟悉SQL查询的读者都知道这只不过是把查询SQL封装成方法而已。下面看一个查询方法。

public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit);  

各个参数的意义说明:

①table:表名称

②columns:列名称数组

③selection:条件字句,相当于where

④selectionArgs:条件字句,参数数组

⑤groupBy:分组列

⑥having:分组条件

⑦orderBy:排序列

⑧limit:分页查询限制

⑨Cursor:返回值,相当于结果集ResultSet

Cursor是一个游标接口,提供了遍历查询结果的方法,如移动指针方法move(),获得列值方法getString()等.

Cursor游标常用方法

 

方法名称

方法描述

getCount()

总记录条数

isFirst()

判断是否第一条记录

isLast()

判断是否最后一条记录

moveToFirst()

移动到第一条记录

moveToLast()

移动到最后一条记录

move(int offset)

移动到指定记录

moveToNext()

移动到下一条记录

moveToPrevious()

移动到上一条记录

getColumnIndexOrThrow(String columnName)

根据列名称获得列索引

getInt(int columnIndex)

获得指定列索引的int类型值

getString(int columnIndex)

获得指定列缩影的String类型值

 

下面的代码演示了如何查询数据类型:

复制代码
private void query(SQLiteDatabase db)   
  
{   
  
   //查询获得游标   
  
   Cursor c = db.query("usertable",null,null,null,null,null,null);   
  
   //判断游标是否为空   
  
   if(c.moveToFirst())   
  
   {   
  
       //遍历游标   
  
       for(int i=0;i<c.getCount();i++)   
  
       {   
  
            c.move(i);   
  
            //获得ID   
  
            int id = c.getInt(0);   
  
            //获得用户名   
  
            String username=c.getString(1);   
  
            //获得密码   
  
            String password=c.getString(2);   
  
            //输出用户信息   
  
            System.out.println(id+":"+username+":"+password);   
  
       }   
  
   }   
  
}  
复制代码

6、修改数据

和添加删除相同,修改数据有两种方式,一是调用SQLiteDatabase的update(String table,ContentValues values,String whereClause, String[] whereArgs)方法。该方法的第一个参数是表名称,第二个参数是更行列ContentValues类型的键值对(Map),第三个参数是更新条件(where字句),第四个参数是更新条件数组。而是编写更新的SQL语句,调用SQLiteDatabase的execSQL执行更新。

下面的代码演示了如何更新数据

复制代码
private void update(SQLiteDatabase db)   
  
{   
  
    //修改SQL语句   
  
    String sql = "update usertable set password = 654321 where id = 1";   
  
    //执行SQL   
  
    db.execSQL(sql);   
  
}  
复制代码

方法2:

复制代码
private void update(SQLiteDatabase db)   
  
{   
  
    //实例化内容值   
  
    ContentValues values = new ContentValues();   
  
    //在values中添加内容   
  
    values.put("password","123321");   
  
    //修改条件   
  
    String whereClause = "id=?";   
  
    //修改添加参数   
  
    String[] whereArgs={String.valuesOf(1)};   
  
    //修改   
  
    db.update("usertable",values,whereClause,whereArgs);   
  
}  
复制代码

 二、SQLiteOpenHelper

SQLiteOpenHelper是SQLiteDatabase的一个帮助类,用来管理数据库的创建和版本更新,一般的用法是定义一个类继承之,并实现其抽象方法onCreate(SQLiteDatabase db)和opUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)来创建和更新数据库。

SQLiteOpenHelper常用方法

 

方法名称

方法描述

SQLiteOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version)

构造方法,一般是传递一个要创建的数据库名称name参数

onCreate(SQLiteDatabase db)

创建数据库时调用

onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)

版本更新时调用

getReadableDatabase()

创建或打开一个只读数据库

getWritableDatabase()

创建或打开一个读写数据库

例如下面的代码演示:

复制代码
public class MainActivity extends Activity   
{   
    public void onCreate(Bundle savedInstanceState)   
    {   
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.main);   
        //实例化数据库帮助类   
        MyDbHelper helper = new MyDbHelper(this);   
        //插入   
        helper.insert();   
        //查询   
        helper.query();   
    }   
    //数据库帮助类   
    class MyDbHelper extends SQLiteOpenHelper   
    {   
        //创建表SQL语句   
        private static final String CREATE_TABLE_SQL =    
            "create table usertable(id intger,name text)";   
        //SQLiteDatabase实例   
        private SQLiteDatabase db;   
        //构造方法   
        MyDbHelper(Context c)   
        {   
            super(c,"test.db",null,2);   
        }   
        public void onCreate(SQLiteDatabase db)   
        {   
            db.execSQL(CREATE_TABLE_SQL);   
        }   
        public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)   
        {   
  
        }   
        //插入方法   
        private void insert()   
        {   
            //插入SQL语句   
            String sql="insert into usertable(id,name) values(1,'hualang')";   
            //执行插入   
            getWriteableDatabase().execSQL(sql);   
        }   
        //查询方法   
        private void query()   
        {   
            //查询获得游标   
            Cursor c = getWritableDatabase().query("usertable",null,null,null,null,null,null);   
            //判断游标是否为空   
            if(c.moveToFirst())   
            {   
                //遍历游标   
                for(int i=0;i<c.getCount();i++)   
                {   
                    c.move(i);   
                    int id = c.getInt(0);   
                    String name = c.getString(1);   
                    System.out.println(id+":"+name);   
                }   
            }   
        }   
    }   
}  
复制代码

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章