Android-使用嵌入式SQLite
来源:互联网 发布:电子商务专业erp软件 编辑:程序博客网 时间:2024/06/14 10:28
Android平台上集成的一个嵌入式关系型数据库,SQLite3支持 NULL,INTEGER,REAL(浮点数
字),TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上
sqlite3也接受varchar(n),char(n),decimal(p,s) 等数据类型,只不过在运算或保存时会转
成对应的五种数据类型.
SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是
什么. 但定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段保存除整数以外
的数据时,将会产生错误.
另外, SQLite在解析CREATE TABLE语句时,会忽略字段名后面的数据类型信息.
SQLite可以解析大部分标准SQL语句,如:
查询语句:select * from .. where group by ..having ... order by 排序子句
SQLite分页同mysql相同:
... limit 5 offset 3 | limit 3,5
首次使用数据库需要创建表及初始化一些信息,升级时需要修改表信息,android提供了SQLiteOpenHelper完成此类功能
onCreate(SQLiteDatabase db)方法用于首次使用时创建库,onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)方法检测版本变化时更新库
getWriteableDatabase()和getReadableDatabase()方法获取一个用于操作数据库的SQLiteDatabase实例。
getWriteableDatabase()方法一读写方式打开数据库,一旦数据库的磁盘空间满了,数据库只能读而不能写。倘若使用getWriteableDatabase()打开数据库就会出错。getReadableDatabase()方法以读方式打开数据库。
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String name = "itcast";//数据库名称
private static final int version = 1; //数据库版本
public DatabaseHelper(Context context){
Super(context,name,null,version);
}
public void onCreate(){
//drop table if exists customers
//create table if not exists customers(...
db.execSQL("CREATE TABLE IF NOT EXISTS person (personid integer primary key autoincrement, name varchar(20), age INTEGER)");
}
public void onUpgrade(SQLiteDatabase db,int oldVersion,intnewVersion){
db.execSQL(" ALTER TABLE person ADD phone VARCHAR(12) NULL");
}
}
在实际项目开发中,当数据库表结构发生更新时,应该避免用户存放于数据库中的数据丢失。
使用SQLiteDataBase数据库
SQLiteDatabase db = ....;
db.execSQL("insert into person(name,age) values(?,?)",new Object[]{..});
db.close();
//查询操作
Cursor cursor = db.rawQuery("select * from person", null);
while(cursor.moveToNext){
int personid = cursor.getInt(0);
String name = cursor.getString(1);
int age = cursor.getInt(2);
cursor.close();
Db.close();
}
cursor.close();
db.close();
SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
Values.put("name","传智播客");
.....
Long rowid = db.insert("person",null,values);
//删除
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.delete("person","personid<?",new String[]{"2"}">");
db.close();
//更新
SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
//key为字段名,value为值
values.put("name","传智播客");
db.update("person",values,"personid=?",new String[]{"1"});
db.close();
注:第一次调用getWritableDatabase()或getReadableDatabase()方法后,SQLiteOpenHelper
会缓存当前的SQLiteDatabase实例,SQLiteDatabase实例正常情况下会维持数据库的打开状态,所以在你不需要SQLiteDatabase实例时,请及时调用close()方法释放资源,一旦SQLiteDatabase实例被缓存,多次调用getWritableDatabase()或getReadableDatabase()方法得到的都是同一实例。
事务处理:
SQLiteDatabase db = ...;
db.beginTransaction();
Try{
db.execSQL(...)
db.execSQL(...);
//设置成功标记
db.setTransactionSuccessful();
}catch(){
....
} finally {
db.endTransaction();//由事务的标志决定是提交事务,还是回滚事务。
}
db.close();
注意:创建表时,只能用integer类型,不能用int作为主键,否则不支持autoincrement.
create table customers(id integer primary key autoincrement,name text);
- Android-使用嵌入式SQLite
- Android SQLite嵌入式数据库
- Android 之 使用嵌入式关系型SQLite数据库存储数据
- Android的嵌入式关系型SQLite数据库使用
- android基础--使用嵌入式关系型SQLite数据库存储数据
- Android中使用嵌入式关系型SQLite数据库存储数据
- Android使用嵌入式关系型SQLite数据库存储数据
- Android笔记使用嵌入式关系型SQLite数据库存储数据
- Android使用嵌入式关系型SQLite数据库存储数据
- 嵌入式数据库sqlite的使用
- 嵌入式数据库SQLite基础使用
- Android 数据存储之 SQLite嵌入式数据库
- Android 嵌入式数据库SQLite练习小记录
- Android操作嵌入式关系型SQLite数据库
- Android操作嵌入式关系型SQLite数据库
- Android操作嵌入式关系型SQLite数据库
- Android操作嵌入式关系型SQLite数据库
- Unity3D在Android平台使用嵌入式数据库Sqlite,解决无法找到数据库文件的问题
- java list set map的区别与应用
- [OpenGL ES 1.0 API] glVertexPointer
- 编程之美2.19——区间重合判断(线段树)
- C++修改注册表信息
- asynchronous@tornado 记录二
- Android-使用嵌入式SQLite
- Android 动画框架详解
- ssh
- 多线程编程知识点
- 米豆网首页快照不更新原因分析
- 连接Oracle 报错:ora-06413连接未打开
- wince之驱动操作
- IP地址正则表达式
- Hibernate的ID生成策略/联合主键解决方案