public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//每个程序都有自己的数据库//通过openOrCreateDatabase来打开或创建一个数据库,返回SQLiteDatabase对象/*** openOrCreateDatabase(String name,int mode,SQLiteDatabase.CursorFactory factory)* name: 数据库名* mode: 数据库权限,MODE_PRIVATE为本应用程序私有,MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE分别为全局可读和可写。* factory: 可以用来实例化一个cusor对象的工厂类*/SQLiteDatabase db = openOrCreateDatabase("user.db",MODE_PRIVATE,null);//创建一个表db.execSQL("create table if not exists userTb (" +"_id integer primary key," +"name text not null,age integer not null," +"sex text not null)");//向表中插入记录db.execSQL("insert into userTb (name,age,sex) values ("张三",18,"女")");db.execSQL("insert into userTb (name,age,sex) values ("李四",19,"男")");db.execSQL("insert into userTb (name,age,sex) values ("王五",20,"女")");//Cursor为查询结果对象,类似于JDBC中的ResultSetCursor queryResult = db.rawQuery("select * from userTb", null);if (queryResult != null) {while (queryResult.moveToNext()) {Log.i("info", "id: " + queryResult.getInt(queryResult.getColumnIndex("_id"))+ " 姓名: " + queryResult.getString(queryResult.getColumnIndex("name"))+ " 年龄: " + queryResult.getInt(queryResult.getColumnIndex("age"))+ " 性别: " + queryResult.getString(queryResult.getColumnIndex("sex")));}//关闭游标对象queryResult.close();}//关闭数据库db.close();}}当执行完openOrCreateDatabase("user.db",MODE_PRIVATE,null)后,会在/data/data/<包名>/databases/目录下创建一个数据库文件,打开DDMS可以查看。也可以将其导出,使用navigate等工具打开查看里面的数据。
另外,上述示例对记录的操作是使用execSQL()方法通过原生的SQL语句进行的,当然也可以使用上面介绍的SQLiteDatabase常用的方法来操作,如insert()、delete()、update()、query()等方法。但是需要注意的是,以插入记录举例,当数据量不大时,通过execSQL()使用SQL语句进行插入与使用insert()方法插入记录的效率是差不多的,但是如果数据量比较大,那么使用前者比使用后者的效率明显高出很多。
SQLiteOpenHelper
这个类为SQLiteDatabase的帮助类,主要用于管理数据库的创建与版本更新。SQLiteHelper是一个抽象类,一般通过创建一个继承自它的子类并重写onCreat()和onUpgrade()方法进行使用。
-onCreat(SQLiteDatabase db) //首次创建数据库时调用,一般用于建表等操作。
-onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)//当升级数据库版本时调用
下面是使用SQLiteOpenHelper的一个简单示例:
创建一个继承自SQLiteOpenHelper的子类
public class SQLiteHelper extends SQLiteOpenHelper {/*** context:上下文对象* name:数据库名*/public SQLiteHelper(Context context, String name) {super(context, name, null, 1);}//首次创建数据库的时候调用,一般进行建表或某些初始化的操作@Overridepublic void onCreate(SQLiteDatabase db) {//建表db.execSQL("create table if not exists userTb (" +"_id integer primary key," +"name text not null,age integer not null," +"sex text not null)");}//当数据库版本升级时自动调用@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}}然后就可以通过SQLiteHelper的实例获取一个SQLiteDatabase对象,进而对数据库进行一系列的操作了。
public class MainActivity2 extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);//创建一个SQLiteHelper对象SQLiteHelper helper = new SQLiteHelper(MainActivity2.this,"stu.db");//使用getWritableDatabase()或getReadableDatabase()方法获得SQLiteDatabase对象SQLiteDatabase db = helper.getWritableDatabase();//插入记录db.execSQL("insert into userTb (name,age,sex) values ("张三",18,"女")");db.execSQL("insert into userTb (name,age,sex) values ("李四",19,"男")");db.execSQL("insert into userTb (name,age,sex) values ("王五",20,"女")");//获取游标对象Cursor queryResult = db.rawQuery("select * from userTb", null);if (queryResult != null) {//打印所有记录while (queryResult.moveToNext()) {Log.i("info", "id: " + queryResult.getInt(queryResult.getColumnIndex("_id"))+ " 姓名: " + queryResult.getString(queryResult.getColumnIndex("name"))+ " 年龄: " + queryResult.getInt(queryResult.getColumnIndex("age"))+ " 性别: " + queryResult.getString(queryResult.getColumnIndex("sex")));}//关闭游标对象queryResult.close();}//关闭数据库db.close();}}