android的四大组件中就有Content Provider,对其他应用,提供自己的数据,所以,一般情况下,android应用不需要提供content provider。
1. 简单的数据库表单字段声明:
MySqlName.java
public static final int VERSION = 1; public static final String DBNAME = "mydb"; /*
* 联系人详情数据库
*/
public class Contacts{
public static final String TableName="contacts"; public static final String Id="cId";//联系人的uri public static final String Number="number"; public static final String Name="name";
}
一般一张表,写一个内部类,内部类的变量是数据库中的列。这个文件写成这样子就可以了。
2. 创建数据库
MySql.java
public class Mysql extends SQLiteOpenHelper{ public Mysql(Context context) {
super(context,Mysqlname.DBNAME, null, Mysqlname.VERSION); } @Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
/*
* 创建人员表单
*/
db.execSQL("create table "+Mysqlname.Contacts.TableName+"(" + Mysqlname.Contacts.Id+" integer primary key autoincrement not null,"+ Mysqlname.Contacts.Number+" text ," + Mysqlname.Contacts.Name+" text );"
);
}
}
这样,在这个数据库创建就完成了,但是除了创建工作,还需要对外提供一些方法;
3. 操作
- 查询
SQLiteDatabase db = this.getWritableDatabase();
Cursor cr =db.query(Mysqlname.Contact.TableName, null, Mysqlname.Contact.Id+"=?", new String[]{id}, null, null, null);
如果需要使用这个cr的内的值,需要:
if(cr!=null&&cr.getCount()>0&&cr.moveToFirst()){
String name = cr.getString(cr.getColumnIndex(Mysqlname.Contact.Name));
}
这里必须要movetofirst,不然会报错。
- 插入
db.insert(Mysqlname.Contact.TableName, Mysqlname..Contact.ID, values)
- 删除
db.delete(Mysqlname.Contact.TableName, Mysqlname.Contact.Id+"=? and "+Mysqlname.Contact.NAME+"=?", new String[]{id,name});
- 修改
db.update(Mysqlname.Contact.TableName, values, Mysqlname.Contact.Id+"=?", new String[]{id})
注意,以上的db ,Cursor,在使用完毕后,必须及时调用db.close(),cr.close();
使用事务进行批量操作:
db.beginTransaction(); String deleteContactSql = "DELETE from "+ Mysqlname.Contact.TableName+ " where "
+ Mysqlname.Contact.ContactId+ "='"+num+"';";
SQLiteStatement deleteContact = db.compileStatement(deleteContactSql);
deleteContact.executeUpdateDelete(); db.setTransactionSuccessful();
db.endTransaction();