SQLite数据库的基本操作方法
|
SQLite数据库采用了模块化设计,由8个独立的模块构成,这些独立模块又构成了三个主要的子系统,模块将复杂的查询过程分解为细小的工作进行处理 其核心大约有3万行标准C代码,模块化的设计使这些代码更加易于理解 SQLite的框架模型图如下:
接口:由SQLite API组成,因此无论是应用程序、脚本,还是库文件,最终都是通过接口与SQLite交互 虚拟机:SQLite数据库体系结构中最核心的部分是虚拟机,也称为虚拟数据库引擎(Virtual Database Engine,VDBE)与Java虚拟机相似,虚拟数据库引擎用来解释执行字节代码,虚拟数据库引擎的字节代码由128个操作码构成,这些操作码主要用以对数据库进行操作,每一条指令都可以完成特定的数据库操作,或以特定的方式处理栈的内容 其一些基本操作方法如下: public class MyData{
Context context;
SQLHelper sqlHelper;
SQLiteDatabase sqLiteDatabase;
SQLiteDatabase sqLiteDatabaseSD;
public MyData(Context context){
this.context = context;
}
public void open(){
sqlHelper = new SQLHelper(context,"database.db",null,2);
try {
sqLiteDatabase = sqlHelper.getWritableDatabase();
} catch (Exception e) {
// TODO Auto-generated catch block
sqLiteDatabase = sqlHelper.getReadableDatabase();
}
}
/*
* SD卡创建数据库*/
public void create(){
String createDatabase = "create table student (sId integer primary key autoincrement,sName varchar not null,sAge varchar not null,sSex varchar not null);";
File file = new File("/mnt/sdcrad/MyDatabase.dp");
sqLiteDatabase = SQLiteDatabase.openOrCreateDatabase(file,null);
// sqLiteDatabase = SQLiteDatabase.openDatabase("/MyDatabase.dp",Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);
//这个语句等同于上面两句语句
sqLiteDatabase.execSQL("drop table if exists student");
sqLiteDatabaseSD.execSQL(createDatabase);
//后面的数据操作没有用到创建的这个sd当中的表
}
/*
* 查询数据*/
public void query(){
Cursor cursor = sqLiteDatabase.query("student",//所要查询数据的数据库
new String[]{"sId","sName","sAge","sSex"}//所要查询的数据字段,null);
cursor.moveToFirst(); // 移动到数据结果的第一条之前
while(cursor.moveToNext()) {
String id
= cursor.getString(cursor.getColumnIndex("_id"));
String name
= cursor.getString(cursor.getColumnIndex("name"));
String sex
= cursor.getString(cursor.getColumnIndex("sex"));
String age
= cursor.getString(cursor.getColumnIndex("age"));
System.out.println("id"+id + " name"+name+" sex"+sex+" age"+age);
}//显示所的数据,也可以打包成一个数据集,返回出去
}
/*
* 插入数据*/
public void insert(){
ContentValues cv = new ContentValues();
cv.put("sName","lonuery");
cv.put("sAge","23");
cv.put("sSex","男");
sqLiteDatabase.insert("student",cv);
}
/*
* 删除数据*/
public void delete(){
sqLiteDatabase.delete("student","删除的条件",new String[]{"10"});
}
/*
* 更新数据*/
public void upData(){
ContentValues cv = new ContentValues();
cv.put("sAge","23");
sqLiteDatabase.update("student",cv,"要更新的条件",new String[]{"399"});
//whereCaurse要更新的数据的条件 等于null时更新所有数据
//whereArgs 所要更新的数据 等于null时更新所有数据
}
/*
* 关闭数据库*/
public void close(){
if(sqlHelper!=null){
sqlHelper.close();
sqlHelper=null;
}
}
class SQLHelper extends SQLiteOpenHelper{
public SQLHelper(Context context,String name,CursorFactory factory,int version) {
super(context,name,factory,version);
// TODO Auto-generated constructor stub
}
String createTable = "create table student (sId integer primary key autoincrement,sSex varchar not null);";
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(createTable);
}//创建数据库
@Override
public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) {
// TODO Auto-generated method stub
db.execSQL("drop table if exists student");
db.execSQL(createTable);
}//更新数据库,即删除或添加数据字段
}
}
用代码创建数据库的方法: 1.上面SQLHelper类继承SQLiteOpenHelper类,然后重载其构造函数,在实例化SQLHelper类时就会为你创建一个数据库,这是一个方法。 2.通过Context 的openOrCreateDatabase方法或者是SQLiteDatabase 的openOrCreateDatabase方法来创建一个数据库。 在一android论坛有一网友提出了一个很好的问题: Context.openOrCreateDatabase 和SQLiteDatabase.openOrCreateDatabase有什么区别,既然SQLiteDatabase可以创建数据库为什么还要SQLiteOpenHelper来创建数据库? 有一网友进行了很好的回答: Context.openOrCreateDatabase 与 SQLiteDatabase.openOrCreateDatabase本质上完成的功能都一样,Context.openOrCreateDatabase最终是需要调用 SQLiteDatabase.openOrCreateDatabase来完成数据库的创建的。也就是说, SQLiteDatabase类是android上对sqlite的最底层的封装,几乎所有的对数据 库的操作最终都通过这个类来实现。而Context里面提供的方法,是用于上下文的时候创建数据库,例如你在某个逻辑里面创建的数据库只是在特定的context 里面,对于数据库的权限,交由context来管理,而这个逻辑可能是会提供给不止一个context至于SQLiteDatabase和SQLiteOpenHelper就更好理解了,后者 只是一个抽象类,用来告诉你怎样使用SQLiteDatabase类而已,你完全可以自己基于SQLiteDatabase写一个自己的helper (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails-3 – 多表继承Rails和activerecord
- swift: unrecognized selector sent to instance
- PostgreSQL 自动分区分表维护管理插件 pathman 基础使用
- C模板实例化取决于if子句
- vb.net – 如果用户单击该行并将焦点从该行移开,则重置Data
- c# – ASP.NET Core MVC项目似乎会自动添加AntiForgery令牌
- ruby-on-rails-3 – best_in_place datepicker格式
- ajax – JSONP的说明和用法
- Cocos教程 监听各个GUI控件的交互事件。
- vb.net 教程 5-4 颜色
