package com.manhua.sqlitetest;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements
AdapterView.OnItemClickListener {
private DatabaseHelper mDB;
private Cursor mCursor;
private EditText edit_Name;
private EditText edit_Info;
private ListView lv;
private ListAdapter adapter = null;
private int ID = 0;
protected final static int MENU_ADD = Menu.FIRST;
protected final static int MENU_DELETE = Menu.FIRST + 1;
protected final static int MENU_UPDATE = Menu.FIRST + 2;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDB = new DatabaseHelper(this);
mCursor = mDB.select();
edit_Name = (EditText) findViewById(R.id.editText1);
edit_Info = (EditText) findViewById(R.id.editText2);
lv = (ListView) findViewById(R.id.listView1);
adapter = new ListAdapter(this, mCursor);
lv.setAdapter(adapter);
lv.setOnItemClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(Menu.NONE, MENU_ADD, 0, "ADD");
menu.add(Menu.NONE, MENU_DELETE, 0, "DELETE");
menu.add(Menu.NONE, MENU_UPDATE, 0, "UPDATE");
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case MENU_ADD:
add();
break;
case MENU_DELETE:
delete();
break;
case MENU_UPDATE:
update();
break;
}
return true;
}
public void add() {
String name = edit_Name.getText().toString();
String info = edit_Info.getText().toString();
if (name.equals("") || info.equals("")) {
return;
}
mDB.insert(name, info);
// mCursor.requery();
new RefreshList().execute();
edit_Name.setText("");
edit_Info.setText("");
Toast.makeText(this, "Add Successed!", Toast.LENGTH_SHORT).show();
}
public void delete() {
if (ID == 0) {
return;
}
mDB.delete(ID);
// mCursor.requery();
new RefreshList().execute();
edit_Name.setText("");
edit_Info.setText("");
Toast.makeText(this, "Delete Successed!", Toast.LENGTH_SHORT).show();
}
public void update() {
String name = edit_Name.getText().toString();
String info = edit_Info.getText().toString();
// 书名和作者都不能为空,或者退出
if (name.equals("") || info.equals("")) {
return;
}
mDB.update(ID, name, info);
// mCursor.requery();
new RefreshList().execute();
edit_Name.setText("");
edit_Info.setText("");
Toast.makeText(this, "Update Successed!", Toast.LENGTH_SHORT).show();
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
mCursor.moveToPosition(position);
ID = mCursor.getInt(0);
edit_Name.setText(mCursor.getString(1));
edit_Info.setText(mCursor.getString(2));
}
public class ListAdapter extends BaseAdapter {
private Context mContext;
private Cursor mCursor;
public ListAdapter(Context context, Cursor cursor) {
mContext = context;
mCursor = cursor;
}
@Override
public int getCount() {
return mCursor.getCount();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView mTextView = new TextView(mContext);
mCursor.moveToPosition(position);
mTextView.setText(mCursor.getString(1) + "___"
+ mCursor.getString(2));
return mTextView;
}
}
//步骤1:通过后台线程AsyncTask来读取数据库,放入更换Cursor
private class RefreshList extends AsyncTask<Void, Void ,Cursor>{
//步骤1.1:在后台线程中从数据库读取,返回新的游标newCursor
protected Cursor doInBackground(Void... params) {
Cursor newCursor = mDB.select();
return newCursor;
}
//步骤1.2:线程最后执行步骤,更换adapter的游标,并奖原游标关闭,释放资源
protected void onPostExecute(Cursor newCursor) {
adapter.mCursor=newCursor;
mCursor.close();
mCursor = newCursor;
lv.invalidateViews();
}
}
}
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.manhua.sqlitetest.MainActivity" >
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:ems="10"
android:hint="name" />
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="62dp"
android:ems="10"
android:hint="phone" />
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/editText2"
android:layout_centerHorizontal="true"
android:layout_marginTop="14dp" >
</ListView>
</RelativeLayout>
package com.manhua.sqlitetest;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
// http://www.ibm.com/developerworks/cn/opensource/os-cn-sqlite/index.html
public class DatabaseHelper extends SQLiteOpenHelper {
private final static String DATABASE_NAME = "test.db";
private final static int DATABASE_VERSION = 1;
private final static String TABLE_NAME = "Friends";
public final static String ID = "id";
public final static String NAME = "name";
public final static String INFO = "info";
public DatabaseHelper(Context context) {
// TODO Auto-generated constructor stub
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// 创建table
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE " + TABLE_NAME + " (" + ID
+ " INTEGER primary key autoincrement, " + NAME
+ " text, " + INFO + " text);";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String sql = "DROP TABLE IF EXISTS " + TABLE_NAME;
db.execSQL(sql);
onCreate(db);
}
public Cursor select() {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db
.query(TABLE_NAME, null, null, null, null, null, null);
return cursor;
}
// 增加操作
public long insert(String name, String info) {
SQLiteDatabase db = this.getWritableDatabase();
/* ContentValues */
ContentValues cv = new ContentValues();
cv.put(NAME, name);
cv.put(INFO, info);
long row = db.insert(TABLE_NAME, null, cv);
return row;
}
// 删除操作
public void delete(int id) {
SQLiteDatabase db = this.getWritableDatabase();
String where = ID + " = ?";
String[] whereValue = { Integer.toString(id) };
db.delete(TABLE_NAME, where, whereValue);
}
// 修改操作
public void update(int id, String name, String info) {
SQLiteDatabase db = this.getWritableDatabase();
String where = ID + " = ?";
String[] whereValue = { Integer.toString(id) };
ContentValues cv = new ContentValues();
cv.put(NAME, name);
cv.put(INFO, info);
db.update(TABLE_NAME, cv, where, whereValue);
}
}