首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

Activity SQLite数据库操作,ContentProvider与ContentResolver相仿操作

2012-07-05 
Activity SQLite数据库操作,ContentProvider与ContentResolver类似操作首先定义自己的类继承SQLiteOpenHel

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 的子类:

  1. import?android.content.Context;
  2. import?android.database.sqlite.SQLiteDatabase;
  3. import?android.database.sqlite.SQLiteDatabase.CursorFactory;
  4. import?android.database.sqlite.SQLiteOpenHelper;
  5. /**
  6. ?*?通过getReadableDatabase()和getWritableDatabase()可以获得数据库对象。
  7. ?*?提供onCreate()-创建数据库时,onUpgrade()-升级数据库时,两个回调函数。
  8. ?*/
  9. public?class?DatabaseHelper?extends?SQLiteOpenHelper?{
  10. ????//?按要求必须要有构造函数
  11. ????public?DatabaseHelper(Context?context,?String?name,?CursorFactory?factory,
  12. ????????????int?version)?{
  13. ????????super(context,?name,?factory,?version);
  14. ????}
  15. ????//?当第一次得到SQLiteDatabase对象时,调用该方法
  16. ????@Override
  17. ????public?void?onCreate(SQLiteDatabase?db)?{
  18. ????????String?sql?=?”create?table?MSG(id?int,body?varchar(100))”;
  19. ????????db.execSQL(sql);
  20. ????????System.out.println(“创建了一个数据库!”);
  21. ????}
  22. ????//?当更新数据库时执行该方法
  23. ????@Override
  24. ????public?void?onUpgrade(SQLiteDatabase?db,?int?oldVersion,?int?newVersion)?{
  25. ????????System.out.println(“更新了数据库!”);
  26. ????????//?还可以写其他的操作
  27. ????}
  28. }

有了这个类后,我们就可以对数据库进行增、删、改、查操作了。
插入数据:

  1. //insert (String table, String nullColumnHack, ContentValues values)
  2. //生成ContentValues对象,key:列名,value:想插入的值
  3. ????????????????ContentValues?values?=?new?ContentValues();
  4. ????????????????values.put(“id”,?1);
  5. ????????????????values.put(“body”,?”hello”);
  6. ????????????????DatabaseHelper?dbhelper?=?new?DatabaseHelper(SqliteActivity.this,?”text_msg”,?null,?2);
  7. ????????????????//得到可写的SQLiteDatabase对象
  8. ????????????????SQLiteDatabase?db?=?dbhelper.getWritableDatabase();
  9. ????????????????//调用insert方法,将数据插入数据库
  10. ????????????????//参数1:表名
  11. ????????????????//参数2:如果你想插入空值,那么你必须指定它的所在的列
  12. ????????????????db.insert(“MSG”,?null,?values);
  13. ????????????????System.out.println(“插入了:1,?hello”);

    修改数据:

    1. update (String table, ContentValues values, String whereClause, String[] whereArgs)
    2. ContentValues?values?=?new?ContentValues();
    3. ????????????????values.put(“body”,?”my?dear!”);
    4. ????????????????DatabaseHelper?dbhelper?=?new?DatabaseHelper(SqliteActivity.this,?”text_msg”,?null,?2);
    5. ????????????????//得到可写的SQLiteDatabase对象
    6. ????????????????SQLiteDatabase?db?=?dbhelper.getWritableDatabase();
    7. ????????????????//调用insert方法,将数据插入数据库
    8. ????????????????//参数3:where?子句?”?”是占位符号,对应后面的”1″,这和web开发时的语法是一样的
    9. ????????????????db.update(“MSG”,?values,?”id=?”,?new?String[]{“1″});
    10. ????????????????System.out.println(“更新了:hello–>my?dear!”);

    ?

    删除数据:

    1. delete?(String?table,?String?whereClause,?String[]?whereArgs)
    2. DatabaseHelper?dbhelper?=?new?DatabaseHelper(SqliteActivity.this,?”text_msg”,?null,?2);
    3. ????????????????//得到可写的SQLiteDatabase对象
    4. ????????????????SQLiteDatabase?db?=?dbhelper.getWritableDatabase();
    5. ????????????????//调用delete方法,删除数据
    6. ????????????????db.delete(“MSG”,?”id=?”,?new?String[]{“1″});
    7. ????????????????System.out.println(“删除了:id=1″);

    查询数据:

    1. //query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
    2. DatabaseHelper?dbhelper?=?new?DatabaseHelper(SqliteActivity.this,?”text_msg”,?null,?2);
    3. ????????????????//得到可读的SQLiteDatabase对象
    4. ????????????????SQLiteDatabase?db?=?dbhelper.getReadableDatabase();
    5. ????????????????//参数1:表名
    6. ????????????????//参数2:要想显示的列
    7. ????????????????//参数3:where子句
    8. ????????????????//参数4:where子句对应的条件值
    9. ????????????????//参数5:分组方式
    10. ????????????????//参数6:having条件
    11. ????????????????//参数7:排序方式
    12. ????????????????Cursor?cursor?=?db.query(“MSG”,?new?String[]{“id”,”body”},?”id=?”,?new?String[]{“1″},?null,?null,?null);
    13. ????????????????System.out.println(“查到的数据为:”);
    14. ????????????????while(cursor.moveToNext()){
    15. ????????????????????????int?id?=?cursor.getInt(cursor.getColumnIndex(“id”));
    16. ????????????????????????String?name?=?cursor.getString(cursor.getColumnIndex(“body”));
    17. ????????????????????????System.out.println(“–>”+id+”::::::::::”+name);
    18. ????????????????????}

    怎样使用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)

    ?

    ?


    ?

    热点排行