当前位置: 代码迷 >> Android >> ch023 Android ContentProvider(第二一部分)
  详细解决方案

ch023 Android ContentProvider(第二一部分)

热度:139   发布时间:2016-05-01 12:20:49.0
ch023 Android ContentProvider(第二部分)

--------------------------------------------AndroidManifest.xml----------------------------------

<?xml?version="1.0"?encoding="utf-8"?>

<manifest?xmlns:android="http://schemas.android.com/apk/res/android"

????package="com.kawa.ch23"

????android:versionCode="1"

????android:versionName="1.0"?>

????<uses-sdk?android:minSdkVersion="8"?/>

????<application

????????android:icon="@drawable/ic_launcher"

????????android:label="@string/app_name"?>????

????????<uses-library?android:name="android.test.runner"/>

????????<activity

????????????android:label="@string/app_name"

????????????android:name=".MainActivity"?>

????????????<intent-filter?>

????????????????<action?android:name="android.intent.action.MAIN"?/>

????????????????<category?android:name="android.intent.category.LAUNCHER"?/>

????????????</intent-filter>

????????</activity>

????????<provider

????????????android:authorities="com.kawa.ch23.provider.myprovider"

????????????android:name=".provider.MyProvider"?>

????????</provider>???

???????<activity?android:name="com.kawa.ch23.ItemActivity"></activity>

????</application>

?????<instrumentation?android:name="android.test.InstrumentationTestRunner"

??android:targetPackage="com.kawa.ch23"?android:label="Tests?for?My?App"?/>

</manifest>

--------------------------------------------Layout?activity_main.java----------------------------

<?xml?version="1.0"?encoding="utf-8"?>

<LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"

????android:layout_width="fill_parent"

????android:layout_height="fill_parent"

????android:orientation="vertical"?>

????<TableLayout

????????android:layout_width="fill_parent"

????????android:layout_height="wrap_content"

????????android:stretchColumns="1"?>

????????<TableRow?>

????????????<TextView

????????????????android:layout_width="wrap_content"

????????????????android:layout_height="wrap_content"

????????????????android:text="姓名"?/>

????????????<EditText

????????????????android:id="@+id/edtname"

????????????????android:layout_width="wrap_content"

????????????????android:layout_height="wrap_content"?

????????????????android:text="fy"/>

????????</TableRow>

????????<TableRow?>

????????????<TextView????????????

????????????????android:layout_width="wrap_content"

????????????????android:layout_height="wrap_content"

????????????????android:text="年龄"?/>

????????????<EditText

????????????????android:id="@+id/edtage"

????????????????android:layout_width="wrap_content"

????????????????android:layout_height="wrap_content"?

????????????????android:text="21"/>

????????</TableRow>

????</TableLayout>

????<LinearLayout

????????android:layout_width="fill_parent"

????????android:layout_height="wrap_content"

????????android:orientation="horizontal"?>

????????<Button

????????????android:id="@+id/btnadd"

????????????android:layout_width="fill_parent"

????????????android:layout_height="wrap_content"

????????????android:layout_weight="1"

????????????android:text="新增"?/>

????????<Button

????????????android:id="@+id/btnqueryall"

????????????android:layout_width="fill_parent"

????????????android:layout_height="wrap_content"

????????????android:layout_weight="1"

????????????android:text="查询所有"?/>

????</LinearLayout>

????<ListView

????????android:id="@+id/lvall"

????????android:layout_width="fill_parent"

????????android:layout_height="wrap_content"?>

????</ListView>

</LinearLayout>

--------------------------------------------Layout?item.xml--------------------------------------

<?xml?version="1.0"?encoding="utf-8"?>

<LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"

????android:layout_width="match_parent"

????android:layout_height="match_parent"

????android:orientation="vertical"?>

????<TableLayout

????????android:layout_width="fill_parent"

????????android:layout_height="wrap_content"

????????android:stretchColumns="1"?>

????????<TableRow?>

????????????<TextView

????????????????android:layout_width="fill_parent"

????????????????android:layout_height="wrap_content"

????????????????android:text="ID"?/>

????????????<EditText

