Activity SQLite数据库操作,ContentProvider与ContentResolver类似操作
首先定义自己的类继承SQLiteOpenHelper,这个类的getWritableDatabase()和getReadableDatabase()会帮助你生成一个数据库SQLiteDatabase。
?
SQLiteDatabase数据库操作如下:
1.标准SQL:
添加,更改,删除execSQL()的第一个参数为SQL语句,第二个参数为SQL语句中占位符
例如:db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"张三", 4});
查询rawQuery()的第一个参数为SQL语句,第二个参数为SQL语句中占位符
例如:Cursor cursor = db.rawQuery("select * from person where name like ? and age=?", new String[]{"%张三%", "4"});
?
2.方法:
?
?
一,SQLiteOpenHelper 类
其中:
getReadableDatabase()得到可读的数据库,返回SQLiteDatabase对象,然后通过对象进行数据库操作。
getWritableDatabase()得到可写的数据库,返回SQLiteDatabase对象,然后通过对象进行数据库操作。
onCreate(SQLiteDatabase db)在第一次创建数据库时调用。
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)在更改数据库时都会调用。
onOpen(SQLiteDatabase db)当数据库打开时调用。
close()关闭数据库。
二,SQLiteDatabase类
这个类提供了对数据库的一些基本操作:
insert()
delete()
update()
query()
。。。。。等等。
代码:
SQLiteOpenHelper 的子类:
- import?android.content.Context;
- import?android.database.sqlite.SQLiteDatabase;
- import?android.database.sqlite.SQLiteDatabase.CursorFactory;
- import?android.database.sqlite.SQLiteOpenHelper;
- /**
- ?*?通过getReadableDatabase()和getWritableDatabase()可以获得数据库对象。
- ?*?提供onCreate()-创建数据库时,onUpgrade()-升级数据库时,两个回调函数。
- ?*/
- public?class?DatabaseHelper?extends?SQLiteOpenHelper?{
- ????//?按要求必须要有构造函数
- ????public?DatabaseHelper(Context?context,?String?name,?CursorFactory?factory,
- ????????????int?version)?{
- ????????super(context,?name,?factory,?version);
- ????}
- ????//?当第一次得到SQLiteDatabase对象时,调用该方法
- ????@Override
- ????public?void?onCreate(SQLiteDatabase?db)?{
- ????????String?sql?=?”create?table?MSG(id?int,body?varchar(100))”;
- ????????db.execSQL(sql);
- ????????System.out.println(“创建了一个数据库!”);
- ????}
- ????//?当更新数据库时执行该方法
- ????@Override
- ????public?void?onUpgrade(SQLiteDatabase?db,?int?oldVersion,?int?newVersion)?{
- ????????System.out.println(“更新了数据库!”);
- ????????//?还可以写其他的操作
- ????}
- }
有了这个类后,我们就可以对数据库进行增、删、改、查操作了。
插入数据:
//insert (String table, String nullColumnHack, ContentValues values)
- //生成ContentValues对象,key:列名,value:想插入的值
- ????????????????ContentValues?values?=?new?ContentValues();
- ????????????????values.put(“id”,?1);
- ????????????????values.put(“body”,?”hello”);
- ????????????????DatabaseHelper?dbhelper?=?new?DatabaseHelper(SqliteActivity.this,?”text_msg”,?null,?2);
- ????????????????//得到可写的SQLiteDatabase对象
- ????????????????SQLiteDatabase?db?=?dbhelper.getWritableDatabase();
- ????????????????//调用insert方法,将数据插入数据库
- ????????????????//参数1:表名
- ????????????????//参数2:如果你想插入空值,那么你必须指定它的所在的列
- ????????????????db.insert(“MSG”,?null,?values);
- ????????????????System.out.println(“插入了:1,?hello”);
修改数据:
update (String table, ContentValues values, String whereClause, String[] whereArgs)
- ContentValues?values?=?new?ContentValues();
- ????????????????values.put(“body”,?”my?dear!”);
- ????????????????DatabaseHelper?dbhelper?=?new?DatabaseHelper(SqliteActivity.this,?”text_msg”,?null,?2);
- ????????????????//得到可写的SQLiteDatabase对象
- ????????????????SQLiteDatabase?db?=?dbhelper.getWritableDatabase();
- ????????????????//调用insert方法,将数据插入数据库
- ????????????????//参数3:where?子句?”?”是占位符号,对应后面的”1″,这和web开发时的语法是一样的
- ????????????????db.update(“MSG”,?values,?”id=?”,?new?String[]{“1″});
- ????????????????System.out.println(“更新了:hello–>my?dear!”);
?
删除数据:
delete?(String?table,?String?whereClause,?String[]?whereArgs)
- DatabaseHelper?dbhelper?=?new?DatabaseHelper(SqliteActivity.this,?”text_msg”,?null,?2);
- ????????????????//得到可写的SQLiteDatabase对象
- ????????????????SQLiteDatabase?db?=?dbhelper.getWritableDatabase();
- ????????????????//调用delete方法,删除数据
- ????????????????db.delete(“MSG”,?”id=?”,?new?String[]{“1″});
- ????????????????System.out.println(“删除了:id=1″);
查询数据:
//query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
- DatabaseHelper?dbhelper?=?new?DatabaseHelper(SqliteActivity.this,?”text_msg”,?null,?2);
- ????????????????//得到可读的SQLiteDatabase对象
- ????????????????SQLiteDatabase?db?=?dbhelper.getReadableDatabase();
- ????????????????//参数1:表名
- ????????????????//参数2:要想显示的列
- ????????????????//参数3:where子句
- ????????????????//参数4:where子句对应的条件值
- ????????????????//参数5:分组方式
- ????????????????//参数6:having条件
- ????????????????//参数7:排序方式
- ????????????????Cursor?cursor?=?db.query(“MSG”,?new?String[]{“id”,”body”},?”id=?”,?new?String[]{“1″},?null,?null,?null);
- ????????????????System.out.println(“查到的数据为:”);
- ????????????????while(cursor.moveToNext()){
- ????????????????????????int?id?=?cursor.getInt(cursor.getColumnIndex(“id”));
- ????????????????????????String?name?=?cursor.getString(cursor.getColumnIndex(“body”));
- ????????????????????????System.out.println(“–>”+id+”::::::::::”+name);
- ????????????????????}
怎样使用adb查看数据库?
SQLite没有客户端,不能直接的查看数据库,所以用它提供的adb吧。
1,进入命令行后输入adb回车,会显示很多的信息。
2,输入adb shell回车,就进入了Linux命令行,现在就可以使用Linux的命令了。
3,ls回车,显示所有的东西,其中有个data。(ls:显示所有,cd:进入)
4,cd data回车,再ls回车,cd data回车,ls回车后就会看到很多的com.。。。的东西,那就是机器上的应用程序,找到你应用程序的包名,然后进入。
5,进去后在查看所有,会发现个databases,进入databases,显示所有就会发现你的数据库名字,我这里使用的是”text_msg”。
6,sqlite3 text_msg回车就进入了你的数据库了,然后“.schema”就会看到该应用程序的所有表及建表语句。
7,现在你就可以使用标准的SQL语句查看刚才生成的数据库及数据了。
对数据库的操作方法很多,这只是其中一种。
ContentProvider与ContentResolver的方法:
?
public?Uri?insert(Uri?uri,?ContentValues?values)
public?int?update(Uri?uri,?ContentValues?values,?String?selection,?String[]?selectionArgs)
?
public?int?delete(Uri?uri,?String?selection,?String[]?selectionArgs)??
public?Cursor?query(Uri?uri,?String[]?projection,?String?selection,?String[]?selectionArgs,?String?sortOrder)
?
?
?