什么是 sqliteDatabase?
一个 sqliteDatabase 的实例代表中,了一个sqlite 的数据库,通过sqliteDatabase 实例的一些方法,我们可以执行sql 语句,对数据库进行增、删、查、改的操作。需要注意的是,数据库对于一个应用来说是私有的,并且在一个应用当中,数据库的名字也是惟一的。因此,在使用时不需要创建数据库,直接创建表就可以进行生成数据库的操作。
什么是 sqliteOpenHelper ?
根据这名字,我们可以看出这个类是一个辅助类。这个类主要生成一个数据库,并对数据库的版本进行管理。当在程序当中调用这个类的方法getWritableDatabase(),或者getReadableDatabase()方法的时候,如果当时没有数据,那么Android 系统就会自动生成一个数据库。sqliteOpenHelper 是一个抽象类,我们通常需要继承它,并且实现里边的3 个函数,
什么是 ContentValues 类?
ContentValues 类和Hashmap/Hashtable 比较类似,它也是负责存储一些名值对,但是它存储的名值对当中的名是一个。
什么是 Cursor ?
Cursor 在Android 当中是一个非常有用的接口,通过Cursor 我们可以对从数据库查询出来的结果集进行随 机的读写访问。
数据库可以存放在本身系统上,也可以放在SDCard里:
一种存储默认系统路径/data/data/package/databases下,
另外一种则是保存在了/sdcard/package下,生成数据库文件package.db
那么这里两种实现方式大概步骤和区别说下:
-----------如果我们使用默认系统路径存储数据库文件:
第一步:新建一个类继承sqliteOpenHelper;写一个构造函数,重写两个函数!
第二步:在新建的类中的onCreate(sqliteDatabase db) 方法中创建一个表;
第三步:在进行删除数据、添加数据等操作的之前我们要得到数据库读写句柄得到一个数据库实例;
注意: 继承写这个辅助类,是为了在我们没有数据库的时候自动为我们生成一个数据库,并且生成数据库文件,这里也同时创建了一张表,因为我们在onCreate里是在数据库中创建一张表的操作;这里还要注意在我们new 这个MysqLiteOpenHelper 类实例对象的时候并没有创建数据库!而是在我们调用MysqLiteOpenHelper .getWritableDatabase() 这个方法得到数据库读写句柄的时候,android 会分析是否已经有了数据库,如果没有会默认为我们创建一个数据库并且在系统路径/data/data/package/databases下生成package.db 文件!
(如果我们使用sd卡存储数据库文件,就没有必要写这个类了,而是我们自己Open自己的文件得到一个数据库 )
-----------如果我们需要把数据库文件存储到SD卡中:
第一步:确认模拟器存在SD卡,关于SD卡的两种创建方法
第二步:先创建SD卡目录和路径中我们的数据库文件!这里不像上面默认路径中的那样,如果没有数据库会默认系统路径生成一个数据库和一个数据库文件!我们必须手动创建数据库文件!
第三步:在进行删除数据、添加数据等操作的之前我们要得到数据库读写句柄得到一个数据库实例;此时的创建也不是像系统默认创建,而是我们通过打开第一步创建好的文件得到数据库实例。这里仅仅是创建一个数据库!!!!
第四步:在进行删除数据、添加数据等操作的之前我们还要创建一个表!
第五步:在配置文件AndroidMainfest.xml 声明写入SD卡的权限。
总结:不管哪种方式我们都要-创建数据库-创建表-然后进行操作!
例子(存放在系统中):
---------------------DBOpenHelper.java--------------------------
import android.content.Context; import android.database.sqlite.sqliteDatabase; import android.database.sqlite.sqliteDatabase.CursorFactory; import android.database.sqlite.sqliteOpenHelper; public class DBOpenHelper extends sqliteOpenHelper { final static String CREATE_TABLE_sql = "create table student( id integer primary key autoincrement,name varchar not null,age integer not null)" ; final static String ADD_sql = "alter table student add phone varchar null" ; public DBOpenHelper(Context context,String name,CursorFactory factory,int version) { super(context,name,factory,version); } @Override public void onCreate(sqliteDatabase db) { db.execsql(CREATE_TABLE_sql) ; } @Override public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) { db.execsql(ADD_sql) ; } }
---------------------StudentService.java--------------------------
import android.content.Context; import android.database.Cursor; import android.database.sqlite.sqliteDatabase; import android.util.Log; public class StudentService { DBOpenHelper dbHelper ; sqliteDatabase db ; public StudentService(Context context,int version){ dbHelper = new DBOpenHelper(context,"student.db",null,version) ; } public void insert(Student stu){ db = dbHelper.getWritableDatabase() ; db.execsql("insert into student(name,age) values(?,?)",new Object[]{stu.getName(),stu.getAge()} ) ; Log.v("insert","insert success !!!") ; } public void delete(int id){ db = dbHelper.getWritableDatabase() ; db.execsql("delete from student where id=?",new String[]{String.valueOf(id)}) ; Log.v("delete","delete success !!!") ; } public Student find(int id){ db = dbHelper.getWritableDatabase() ; Student stu ; Cursor cursor = db.rawQuery("select *from student where id=?",new String[]{String.valueOf(id)}) ; while(cursor.moveToNext()){ stu = new Student() ; stu.setId(cursor.getInt(cursor.getColumnIndex("id"))) ; stu.setName(cursor.getString(cursor.getColumnIndex("name"))) ; stu.setAge(cursor.getInt(cursor.getColumnIndex("age"))) ; Log.v("student","id:" + stu.getId() + " name:" + stu.getName() + " age:" + stu.getAge()) ; return stu ; } return null ; } public void modify(int id,Student stu){ db = dbHelper.getWritableDatabase() ; db.execsql("update student set name=?,age=?",stu.getAge()}) ; Log.v("modify","modify success !!!") ; } }
---------------------Student.java--------------------------
public class Student { private int id ; private String name ; private int age ; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Student(int id,int age) { super(); this.id = id; this.name = name; this.age = age; } public Student(){ } }