????????????????android:id="@+id/edt_item_id"

????????????????android:layout_width="fill_parent"

????????????????android:layout_height="wrap_content"?

????????????????/>

????????</TableRow>

????????<TableRow?>

????????????<TextView

????????????????android:layout_width="wrap_content"

????????????????android:layout_height="wrap_content"

????????????????android:text="姓名"?/>

????????????<EditText

????????????????android:id="@+id/edt_item_name"

????????????????android:layout_width="fill_parent"

????????????????android:layout_height="wrap_content"?/>

????????</TableRow>

????????<TableRow?>

????????????<TextView

????????????????android:layout_width="wrap_content"

????????????????android:layout_height="wrap_content"

????????????????android:text="年龄"?/>

????????????<EditText

????????????????android:id="@+id/edt_item_age"

????????????????android:layout_width="fill_parent"

????????????????android:layout_height="wrap_content"?/>

????????</TableRow>

????</TableLayout>

????<LinearLayout

????????android:layout_width="fill_parent"

????????android:layout_height="wrap_content"

????????android:orientation="horizontal"?>

????????<Button

????????????android:id="@+id/btndel"

????????????android:layout_width="fill_parent"

????????????android:layout_height="wrap_content"

????????????android:layout_weight="1"

????????????android:text="删除"?/>

????????<Button

????????????android:id="@+id/btnupdate"

????????????android:layout_width="fill_parent"

????????????android:layout_height="wrap_content"

????????????android:layout_weight="1"

????????????android:text="更新"?/>

????</LinearLayout>

</LinearLayout>

--------------------------------------------Layout?list_item.xml----------------------------------

<?xml?version="1.0"?encoding="utf-8"?>

<LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"

????android:layout_width="fill_parent"

????android:layout_height="wrap_content"

????android:orientation="horizontal"?>

????<TextView

????????android:id="@+id/tvId"

????????android:layout_width="fill_parent"

????????android:layout_height="wrap_content"?

????????android:layout_weight="1"

???????/>

????<TextView

????????android:id="@+id/tvname"

????????android:layout_width="fill_parent"

????????android:layout_height="wrap_content"?

???????????android:layout_weight="1"/>

????<TextView

????????android:id="@+id/tvage"

????????android:layout_width="fill_parent"

????????android:layout_height="wrap_content"?

???????????android:layout_weight="1"/>

</LinearLayout>

--------------------------------------------MainActivity.java--------------------------------------

package?com.kawa.ch23;

import?java.util.ArrayList;

import?java.util.HashMap;

import?java.util.List;

import?java.util.Map;

import?com.kawa.ch23.model.Person;

import?com.kawa.ch23.util.Const;

import?android.app.Activity;

import?android.content.ContentResolver;

import?android.content.ContentUris;

import?android.content.ContentValues;

import?android.content.Context;

import?android.content.Intent;

import?android.database.Cursor;

import?android.net.Uri;

import?android.os.Bundle;

import?android.os.Handler;

import?android.os.Message;

import?android.view.View;

import?android.view.View.OnClickListener;

import?android.widget.AdapterView;

import?android.widget.AdapterView.OnItemClickListener;

import?android.widget.Button;

import?android.widget.EditText;

import?android.widget.ListView;

import?android.widget.SimpleAdapter;

import?android.widget.Toast;

/**

?*?

?*?项目名称:com.kawa.ch23????

?*?类名称:MainActivity????

?*?类描述:??

?*?创建人:方勇???

?*?创建时间:2012-12-14?下午9:38:39???

?*?Copyright?(c)?方勇-版权所有

?*/

