SQLite数据库的使用

Android中使用SQLite数据库需要借助SQLiteOpenHelper.通过继承SQLiteOpenHelper类来管理数据库。

一般定义自己的SQLiteOpenHelper时需要重写两个方法,onCreate()和onUpdate();以及构造函数。

public class MydatabaseHelper extends SQLiteOpenHelper {
    private static final String DB_NAME="starbuzz";//定义数据库名称
    private static final int DB_VERTION=1;//数据库版本
    public MydatabaseHelper(Context context) {
        super(context, DB_NAME, null, DB_VERTION);//建立数据库
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
      updateMyDatabase(db, 0, DB_VERTION);//建立数据库中的表
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {
        updateMyDatabase(db,oldVersion,newVersion);//用于升级数据库
    }
    private  void updateMyDatabase(SQLiteDatabase db, int
            oldversion, int newversion) {
        if (oldversion < 1) {
            db.execSQL("CREATE TABLE DRINK ("
                    + "_id INTEGER PRIMARY KEY AUTOINCREMENT, "
                    + "NAME TEXT, "
                    + "DESCRIPTION TEXT, "
                    + "IMAGE_RESOURCE_ID INTEGER);");
            insertDrink(db,"Han", "work very smart", R.drawable.first);
            insertDrink(db, "Lawson", "so cute", R.drawable.second);
            insertDrink(db, "Izumi Sakai", "so beatiful", R.drawable.third);
        }
        if (oldversion < 2) {
            db.execSQL("ALTER TABLE DRINK ADD COLUMN FAVORITE NUMERIC");
        }
    }
//自定义插入DRINK表记录方法
    private static void insertDrink(SQLiteDatabase db, String name,
                                    String description, int imageResourceId)
    {
        ContentValues contentValues = new ContentValues();
        contentValues.put("NAME", name);
        contentValues.put("DESCRIPTION", description);
        contentValues.put("IMAGE_RESOURCE_ID", imageResourceId);
        db.insert("DRINK", null, contentValues);
    }
}
获取SQLiteOpenHelper实例,
MydatabaseHelper mydatabaseHelper = new MydatabaseHelper(this);//this为当前上下文参数
 
  
SQLiteDatabase sqLiteDatabase = mydatabaseHelper.getReadableDatabase();//通过调用getReadableDatabase()
//或者getWritableDatabase()可获取数据库。二者都可对数据库进行写入或读出,区别在于当数据库磁盘满时,前者//会采用只读的方式去打开数据库,而后者会抛出异常。
数据库包含增删改查四种操作,insert().delete().update().query().

public long insert(String table, String nullColumnHack, ContentValues values)
第一个参数为表名,第二个用于防止插入空行,一般值为Null.第三个为要插入的数据,如:
 
  
ContentValues contentValues = new ContentValues();
contentValues.put("NAME", name);其中NAME为表的属性值(不区分大小写),name为要插入的实际值.
 
  
public int delete(String table, String whereClause, String[] whereArgs)
第一个参数仍然为表名,二三两个用于筛选行。
sqlite.delete("Drink", "name=? and descriotion=?", String[]{"可乐","好评"})
问号处的值为后面的String[]值,代表删除表中名字为可乐,描述为好评的记录
 
  
public int update(String table, ContentValues values, String whereClause, String[] whereArgs)
第一个仍为表名,第二个为改变的新内容,三四用于定位行。
如:
contentValues.put("NAME", "橙汁");
sqlite.update("Drink",contentValues, "name=? and descriotion=?", String[]{"可乐","好评"})
表示将表中名字为可乐,描述为好评的记录(行),的名称(即可乐)改为橙汁
public Cursor query(String table, String[] columns, String selection,
        String[] selectionArgs, String groupBy, String having,
        String orderBy)
查询是四种方法中最复杂的,其返回一个Cursor对象,可以看作一个临时存储表,将数据库中表筛选后返回的结果表,第一个参数为表名,第二个参数为要查询的属性名称,如String[]{"Name","Description"},表示要查询名称和描述内容,第三,四个为筛选条件,与上述两个方法作用一样。后面三个一般为Null,用于Cursor中的分组,排序等。
Cursor中的内容获取通过cursor.moveto*和get*来获取。如:
 
  
if (cursor.moveToFirst()) {
    //获取这条记录的各个属性内容
    String name = cursor.getString(0);
    String description = cursor.getString(1);
    int idText = cursor.getInt(2);
    boolean isFavorite = (cursor.getInt(3) == 1);
movetoFirst代表定位至第一行,getString(0)代表获取该行的第一个属性(其值为String类型,也有可能为其他类型)。还有moveToNext().moveToPrevious().moveToLast();分为代表是否存在下一行,上一行,和指向最后一行.

最后,很重要的一点,在连接数据库和操作数据库时,一般放在try catch中,因为连接外部时有可能出错,同理读写外部文件流时同理,用数据库和cursor后。要关闭数据库和cursor。采用close()方法。如cursor.close();

 
  


 
  
 
  


你可能感兴趣的:(SQLite数据库的使用)