android SQLite操作

来源:互联网 发布:js div加载html页面 编辑:程序博客网 时间:2024/06/09 20:40

                                 SQLite

一、SQLite简介:

          SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 TclC#PHPJava等,还有ODBC接口,同样比起MysqlPostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。

二、SQLite具备下列特点:

            1.轻量级。使用 SQLite只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸相当小。

            2.独立性。SQLite数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。

           3.隔离性。SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。

           4.跨平台。SQLite 目前支持大部分操作系统,不止电脑操作系统更在众多的手机系统也是能够运行,比如:Android

           5.多语言接口。SQLite 数据库支持多语言编程接口。

           6.安全性。SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。

三、Android中的SQLite使用

         1、SQLiteDatabase类:

               SQLiteDatabase是一个数据库实例类,它提供了一系列的方法管理, 操作数据库

            (1)创建数据库:

                   a)Static SQLiteDatabaseopenDatabase(String path, CursorFactory f,int flags);

                  打开由path指定的SQLite数据库

                    b)Static SQLiteDatabaseopenOrCreateDatabase(File file, CursorFactory f);

                  打开或创建由file指定的SQLite数据库

                     c)Static SQLiteDatabaseopenOrCreateDatabase(String path, CursorFactory f);

                  打开或创建由path指定的SQLite数据库

             (2)操作数据库:

                     a)    execSQL(String sql, Object[] bindArgs);      

                执行带占位符的SQL语句,第二个参数表示SQL语句占位符对应的参数

                     b)    execSQL(String sql);

                     执行SQL语句

                     c)    rawQuery(String sql, String[] selectionArgs);

                    带占位符的查询语句,第二个参数表示查询语句占位符对应的参数

                      d)    Insert(String table, String nullColumnHack, ContentValue value);

                         参数:

                      Table:表名, nullColumnHack:表明强行插入null值的数据列的列名,

                      value:代表一行记录数据      

                      (ContentValue)类相当于Map,提供put(String key, XXX value);存入数据, getXXX(key)用于取出数据

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

                      参数:

                                  ContentValues:你需要更新个数据组成的一个map,由列的名字和列的新值构成,null是合法的值,会被转化为NULL

                                    whereClause: SQL语句中的where子句,满足whereClause的将被更新,

                                    whereArgs:字符串数组,和whereClause配合使用。有两种用法,如果whereClause的条件已经直接给出,如“class = + numnum是传入的参数,则whereArgs可设为null。如果是”class =?“,则?会被whereArgs这个数组中对应的值替换,whereArgs给出?代表的值,有多个?的,字符串数组里的值依次填入。

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

                       table:表名;whereClause:删除的条件,用法和update里的一样。如果为null,则删除全部行。          whereArgs:用法和update里的一样。

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

                   对指定的表进行查询

                      h)    query(boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

                   对指定表进行查询,第一个参数表示是否去掉重复值, limit控制查询记录数(用于分页)

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

                   对指定表进行查询

                   table:表名称

                   colums:列名称数组

                   selection:条件子句,相当于where

                   selectionArgs:条件语句的参数数组

                   groupBy:分组

                   having:分组条件

                   orderBy:排序类

                   limit:分页查询的限制

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

                j)     BeginTransaction();开始事务

                k)    EndTracsaction():结束事务

       
        其中结束事务时, 是提交事务还是回滚事务,取决于是否调用setTransactionSuccessful()来设置事务标志,如果程序事务中调用了该方法设置成功则提交事务, 否则将会回滚事务;

 

四、Cursor

        Cursor类似于jDBC中的ResultSet类用于记录查询结果,提供如下方法:

                (1) move(int offset);将记录指针向上或向下移动指定行数, offset为负表示向上移动, offset为正数表示向下移动

                (2) boolean moveToFirst();将记录指针移动到第一行

               (3) boolean moveToLast();将记录指针移动到最后一行

               (4) boolean moveToNext();将记录指针移动到下一条记录

               (5) boolean moveToPosition(int position);将记录指针移动到指定行

               (6) boolean moveToPrevious();将记录指针移动到上一行.

               (7) getXXX(); 获取一行记录中指定列的数据

               (8)getCount()    总记录条数

               (9)isFirst()   判断是否第一条记录

               (10)isLast()判断是否最后一条记录

               (11)SQLiteOpenHelper类介绍

 

 

          实现代码:

 

                    Cursor c = db.query("user",null,null,null,null,null,null);//查询并获得游标

                  if(c.moveToFirst()){//判断游标是否为空   

                              for(int i=0;i<c.getCount();i++){     

                                          c.move(i);//移动到指定记录    

                                          String username = c.getString(c.getColumnIndex("username");        

                                          String password = c.getString(c.getColumnIndex("password"));   

                                }

                    } 

                  //通过rawQuery实现的带参数查询

                   Cursor c = db.rawQuery("select * from user where username=?",new Stirng[]{"Jack Johnson"});

                    if(cursor.moveToFirst()) {

                                       String password = c.getString(c.getColumnIndex("password"));

                       }

 

五、SQLiteOpenHelper

           SQLiteOpenHelperSQLiteDatabase的一个帮助类,用来管理数据库的创建和版本的更新。一般是建立一个类继承它,并实现它的onCreateonUpgrade方法。

 

               onCreate(SQLiteDatabase db) :当数据库被首次创建时执行该方法,一般将创建表等初始化操作在该方法中执行。

               onUpgrade(SQLiteDatabse dv, int oldVersion,int new Version):当打开数据库时传入的版本号与当前的版本号不同时会调用该方法。

 

SQLiteOpenHelper的其他方法:

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

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

                onCreate(SQLiteDatabase db)创建数据库时调用

                 onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion)版本更新时调用

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

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

                Synchronized void close(); 关闭所有打开的SQLiteDatabase

 

例:

public class DatabaseHelper extends SQLiteOpenHelper { 

             private static final String DB_NAME = "mydata.db"; //数据库名称

              private static final int version = 1; //数据库版本 

             public DatabaseHelper(Context context) {    //创建数据库

                               super(context, DB_NAME, null, version); 

              }

              @Override 

              public void onCreate(SQLiteDatabase db) {   //数据库初始化

                                    String sql = "create table user(username varchar(20) not null , password varchar(60) not null );"; 

                                   db.execSQL(sql); 

                 }

 

                 @Override 

                  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {    //版本号不同时,执行的操作

 

                     }

  } 

 

创建数据库:

       (调用getWriteableDatabase可能因为磁盘空间或权限问题失败,所以,一个好的习惯是在捕获异常后提供getReadableDatabase方法的结果)

 

DatabaseHelper database = new DatabaseHelper(this);

//这段代码放到Activity类中才用this

 SQLiteDatabase db = null; 

db = database.getReadalbeDatabase();  //打开数据库

------对数据库进行操作

db = database.close();  //关闭数据库

 

 

 

 

原创粉丝点击