微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/sqlite/201699.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