public?class?MainActivity?extends?Activity?{

private?Button?btn_add,?btn_queryall;

private?EditText?field_name,?field_age;

private?ListView?listview;

private?List<Person>?persons;

private?SimpleAdapter?simpleAdapter;

private?Handler?handler?=?new?Handler()?{//异步消息

@Override

public?void?handleMessage(Message?msg)?{

List<Map<String,?Object>>?data?=?(List<Map<String,?Object>>)?msg.obj;

System.out.println(data.size());

simpleAdapter?=?new?SimpleAdapter(MainActivity.this,?data,

R.layout.list_item,?new?String[]?{?"id",?"name",?"age"?},?new?int[]?{

R.id.tvId,?R.id.tvname,?R.id.tvage?});

listview.setAdapter(simpleAdapter);

}

};

public?void?onCreate(Bundle?savedInstanceState)?{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

persons?=?new?ArrayList<Person>();

findViews();

setListeners();

}

private?void?findViews()?{

btn_queryall?=?(Button)?this.findViewById(R.id.btnqueryall);

btn_add?=?(Button)?this.findViewById(R.id.btnadd);

field_name?=?(EditText)?this.findViewById(R.id.edtname);

field_age?=?(EditText)?this.findViewById(R.id.edtage);

listview?=?(ListView)?this.findViewById(R.id.lvall);

}

private?void?setListeners()?{

btn_add.setOnClickListener(addOnClickListener);

//?查询所有

btn_queryall.setOnClickListener(queryOnClickListener);

listview.setOnItemClickListener(onItemClickListener);

}

@Override

protected?void?onActivityResult(int?requestCode,?int?resultCode,?Intent?data)?{

if?(resultCode?==?2)?{

MyThread?thread?=?new?MyThread(MainActivity.this);

thread.start();

}

}

private?OnClickListener?addOnClickListener?=?new?View.OnClickListener()?{

@Override

public?void?onClick(View?v)?{

ContentResolver?contentResolver?=?MainActivity.this

.getContentResolver();

Uri?url?=?Uri.parse("content://"+Const.PROVIDER_URL+"/person");

ContentValues?values?=?new?ContentValues();

values.put("name",?field_name.getText().toString());

values.put("age",?field_age.getText().toString());

Uri?result?=?contentResolver.insert(url,?values);

System.out.println(result.toString());

if?(ContentUris.parseId(result)?>?0)?{

Toast.makeText(MainActivity.this,?"添加成功",

Toast.LENGTH_LONG).show();

//?添加成功后再启动线程查询

MyThread?thread?=?new?MyThread(MainActivity.this);

thread.start();

}

}

};

private?OnClickListener?queryOnClickListener?=?new?View.OnClickListener()?{

@Override

public?void?onClick(View?v)?{

MyThread?thread?=?new?MyThread(MainActivity.this);

thread.start();

}

};

private?OnItemClickListener?onItemClickListener?=?new?OnItemClickListener()?{

@Override

public?void?onItemClick(AdapterView<?>?parent,?View?view,?int?position,

long?id)?{

System.out.println("position:"?+?position);

Person?person?=?persons.get(position);

Bundle?bundle?=?new?Bundle();

bundle.putInt("id",?person.getId());

bundle.putString("name",?person.getName());

bundle.putInt("age",?person.getAge());

Intent?intent?=?new?Intent(MainActivity.this,

ItemActivity.class);

intent.putExtra("item",?bundle);

startActivityForResult(intent,?1);

}

};

class?MyThread?extends?Thread?{

Context?context;

public?MyThread(Context?context)?{

//?一定要清空。否则会?有问题,每执行一次都会把之前的全部的item加进去

persons.clear();

listview.setAdapter(null);

this.context?=?context;

}

@Override

public?void?run()?{

Uri?url?=?Uri.parse("content://"+Const.PROVIDER_URL+"/person");

Cursor?cursor?=?context.getContentResolver().query(url,

new?String[]?{?"_id",?"name",?"age"?},?null,?null,?"_id");

while?(cursor.moveToNext())?{

Person?person?=?new?Person();

person.setId(cursor.getInt(cursor.getColumnIndex("_id")));

person.setName(cursor.getString(cursor.getColumnIndex("name")));

person.setAge(cursor.getInt(cursor.getColumnIndex("age")));

persons.add(person);

}

cursor.close();

List<Map<String,?Object>>?data?=?new?ArrayList<Map<String,?Object>>();

Map<String,?Object>?map?=?null;

for?(int?i?=?0;?i?<?persons.size();?i++)?{

map?=?new?HashMap<String,?Object>();

map.put("id",?persons.get(i).getId());

map.put("name",?persons.get(i).getName());

map.put("age",?persons.get(i).getAge());

data.add(map);

}

Message?msg?=?handler.obtainMessage();

msg.obj?=?data;

handler.sendMessage(msg);

}

}

}

