SQLite数据库的使用

来源:互联网 发布:解析域名打不开 编辑:程序博客网 时间:2024/05/01 00:26

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();






0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 百合种球叶子都变黄了怎么办 新买的富贵竹叶子发黄怎么办水养 朋友总是以隐私为借口欺骗我怎么办 三星手机版本低下载不了微信怎么办 选了动漫制作技术但不会画画怎么办 做主播高薪可是心累不愿做了怎么办 pr导出的avi无压缩太大怎么办 捡了个小米max被绑定了怎么办 二十岁时头发开始掉了怎么办 在酒店换衣服忘记关窗帘了怎么办 淘宝店铺装修更改图片要收费怎么办 惠阳市教育考试考证号忘记怎么办 高考完被被骗去读自考以后怎么办 孩子学习遇到瓶颈期了老师该怎么办 微信家长群有不好的言论出现怎么办 铃木汽车后备箱电动锁没有电怎么办 坐飞机没有连号座位带孩子怎么办 白沙的衣服洗衣服时染上颜色怎么办 网购商家少发了货怎么办 我想成为安利的员工怎么办会员 安利皇后锅锅盖吸在桌子上怎么办 淘宝客服退款返佣金诈骗后怎么办 第一试用网的钱提现出现问题怎么办 一个手机号注册两个京东账号怎么办 白色衣服被洗衣粉泡白了怎么办 白色衣服染成一块块荧光色了怎么办 中脉远红镇痛护腰不会发热了怎么办 用完悦诗风吟脸变黑不均匀怎么办 护肤品开封后一年还没用完怎么办 兰蔻化妆品套装正品和假怎么办 月经期间卫生巾搞得屁股疼怎么办 大姨妈特别多用卫生巾老是漏怎么办 夏天用卫生巾不透气摩擦红了怎么办 在日本的洗手间用完的姨妈巾怎么办 想穿短裙但是膝盖怕凉怎么办 裤子被卫生巾粘住扯不下来怎么办 医生说来姨妈不可以用卫生巾怎么办 隆胸以后摸起来感觉假体会动怎么办 产后15个月说恶露没排干净怎么办 母猪产后两天肚子里还有小猪怎么办 背心式无痕运动文胸显得胸小怎么办