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:如果 第三个参数为null或个数为0,则必须知道这个参数为任意字段名(不要为主键),否则为null。
- db.insert(“MSG”, null, values);
- System.out.println(“插入了:1, hello”);
删除数据:
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″);
修改数据:
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!”);
查询数据:
//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查看数据库?
sqlite3 数据库名.db //打开或创建指定的数据库。然后就可以操作数据库了。
.help查看sqlite的操作指南。
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)