sqlite学习

本文详细介绍了在Android系统中如何使用SQLite数据库,包括SQLiteOpenHelper类的使用方法、SQLiteDatabase类的各种操作方式以及Cursor和SimpleCursorAdapter的作用。通过本文,读者可以了解如何创建数据库、执行SQL命令以及对数据进行增删查改等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      要在Android系统中使用SQLite数据库,其实是一件非常轻松的事情,只要继承来自android.database.sqlite包中的SQLiteOpenHelper类,并重写其中的几个重要方法后,你就可以对数据库进行相关的操作了。

所有数据库相关的接口、类都在.database 和android.database.sqlite 两个包下,真正用到的就几个。

一、SQLiteOpenHelper (android.database.sqlite.SQLiteOpenHelper)

      作用:A helper class to manage database creation and version management 用来创建数据库和对数据库进行版本更新

      1、这是一个抽象类,如果要使用它,一定是继承它!

      2、它的构造方法中,android.database.sqlite.SQLiteDatabase.CursorFactory factory一般直接传null

          必须实现的抽象方法有:

          onCreate(SQLiteDatabase db) 创建表,而不是创建数据库实例,在创建数据库是被调用

          这个方法并不需要我们自己去调用,当数据库第一次被创建时,这个方法会自动被调用。

          那么数据库真正的创建是在什么时候呢?当我们调用getReadableDatabase()/getWritableDatabase()方法时,数据库会被真实的创建。

           onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)执行更新,当version 改变时,系统会调用这个方法,执行删除现有表,然后手动调用onCreate

          这个方法也不需要我们主动去调用,当SQLiteOpenHelper类的最后一个参数比原值大的时候,这个方法会自动被调用。调用的时刻同onCreate()方法。

       3、SQLiteDatabase getReadableDatabase()  获取可读的SQLiteDatabase 对象,在访问数据库中数据但同时又不需要对其进行数据修改时(select操作)可以使用这个方法。

            SQLiteDatabase getWritableDatabase()  获取可写的SQLiteDatabase 对象,当需要对数据库进行数据修改(如查找,删减等)时,应该调用这个方法。记住在使用完成后,一定是要使用close()方法来释放内存,否则会造成内存泄露。

      4、还提供方法:close()关闭数据库,onOpen(SQLiteDatabase db)打开数据库 

二、SQLiteDatabase(android.database.sqlite.SQLiteDatabase)

       作用:Exposes methods to manage a SQLite database:create, delete, execute SQL commands, and perform other common database management tasks. 

        操作数据库:增、删、查、改

       1、execSQL(sql)  执行SQL 语句

            用这个方法+SQL 语句可以非常方便的执行增、删、查、改;

            此外,Android 还提供了方法实现增、删、查、改

  •  long insert(String table,String nullColumnHack,ContentValues values)添加记录,将某一行加入一个表

             说明: table——表名;nullcolumnHack——当插入空值的时候有用;values——键值对,键代表需要修改的列名,值代表对应的新值

View Code
 1 public boolean Insert(String table, String[] fieldName, String[] fieldValue) throws SQLException {
 2          ContentValues cv = new ContentValues();
 3  for (int i = 0; i < fieldName.length; i++) {
 4              cv.put(fieldName[i], fieldValue[i]);
 5          }
 6  if (_db.insert(table, null, cv) > 0) {
 7  return true;
 8          }
 9  return false;
10      }
  •  int delete(TABLE_NAME, where, whereValue)删除记录 
View Code
1 public boolean Delete(String table, long rowID) throws SQLException {
2  if (_db.delete(table, "ID=?", new String[] { rowID + "" }) > 0)
3  return true;
4  return false;
5     }
  • int update(String table, ContentValues values, String whereClause, String[] whereArgs) 更新记录

             说明:values——ContentValues类型,其实就是键值对,键代表需要修改的列名,值代表对应的新值

                     whereClause——where语句中的表达式,可以直接组成一个完整的表达式如:id=1,此时whereArgs传入null,如果id=?,那么whereArgs和query(...)的selectionArgs一样。

                     whereArgs——在where表达式中传入的参数

View Code
 1 public boolean Update(String table, String[] fieldName,
 2              String[] fieldValue, long rowID) throws SQLException {
 3          ContentValues cv = new ContentValues();
 4  for (int i = 0; i < fieldName.length; i++) {
 5              cv.put(fieldName[i], fieldValue[i]);
 6          }
 7  if (_db.update(table, cv, "ID=" + rowID, null) > 0) {
 8  return true;
 9          }
10  return false;
11      }
  • Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

             table——表名;columns——列名集合;selection——在where语句中的表达式,如id=?;

             selectionArgs——在where表达式中传入的参数,也就是上面“?”所占据的值;

             groupBy\having\orderby\limit——这些参数如果各位不清楚,请google下SQL语句基础;

View Code
 1 public Cursor Query(String table, String[] filed, long rowId)
 2 throws SQLException {
 3 
 4          Cursor mCursor = _db.query(true, table, filed, "ID=?" + rowId, null,null, null, null, null);
 5 if (mCursor != null) {
 6              mCursor.moveToFirst();
 7          }
 8 return mCursor;
 9      }
10 
11 public Cursor Query(String table) {
12          Cursor mCursor = _db.query(true, table, new String[] { "*" }, null,null, null, null, null, null);
13 if (mCursor != null) {
14              mCursor.moveToFirst();
15          }
16 return mCursor;
17      }

         2、还有很多方法,如:beginTransaction()开始事务、endTransaction()结束事务.

 

三、Cursor(android.database.Cursor)

    1、作用:This interface provides random read-write access to the result set returned by a database query

                   查询数据通过Cursor类实现,返回一个Cursor对象,Cursor指向的就是每一条数据

     2、boolean moveToPosition(position)将指针移动到某记录

          getColumnIndex(Contacts.People.NAME)按列名获取id          

          int getCount()获取记录总数

          boolean requery()重新查询

          boolean isAfterLast()指针是否在末尾

          boolean isBeforeFirst()时候是开始位置

          boolean isFirst()是否是第一条记录

          boolean isLast()是否是最后一条记录

          boolean moveToFirst()、boolean moveToLast()、boolean moveToNext()同moveToPosition(position)
           

四、SimpleCursorAdapter(android.widget.SimpleCursorAdapter)

      这里,也许你会奇怪了,之前我还说过关于数据库的操作都在database 和database.sqlite 包下,为什么把一个Adapter 放到这里,如果你用过Android 的SQLite3,你一定会知道,

这是因为我们对数据库的操作会经常跟列表联系起来。

     1、作用:An easy adapter to map columns from a cursor to TextViews or ImageViews defined in an XML file.将表中的某一列值赋给某对象

     2、构造方法:SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to)

          例子:SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.list,myCursor,new String[] {DB.TEXT1,DB. TEXT2},new int[]{ R.id.list1,R.id.listText2 });

                   my.setAdapter(adapter);

          参数4:显示的字段,传入String[];参数5:显示字段使用的组件,传入int[],该数组中是TextView 组件的id

转载于:https://www.cnblogs.com/wyqfighting/archive/2012/09/26/sqlite%e7%90%86%e8%ae%ba.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值