--------------------------------------------ItemActivity.java--------------------------------------

package?com.kawa.ch23;

import?com.kawa.ch23.util.Const;

import?android.app.Activity;

import?android.content.ContentResolver;

import?android.content.ContentValues;

import?android.content.Intent;

import?android.net.Uri;

import?android.os.Bundle;

import?android.view.View;

import?android.view.View.OnClickListener;

import?android.widget.Button;

import?android.widget.EditText;

import?android.widget.Toast;

/**

?*?

?*?项目名称:com.kawa.ch23????

?*?类名称:ItemActivity????

?*?类描述:??

?*?创建人:方勇???

?*?创建时间:2012-12-14?下午9:45:04???

?*?Copyright?(c)?方勇-版权所有

?*/

public?class?ItemActivity?extends?Activity?{

private?EditText?field_name;

private?EditText?field_age;

private?EditText?field_id;

private?Button?btn_del,?btn_update;

//?传数据

private?Intent?intent;

@Override

protected?void?onCreate(Bundle?savedInstanceState)?{

super.onCreate(savedInstanceState);

setContentView(R.layout.item);

findViews();

setListeners();

intent?=?getIntent();

Bundle?bundle?=?intent.getBundleExtra("item");//选中的数据

int?id?=?bundle.getInt("id");

String?name?=?bundle.getString("name");

int?age?=?bundle.getInt("age");

field_id.setText(String.valueOf(id));

field_name.setText(name);

field_age.setText(String.valueOf(age));

}

private?void?findViews()?{

field_id?=?(EditText)?this.findViewById(R.id.edt_item_id);

field_id.setEnabled(false);//?控制不可用

field_name?=?(EditText)?this.findViewById(R.id.edt_item_name);

field_age?=?(EditText)?this.findViewById(R.id.edt_item_age);

//?得到传过来的数据

btn_del?=?(Button)?this.findViewById(R.id.btndel);

btn_update?=?(Button)?this.findViewById(R.id.btnupdate);

}

private?void?setListeners()?{

btn_del.setOnClickListener(delOnClickListener);

btn_update.setOnClickListener(updateOnClickListener);

}

private?OnClickListener?updateOnClickListener?=?new?View.OnClickListener()?{

@Override

public?void?onClick(View?v)?{

ContentResolver?contentResolver?=?ItemActivity.this.getContentResolver();

//?构建Uri

String?url?=?"content://"+Const.PROVIDER_URL+"/person/"

+?field_id.getText();

Uri?uri?=?Uri.parse(url);

ContentValues?values?=?new?ContentValues();

values.put("name",?field_name.getText().toString());

values.put("age",?Integer.parseInt(field_age.getText().toString()));

int?result?=?contentResolver.update(uri,?values,?null,?null);

System.out.println("update?result:"?+?result);

if?(result?>=?1)?{

Toast.makeText(ItemActivity.this,?"更新成功",?Toast.LENGTH_LONG).show();

ItemActivity.this.setResult(2);//设置返回结果

ItemActivity.this.finish();//销毁

}

}

};

private?OnClickListener?delOnClickListener?=?new?View.OnClickListener()?{

@Override

public?void?onClick(View?v)?{

ContentResolver?contentResolver?=?ItemActivity.this.getContentResolver();

//?构建Uri

String?url?=?"content://"+Const.PROVIDER_URL+"/person/"

+?field_id.getText();

Uri?uri?=?Uri.parse(url);

int?result?=?contentResolver.delete(uri,?null,?null);

System.out.println("delete?result:"?+?result);

if?(result?>=?1)?{

Toast.makeText(ItemActivity.this,?"删除成功",?Toast.LENGTH_LONG).show();

ItemActivity.this.setResult(2);

ItemActivity.this.finish();//销毁

}

}

};

}

--------------------------------------------util目录?Const.java-----------------------------------

