package com.jackie.membercontentprovider;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class MyDatabaseHelper extends SQLiteOpenHelper {
public MyDatabaseHelper(Context context) {
super(context, DatabaseMetaData.DATABASE_NAME, null,
DatabaseMetaData.VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE "
+ DatabaseMetaData.MemberTableMetaData.TABLE_NAME + " ( "
+ DatabaseMetaData.MemberTableMetaData._ID
+ " INTEGER PRIMARY KEY,"
+ DatabaseMetaData.MemberTableMetaData.MEMBER_NAME
+ " VARCHAR(50) NOT NULL,"
+ DatabaseMetaData.MemberTableMetaData.MEMBER_AGE
+ " INTEGER NOT NULL,"
+ DatabaseMetaData.MemberTableMetaData.MEMBER_BIRTHDAY
+ " VARCHAR(50) NOT NULL" + " )";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String sql = "DROP TABLE IF EXISTS"
+ DatabaseMetaData.MemberTableMetaData.TABLE_NAME;
db.execSQL(sql);
this.onCreate(db);
}
}
3、contentProvider 表的具体实现类,服务器端
package com.jackie.membercontentprovider;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
public class MemberContentProvider extends ContentProvider {
private static UriMatcher uriMatcher = null; // 地址转换
private static final int GET_MEMBER_LIST = 1; // 得到全部的数据
private static final int GET_MEMBER_ITEM = 2; // 取得一个数据
private MyDatabaseHelper helper = null;
static { // 静态代码块
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); // 实例化对象
uriMatcher.addURI(DatabaseMetaData.AUTHORITY,
DatabaseMetaData.MemberTableMetaData.TABLE_NAME,
GET_MEMBER_LIST); // 取得全部数据的匹配地址
uriMatcher.addURI(DatabaseMetaData.AUTHORITY,
DatabaseMetaData.MemberTableMetaData.TABLE_NAME + "/#",
GET_MEMBER_ITEM); // 取得一个数据的匹配地址
}
@Override
public String getType(Uri uri) { // 取得数据类型
switch (uriMatcher.match(uri)) { // 匹配传入进来的Uri类型
case GET_MEMBER_LIST:
return DatabaseMetaData.MemberTableMetaData.CONTACT_LIST;
case GET_MEMBER_ITEM:
return DatabaseMetaData.MemberTableMetaData.CONTACT_ITEM;
default:
throw new UnsupportedOperationException("Not Support Operation:"
+ uri);
}
}
@Override
public boolean onCreate() { // 取得hepler类的对象
this.helper = new MyDatabaseHelper(super.getContext());
return true; // 表示操作成功了
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
SQLiteDatabase db = this.helper.getWritableDatabase(); // 以写方式打开数据库
int result = 0; // 操作结果
switch (uriMatcher.match(uri)) {
case GET_MEMBER_LIST:
result = db.delete(DatabaseMetaData.MemberTableMetaData.TABLE_NAME,
selection, selectionArgs);
break;
case GET_MEMBER_ITEM:
long id = ContentUris.parseId(uri); // 找到里面的id
String where = "_id=" + id;
result = db.delete(DatabaseMetaData.MemberTableMetaData.TABLE_NAME,
where, selectionArgs);
break;
default:
throw new UnsupportedOperationException("Not Support Operation:"
+ uri);
}
return result;
}
@Override
public Uri insert(Uri uri, ContentValues values) { // 传过来的地址
// ***content://com.jackie.membercontentprovider/member
SQLiteDatabase db = this.helper.getWritableDatabase(); // 以写方式打开数据库
long id = 0; // 取得增加数据后的id
switch (uriMatcher.match(uri)) {
case GET_MEMBER_LIST:
id = db.insert(DatabaseMetaData.MemberTableMetaData.TABLE_NAME,
DatabaseMetaData.MemberTableMetaData._ID, values);
String uriPath = uri.toString();
String path = uriPath + "/" + id;
return Uri.parse(path);
case GET_MEMBER_ITEM:
return null;
default:
throw new UnsupportedOperationException("Not Support Operation:"
+ uri);
}
}
@Override
public Cursor query(Uri uri, String[] columns, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteDatabase db = this.helper.getWritableDatabase(); // 以写方式打开数据库
switch (uriMatcher.match(uri)) {
case GET_MEMBER_LIST:
return db.query(DatabaseMetaData.MemberTableMetaData.TABLE_NAME,
columns, selection, selectionArgs, null, null, sortOrder);
case GET_MEMBER_ITEM:
long id=ContentUris.parseId(uri); //查询的id
String where="_id"+id;
return db.query(DatabaseMetaData.MemberTableMetaData.TABLE_NAME,
columns, where, selectionArgs, null, null, sortOrder);
default:
throw new UnsupportedOperationException("Not Support Operation:"
+ uri);
}
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
SQLiteDatabase db = this.helper.getWritableDatabase(); // 以写方式打开数据库
int result = 0; // 表示结果
switch (uriMatcher.match(uri)) {
case GET_MEMBER_LIST:
result = db.update(DatabaseMetaData.MemberTableMetaData.TABLE_NAME,
values, null, null);
break;
case GET_MEMBER_ITEM:
long id = ContentUris.parseId(uri); // 找到里面的id
String where = "_id=" + id;
result = db.update(DatabaseMetaData.MemberTableMetaData.TABLE_NAME,
values, where, selectionArgs);
break;
default:
throw new UnsupportedOperationException("Not Support Operation:"
+ uri);
}
return result;
}
}
4、请求数据端的程序MyDemo.java
package com.jackie.membercontentprovider;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
public class MyDemo extends Activity {
private Button insertBut = null;
private Button updateBut = null;
private Button deleteBut = null;
private Button queryBut = null;
private TextView mainInfo = null;
private ListView memberList = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
this.insertBut = (Button) super.findViewById(R.id.insertBut);
this.updateBut = (Button) super.findViewById(R.id.updateBut);
this.deleteBut = (Button) super.findViewById(R.id.deleteBut);
this.queryBut = (Button) super.findViewById(R.id.queryBut);
this.mainInfo = (TextView) super.findViewById(R.id.mainInfo);
this.memberList = (ListView) super.findViewById(R.id.memberList);
this.insertBut.setOnClickListener(new insertOnClickListener());
this.updateBut.setOnClickListener(new updateOnClickListener());
this.deleteBut.setOnClickListener(new deleteOnClickListener());
this.queryBut.setOnClickListener(new queryOnClickListener());
}
public class insertOnClickListener implements OnClickListener {
@Override
public void onClick(View arg0) {
MyDemo.this.mainInfo.setText("现在执行的是增加操作***");
long id = 0;
id = MyDemo.this.testInsert("孙悟空", 100, new SimpleDateFormat(
"yyyy-mm-dd").format(new Date())); // 增加数据
Toast.makeText(MyDemo.this, "数据增加成功,ID为:" + id, Toast.LENGTH_LONG)
.show();
}
}
public class updateOnClickListener implements OnClickListener {
@Override
public void onClick(View arg0) {
MyDemo.this.mainInfo.setText("现在执行的是更新操作***");
long result = 0;
result = MyDemo.this.testUpdate("2", "sam", 34, "1987s-1-13"); // 更新数据
Toast.makeText(MyDemo.this, "更新了" + result + "条记录",
Toast.LENGTH_LONG).show();
}
}
public class deleteOnClickListener implements OnClickListener {
@Override
public void onClick(View arg0) {
MyDemo.this.mainInfo.setText("现在执行的是删除操作***");
long result = 0;
result = MyDemo.this.testDelete(String.valueOf(4)); // 更新数据
Toast.makeText(MyDemo.this, "删除了" + result + "条记录",
Toast.LENGTH_LONG).show();
}
}
public class queryOnClickListener implements OnClickListener {
@Override
public void onClick(View v) {
MyDemo.this.mainInfo.setText("现在执行的是查询操作***");
Cursor result = MyDemo.this.testQuery(null); // 查询全部
MyDemo.this.startManagingCursor(result); //把返回的结果交给系统管理
List<Map<String, Object>> members = new ArrayList<Map<String, Object>>();
for (result.moveToFirst(); !result.isAfterLast(); result
.moveToNext()) {
Map<String, Object> member = new HashMap<String, Object>();
member.put("_id", result.getInt(0));
member.put("name", result.getString(1));
member.put("age", result.getInt(2));
member.put("birthday", result.getString(3));
members.add(member);
}
MyDemo.this.memberList.setAdapter(new SimpleAdapter(MyDemo.this,
members, R.layout.member, new String[] { "_id", "name",
"age", "birthday" }, new int[] { R.id._id,
R.id.name, R.id.age, R.id.birthday }));
Toast.makeText(MyDemo.this, "数据查询成功!!!",
Toast.LENGTH_LONG).show();
}
}
public long testInsert(String name, int age, String birthday) { // 执行增加数据操作
ContentResolver contentresolver = super.getContentResolver();
ContentValues values = new ContentValues();
values.put(DatabaseMetaData.MemberTableMetaData.MEMBER_NAME, name);
values.put(DatabaseMetaData.MemberTableMetaData.MEMBER_AGE, age);
values.put(DatabaseMetaData.MemberTableMetaData.MEMBER_BIRTHDAY,
birthday);
Uri resultUri = contentresolver.insert(
DatabaseMetaData.MemberTableMetaData.CONTENT_URI, values);
System.out.println("***" + resultUri);
return ContentUris.parseId(resultUri); // 解析出返回的id数据
}
public long testUpdate(String _id, String name, int age, String birthday) { // 执行增加数据操作
long result = 0; // 返回结果
ContentResolver contentresolver = super.getContentResolver();
ContentValues values = new ContentValues();
values.put(DatabaseMetaData.MemberTableMetaData.MEMBER_NAME, name);
values.put(DatabaseMetaData.MemberTableMetaData.MEMBER_AGE, age);
values.put(DatabaseMetaData.MemberTableMetaData.MEMBER_BIRTHDAY,
birthday);
if (_id == null || "".equals(_id)) { // 更新全部
result = contentresolver.update(
DatabaseMetaData.MemberTableMetaData.CONTENT_URI, values,
null, null);
} else {
result = contentresolver.update(Uri.withAppendedPath(
DatabaseMetaData.MemberTableMetaData.CONTENT_URI, _id),
values, null, null);
}
return result; // 解析出返回的id数据
}
public long testDelete(String _id) { // 执行增加数据操作
ContentResolver contentresolver = super.getContentResolver();
long result = 0; // 返回结果
if (_id == null || "".equals(_id)) { // 更新全部
result = contentresolver.delete(
DatabaseMetaData.MemberTableMetaData.CONTENT_URI, null,
null);
} else {
result = contentresolver.delete(Uri.withAppendedPath(
DatabaseMetaData.MemberTableMetaData.CONTENT_URI, _id),
null, null);
}
return result; // 解析出返回的id数据
}
public Cursor testQuery(String _id) {
ContentResolver contentresolver = super.getContentResolver();
if (_id == null || "".equals(_id)) {
return contentresolver
.query(DatabaseMetaData.MemberTableMetaData.CONTENT_URI,
null, null, null,
DatabaseMetaData.MemberTableMetaData.SORT_ORDER);
} else {
return contentresolver.query(Uri.withAppendedPath(
DatabaseMetaData.MemberTableMetaData.CONTENT_URI, _id),
null, null, null,
DatabaseMetaData.MemberTableMetaData.SORT_ORDER);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.my_demo, menu);
return true;
}
}
5、查询到表的数据显示在终端,两布局文件main.xml和member.xml
Main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MyDemo" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
tools:context=".MyDemo" >
<Button
android:id="@+id/insertBut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="增加" />
<Button
android:id="@+id/updateBut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="更新" />
<Button
android:id="@+id/deleteBut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="删除" />
<Button
android:id="@+id/queryBut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查询" />
</LinearLayout>
<TextView
android:id="@+id/mainInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ListView
android:id="@+id/memberList"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
member.xml
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MyDemo" >
<TableRow>
<TextView
android:id="@+id/_id"
android:layout_width="30px"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/name"
android:layout_width="100px"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/age"
android:layout_width="60px"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/birthday"
android:layout_width="200px"
android:layout_height="wrap_content"/>
</TableRow>
</TableLayout>