找专业做网站的公司,会所网站建设,做视频网站需要什么证,中国建设银行下载官方网站前言
本文用于介绍SQLite#xff0c;SQLite是Android内置的数据库#xff0c;是一款轻量级的关系型数据库。它具有运算速度快、占用资源少等优点。支持SQL语法同时遵循数据库的ACID事务。
创建数据库
Android为我们提供了一个SQLiteOpenHelper帮助类#xff0c;我们可以在…前言
本文用于介绍SQLiteSQLite是Android内置的数据库是一款轻量级的关系型数据库。它具有运算速度快、占用资源少等优点。支持SQL语法同时遵循数据库的ACID事务。
创建数据库
Android为我们提供了一个SQLiteOpenHelper帮助类我们可以在这里面实现创建数据库、升级数据库的逻辑。在SQLiteOpenHelper里面有两个非常重要的方法getReadabledatabase()和getWriteableDatabase()这两个方法都可以打开一个现有的数据库存在该数据库则打开不存在则创建并返回一个可以对数据库进行读写操作的对象SQLiteDatabase。不同点是当数据库不可写入时如磁盘空间满了getReadabledatabase()将以只读的方式打开数据库而getWriteableDatabase()方法将出现异常。
下面我们来构建一个SQLiteOpenHelper实例取名为MyDatabaseHelper这里我们希望创建一个名为BookStore.db的数据库数据库中有一张叫Book的表。
public class MyDatabaseHelper extends SQLiteOpenHelper{public static final String CREATE_BOOKcreate table Book(id integer primary key autoincrement,author text,price real,pages integer,image blob,name text);private Context mContext;public StatusDatabase(Nullable Context context, Nullable String name, Nullable SQLiteDatabase.CursorFactory factory, int version) {super(context, name, factory, version);mContextcontext;}Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL(CREATE_BOOK);//创建成功时弹出Create succeedToast.makeText(mContext,Create succeed,Toast.LENGTH_SHORT).show();}//用于对数据库进行升级时Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}这里简单介绍一下CREATE_BOOK的建表语句首先字段在前数据类型在后我们还可以给字段设置一些特殊的属性例如id字段primary key表示设置id为主键autoincrement表示id是自增长的其他的感兴趣可以自己去查找。另外讲一下数据类型integer表示整型text表示文本型real表示浮点数blob表示二进制类型常用它来存储图片数据最后会具体讲解。
接下来我们只需创建出MyDatabaseHelper实例并调用它的getWriteableDatabase()方法来创建数据库即可
MyDatabaseHelper dbHelpernew MyDatabaseHelper(this,BookStore.db,null,1);BookStore.db表示创建出的数据库的名字叫做BookStore.db1表示数据库版本是1后续我们升级了数据库版本也会随之改变。
升级数据库
我们在编写MyDatabaseHelper时还有一个方法onUpgrade()没编写它就是用来进行数据库升级的例如此刻我们想加入一张新的表Category用来表示书的分类在编写好Category的建表语句后只需在onCreate()方法里像创建Book表一样创建Category表db.execSQL(CREATE_CATEGORY)接着我们要在onUpgrade()方法中删除原来创建好的表再重新创建表要不然程序会报错如下
Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL(drop table if exists Book);db.execSQL(drop table if exists Category);onCreate(db);}接着我们要再想创建出MyDatabaseHelper的实例并调用它的getWriteableDatabase()方法来创建数据库版本号就要传入2了
MyDatabaseHelper dbHelpernew MyDatabaseHelper(this,BookStore.db,null,2);添加数据
上面说到过要想对数据库进行操作我们要调用getReadabledatabase()或getWriteableDatabase()方法打开数据库并且该方法会返回一个数据库操作对象如下
SQLiteDatabase dbdbHelper.getWriteableDatabase();
ContentValues cvnew ContentValues();//用于对要添加的数据进行组装
cv.put(name,zhangsan);
cv.put(price,12.12);
...
db.insert(Book,null,cv);//调用insert方法将数据插入到Book表中这样数据就存到了我们的Book表中上面要想继续向Category表中存数据只需先调用cv.clear()方法将cv中的数据清空然后重复cv.put()、db.insert()即可
关于图片的存储与读取放在后面具体来讲解。
更新数据
更新数据时我们还是先获取一个ContentValues对象来对数据进项组装与上面不同的是这次我们是调用update()方法
SQLiteDatabse dbdbHelper.getWriteableDatabse();
ContentValues cvnew ContentValues();
values.put(price,10.00);//将price字段12.12改为10.00
db.update(Book,cv,name?,new String[]{zhangsan});//条件是namezhangsan
//完整的是将namezhangsan的一条数据中的price由12.12改为10.00当然update()方法后面你也可以传两个null进去表示没有条件
删除数据
获取到数据库操作对象直接执行删除操作
SQLiteDatabse dbdbHelper.getWriteableDatabse();
db.delete(Book,pages?,new String[]{500});//删除pages大于500的数据查询数据
书上的查询讲了非常多内容我们查询的query()方法有六个方法对应了查询的约束条件、分组条件等等这里不用害怕我们只需掌握最基础的查询即可因为以后这些查询操作都是交给后端来实现的这里我就介绍一下最简单的查询。
调用query()方法会给我们返回一个Cursor对象查询到的所有数据都从这个对象中取出。
SQLiteDatabse dbdbHelper.getWriteableDatabse();
Cursor cursordb.query(Book,null,null,null,null,null,null);
if(cursor.moveToFirst()){//遍历Cursor对象取出查询到的所有数据do{String bookNamecursor.getString(cursor.getColumnIndex(name));//查询字段名为name的字段将值赋给bookNameint bookPagescursor.getInt(cursor.getColumnIndex(pages));//查询字段名为pages的字段将值赋给bookPagesdouble bookPricecursor.getDouble(cursor.getColumnIndex(price));//查询字段名为price的字段将值赋给bookPrice}while(cursor.moveToNext());
}
cursor.close();使用SQL操作数据库
Android为我们提供了直接使用SQL来操作数据库。
添加数据
db.execSQL(insert into Book(name,author,pages,price) values(?,?,?,?)new String[]{..,..,..,..});更新数据
db.execSQL(update Book set price? where name?,new String[]{..,..});删除数据
db.execSQL(dlete from Book where Pages?new String[]{500});查询数据
db.rawQuery(select * from Book,null);图片的存与取
存
要保存的图片类型一定要是Bitmap类型的
//字节输出流保存图片
ByteArrayOutputStream os new ByteArrayOutputStream();
//bitmap为要保存到数据库的对象
bitmap.compress(Bitmap.CompressFormat.PNG, 1, os);SQLiteDatabase dbdbHelper.getWritableDatabase();
ContentValues cvnew ContentValues();
cv.put(image,os.toByteArray());
db.insert(Book,null,cv);取
SQLiteDatabase dbdbHelper.getWritableDatabase();
Cursor cursordb.query(Book,null,null,null,null,null,null,null);
f (cursor.moveToFirst()){do {byte[] data cursor.getBlob(cursor.getColumnIndex(image));bitmapBitmapFactory.decodeByteArray(data, 0, data.length);//将图片设置进iv图片iv.setImageBitmap(bitmap);}while(cursor.moveToNext());
}
cursor.close();