public?class?Const?{

public?static?String?PROVIDER_URL?=?"com.kawa.ch23.provider.myprovider";

}

--------------------------------------------provider目录?MyProvider.java-----------------------

package?com.kawa.ch23.provider;

import?android.content.ContentProvider;

import?android.content.ContentUris;

import?android.content.ContentValues;

import?android.content.UriMatcher;

import?android.database.Cursor;

import?android.net.Uri;

import?com.kawa.ch23.db.DBHelper;

import?com.kawa.ch23.util.Const;

/**

?*?

?*?项目名称:com.kawa.ch23????

?*?类名称:MyProvider????

?*?类描述:提供者??

?*?创建人:方勇???

?*?创建时间:2012-12-14?下午9:49:38???

?*?Copyright?(c)?方勇-版权所有

?*/

public?class?MyProvider?extends?ContentProvider?{

private?DBHelper?dbHelper;

//?定义一个UriMatcher类

private?static?final?UriMatcher?MATCHER?=?new?UriMatcher(

UriMatcher.NO_MATCH);

private?static?final?int?PERSONS?=?1;

private?static?final?int?PERSON?=?2;

static?{

MATCHER.addURI(Const.PROVIDER_URL,?"person",?PERSONS);

MATCHER.addURI(Const.PROVIDER_URL,?"person/#",?PERSON);

}

@Override

public?boolean?onCreate()?{

System.out.println("---oncreate----");

dbHelper?=?new?DBHelper(this.getContext());

dbHelper.open();

return?false;

}

//?查询数据

@Override

public?Cursor?query(Uri?uri,?String[]?projection,?String?selection,

String[]?selectionArgs,?String?sortOrder)?{

switch?(MATCHER.match(uri))?{

case?PERSONS:

//?查询所有的数据

return?dbHelper.findList("person",?projection,?selection,?selectionArgs,

null,?null,?sortOrder);

case?PERSON:

//?查询某个ID的数据

//?通过ContentUris这个工具类解释出ID

long?id?=?ContentUris.parseId(uri);

String?where?=?"?_id="?+?id;

if?(!"".equals(selection)?&&?selection?!=?null)?{

where?=?selection?+?"?and?"?+?where;

}

return?dbHelper.findList("person",?projection,?where,?selectionArgs,?null,

null,?sortOrder);

default:

throw?new?IllegalArgumentException("unknow?uri"?+?uri.toString());

}

}

//?返回当前操作的数据的mimeType

@Override

public?String?getType(Uri?uri)?{

switch?(MATCHER.match(uri))?{

case?PERSONS:

return?"vnd.android.cursor.dir/person";

case?PERSON:

return?"vnd.android.cursor.item/person";

default:

throw?new?IllegalArgumentException("Unkwon?Uri:"?+?uri.toString());

}

}

//?插入数据

@Override

public?Uri?insert(Uri?uri,?ContentValues?values)?{

Uri?insertUri?=?null;

switch?(MATCHER.match(uri))?{

case?PERSONS:

long?rowid?=?dbHelper.insert("person",?values);

insertUri?=?ContentUris.withAppendedId(uri,?rowid);

break;

default:

throw?new?IllegalArgumentException("Unkwon?Uri:"?+?uri.toString());

}

return?insertUri;

}

//?删除数据

@Override

public?int?delete(Uri?uri,?String?selection,?String[]?selectionArgs)?{

int?count?=?0;

switch?(MATCHER.match(uri))?{

case?PERSONS:

count?=?dbHelper.delete("person",?selection,?selectionArgs);

return?count;

case?PERSON:

long?id?=?ContentUris.parseId(uri);

String?where?=?"_id="?+?id;

if?(selection?!=?null?&&?!"".equals(selection))?{

where?=?selection?+?"?and?"?+?where;

}

count?=?dbHelper.delete("person",?where,?selectionArgs);

return?count;

default:

throw?new?IllegalArgumentException("Unkwon?Uri:"?+?uri.toString());

}

}

//?更新数据

@Override

public?int?update(Uri?uri,?ContentValues?values,?String?selection,

String[]?selectionArgs)?{

int?count?=?0;

switch?(MATCHER.match(uri))?{

case?PERSONS:

count?=?dbHelper.update("person",?values,?selection,?selectionArgs);

break;

case?PERSON:

//?通过ContentUri工具类得到ID

long?id?=?ContentUris.parseId(uri);

String?where?=?"_id="?+?id;

if?(selection?!=?null?&&?!"".equals(selection))?{

where?=?selection?+?"?and?"?+?where;

}

count?=?dbHelper.update("person",?values,?where,?selectionArgs);

break;

default:

throw?new?IllegalArgumentException("Unkwon?Uri:"?+?uri.toString());

}

return?count;

}

}

--------------------------------------------provider目录?Test.java-------------------------------

package?com.kawa.ch23.provider;

import?com.kawa.ch23.util.Const;

import?android.content.ContentResolver;

import?android.content.ContentValues;

import?android.database.Cursor;

import?android.net.Uri;

import?android.test.AndroidTestCase;

public?class?Test?extends?AndroidTestCase?{

/*保存*/

public?void?testInsert()?throws?Exception?{

ContentResolver?contentResolver?=?this.getContext()

.getContentResolver();

Uri?url?=?Uri.parse("content://"+Const.PROVIDER_URL+"/person");

ContentValues?values?=?new?ContentValues();

values.put("name",?"jiahui2");

values.put("age",?20);

contentResolver.insert(url,?values);

}

/*删除*/

public?void?testDelete()?throws?Exception{

ContentResolver?contentResolver?=?this.getContext()

.getContentResolver();

Uri?url?=?Uri.parse("content://"+Const.PROVIDER_URL+"/person/1");

//ContentValues?values?=?new?ContentValues();

contentResolver.delete(url,?null,?null);

}

/*更新*/

public?void?testUpdate()?throws?Exception?{

ContentResolver?contentResolver?=?this.getContext()

.getContentResolver();

Uri?url?=?Uri.parse("content://"+Const.PROVIDER_URL+"/person/1");

ContentValues?values?=?new?ContentValues();

values.put("name",?"jiahui2");

values.put("age",?20);

contentResolver.update(url,?values,?null,null);

}

/*查询*/

public?void?testQuery()?throws?Exception?{

ContentResolver?contentResolver?=?this.getContext()

.getContentResolver();

Uri?url?=?Uri.parse("content://"+Const.PROVIDER_URL+"/person");

Cursor?cursor?=?contentResolver.query(url,?new?String[]?{?"_id",

"name",?"age"?},?null,?null,?"_id");

while?(cursor.moveToNext())?{

System.out.println("_id:"+cursor.getInt(cursor.getColumnIndex("_id")));

System.out.println("name:"+cursor.getString(cursor.getColumnIndex("name")));

System.out.println("age:"+cursor.getInt(cursor.getColumnIndex("age")));

}

}

}

--------------------------------------------model目录?Person.java-------------------------------

package?com.kawa.ch23.model;

import?java.io.Serializable;

public?class?Person??implements?Serializable{

private?int?id;

private?String?name;

private?int?age;

public?int?getId()?{

return?id;

}

public?void?setId(int?id)?{

this.id?=?id;

}

public?String?getName()?{

return?name;

}

public?void?setName(String?name)?{

this.name?=?name;

}

public?int?getAge()?{

return?age;

}

public?void?setAge(int?age)?{

this.age?=?age;

}

@Override

public?int?hashCode()?{

final?int?prime?=?31;

int?result?=?1;

result?=?prime?*?result?+?age;

result?=?prime?*?result?+?id;

result?=?prime?*?result?+?((name?==?null)???0?:?name.hashCode());

return?result;

}

@Override

public?boolean?equals(Object?obj)?{

if?(this?==?obj)

return?true;

if?(obj?==?null)

return?false;

if?(getClass()?!=?obj.getClass())

return?false;

Person?other?=?(Person)?obj;

if?(age?!=?other.age)

return?false;

if?(id?!=?other.id)

return?false;

if?(name?==?null)?{

if?(other.name?!=?null)

return?false;

}?else?if?(!name.equals(other.name))

return?false;

return?true;

}

@Override

public?String?toString()?{

return?"Person?[id="?+?id?+?",?name="?+?name?+?",?age="?+?age?+?"]";

}

}

--------------------------------------------db目录?DBHelper.java--------------------------------

package?com.kawa.ch23.db;

import?com.kawa.ch23.util.LogOut;

import?android.content.ContentValues;

import?android.content.Context;

import?android.database.Cursor;

import?android.database.SQLException;

import?android.database.sqlite.SQLiteDatabase;

import?android.database.sqlite.SQLiteOpenHelper;

/**

?*?

?*?项目名称:com.kawa.ch21???

?*??

?*?类名称:DBHelper??

?*???

?*?类描述:Sqlite3数据库操作工具类????

?*???

?*?创建人:fy??

?*??

?*?创建时间:2012-9-7?上午9:27:24???

?*?

?*?Copyright?(c)?方勇-版权所有

?*/

public?class?DBHelper?{

//?DDL操作

private?static?DatabaseHelper?dbHelper;

//?DML操作

private?static?SQLiteDatabase?db;

//?数据库名

private?static?final?String?DATABASE_NAME?=?"kawa.db";

//?数据库版本

private?static?final?int?DATABASE_VERSION?=?1;

//?上下文环境

private?final?Context?mCtx;

/*?SQliteOpenHelper是一个抽象类,来管理数据库的创建和版本的管理?*/

private?static?class?DatabaseHelper?extends?SQLiteOpenHelper?{

DatabaseHelper(Context?context)?{

super(context,?DATABASE_NAME,?null,?DATABASE_VERSION);

}

@Override

public?void?onCreate(SQLiteDatabase?db)?{

String?sql?=?"create?table?IF?NOT?EXISTS??person?(_id?integer?primary?key?autoincrement,?name?text,age?integer)";

LogOut.out("fy",?"sql["?+?sql?+?"]");

db.execSQL(sql);

}

@Override

public?void?onUpgrade(SQLiteDatabase?db,?int?oldVersion,?int?newVersion)?{

System.out.println("upgrade?a?database");

}

}

public?DBHelper(Context?ctx)?{

this.mCtx?=?ctx;

}

public?DBHelper?open()?throws?SQLException?{

dbHelper?=?new?DatabaseHelper(mCtx);

db?=?dbHelper.getWritableDatabase();

return?this;

}

public?void?closeclose()?{

db.close();

dbHelper.close();

}

/**

?*?插入数据

?*?参数:tableName?表名

?*?initialValues?要插入的列对应值

?*???*/

public?long?insert(String?tableName,?ContentValues?initialValues)?{

return?db.insert(tableName,?null,?initialValues);

}

/**

?*?删除数据

?*?参数:tableName?表名

?*?deleteCondition?删除的条件

?*?deleteArgs?如果deleteCondition中有“?”号,将用此数组中的值替换

?*???*/

public?int?delete(String?tableName,?String?deleteCondition,

String[]?deleteArgs)?{

return?db.delete(tableName,?deleteCondition,?deleteArgs)?;

}

/**

?*?更新数据

?*?参数:tableName?表名

?*?initialValues?要更新的列

?*?selection?更新的条件

?*?selectArgs?如果selection中有“?”号,将用此数组中的值替换

?*???*/

public?int?update(String?tableName,?ContentValues?initialValues,

String?selection,?String[]?selectArgs)?{

int?returnValue?=?db

.update(tableName,?initialValues,?selection,?selectArgs);

return?returnValue?;

}

/**

?*?取得一个列表

?*?参数:tableName?表名

?*?columns?返回的列

?*?selection?查询条件

?*?selectArgs?如果selection中有“?”号,将用此数组中的值替换

?*???*/

public?Cursor?findList(String?tableName,?String[]?columns,?String?selection,

String[]?selectionArgs,?String?groupBy,?String?having,?String?orderBy)?{

return?db.query(tableName,?columns,?selection,?selectionArgs,?groupBy,

having,?orderBy);

}

}

--------------------------------------------结果----------------------------------------------------

<!--EndFragment-->
  相关解决方案