MainActivity:
public class MainActivity extends Activity {
EditText bookIdTxt=null;
EditText bookTxt=null;
EditText authorTxt=null;
EditText priceTxt=null;
BookDao db=null;
ListView listview1=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
@Override
protected void onPause() {
if(db!=null)
db.closeDB();
super.onPause();
}
@Override
protected void onResume() {
db=new BookDao(this);
super.onResume();
}
@Override
protected void onStop() {
//关闭数据库
db.closeDB();
super.onStop();
}
public void clickBtn(View view)
{
int id=view.getId();
if(id==R.id.btn1)
{
//增加图书信息
addBook();
}else if(id==R.id.btn2)
{
delBookById();
findAllBook3();
}else if(id==R.id.btn3)
{
updateBookById();
}else if(id==R.id.btn4)
{
findBookById();
}else if(id==R.id.btn5)
{
//findAllBookByCursor();
findAllBook3();
}
}
public void delBookById()
{
String bookId=""+bookIdTxt.getText();
db.delBookById(bookId);
}
public void findAllBookByCursor()
{
}
public void findAllBook()
{
List<Book> bookList= db.queryAllBooks();
List list=new ArrayList<String>();
for(int i=0;i<bookList.size();i++)
{
list.add(""+bookList.get(i));
}
ArrayAdapter<String> adapter=
new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list);
listview1.setAdapter(adapter);
}
public void findAllBook2()
{
List<Book> bookList= db.queryAllBooks();
mybookadapter adapter=(mybookadapter)listview1.getAdapter();
if(adapter==null)
{
adapter=new mybookadapter(this);
listview1.setAdapter(adapter);
}
adapter.setData(bookList);
//要通知数据集发生变动
adapter.notifyDataSetChanged();
}
public void findAllBook3()
{
List<Book> bookList= db.queryAllBooks();
List<Map<String, Object>> mapList=new ArrayList<Map<String,Object>>();
for(Book b: bookList)
{
Map m=new HashMap<String, Object>();
m.put("bookid", b.bookId);
m.put("bookname", b.bookname);
m.put("author", b.author);
m.put("price", b.price);
mapList.add(m);
}
String[] from={"bookid","bookname","author","price"};
int[] to={R.id.bookIdTxt,R.id.bookTxt,R.id.authorTxt,R.id.priceTxt};
SimpleAdapter adapter=new SimpleAdapter(this, mapList, R.layout.line, from, to);
listview1.setAdapter(adapter);
//要通知数据集发生变动
adapter.notifyDataSetChanged();
}
public void findBookById()
{
}
public void addBook()
{
String name=""+bookTxt.getText();
String author=""+authorTxt.getText();
float price=Float.parseFloat(""+priceTxt.getText());
Book book=new Book();
book.bookname=name;
book.author=author;
book.price=price;
db.insertBook(book);
}
public void updateBookById()
{
}
public class mybookadapter extends BaseAdapter
{
List<Book> list=new ArrayList<Book>();
LayoutInflater inflater=null;
Context context;
public mybookadapter(Context context)
{
this.context=context;
inflater=LayoutInflater.from(context);
}
public void setData(List<Book> list)
{
this.list=list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Book book=list.get(position);
if(convertView==null)
{
convertView=inflater.inflate(R.layout.line,null);
CompnentHolder ch=new CompnentHolder();
ch.idTxt=(TextView)convertView.findViewById(R.id.bookIdTxt);
ch.nameTxt=(TextView)convertView.findViewById(R.id.bookTxt);
ch.authorTxt=(TextView)convertView.findViewById(R.id.authorTxt);
ch.priceTxt=(TextView)convertView.findViewById(R.id.priceTxt);
convertView.setTag(ch);
}
CompnentHolder ch=(CompnentHolder)convertView.getTag();
ch.idTxt.setText(""+book.bookId);
ch.nameTxt.setText(book.bookname);
ch.authorTxt.setText(book.author);
ch.priceTxt.setText(""+book.price);
if(position%2==0)
{
convertView.setBackgroundColor(Color.RED);
ch.idTxt.setTextColor(Color.WHITE);
ch.nameTxt.setTextColor(Color.WHITE);
ch.authorTxt.setTextColor(Color.WHITE);
ch.priceTxt.setTextColor(Color.WHITE);
}else
{
convertView.setBackgroundColor(Color.WHITE);
ch.idTxt.setTextColor(Color.BLACK);
ch.nameTxt.setTextColor(Color.BLACK);
ch.authorTxt.setTextColor(Color.BLACK);
ch.priceTxt.setTextColor(Color.BLACK);
}
return convertView;
}
}
public void init()
{
bookIdTxt=(EditText)findViewById(R.id.bookIdTxt);
bookTxt=(EditText)findViewById(R.id.bookTxt);
authorTxt=(EditText)findViewById(R.id.authorTxt);
priceTxt=(EditText)findViewById(R.id.priceTxt);
listview1=(ListView)findViewById(R.id.listview1);
}
public class CompnentHolder
{
public TextView idTxt;
public TextView nameTxt;
public TextView authorTxt;
public TextView priceTxt;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
ContentProvider:
public class MyBookProvider extends ContentProvider{
BookDao bookDao=null;
//注册Provider的URI地址
public static UriMatcher uriMatcher=null;
//多条记录的识别码
public static final int BOOKS_CODE=1;
//单条记录的识别码
public static final int BOOK_CODE=2;
static{
uriMatcher=new UriMatcher(UriMatcher.NO_MATCH);
//注册多条记录的URI地址
uriMatcher.addURI(BookMetaData.AUTHORITY, "book", BOOKS_CODE);
//单条记录的URI地址
uriMatcher.addURI(BookMetaData.AUTHORITY, "book/#", BOOK_CODE);
}
@Override
public boolean onCreate() {
Log.i("test", "Provider被创建");
bookDao=new BookDao(this.getContext());
return true;
}
@Override
public String getType(Uri uri) {
int code=uriMatcher.match(uri);
switch(code)
{
case BOOKS_CODE :return BookMetaData.TblBookinfoMetaData.BOOK_DIR_TYPE;
case BOOK_CODE: return TblBookinfoMetaData.BOOK_ITEM_TYPE;
}
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
int result=0;
int code=uriMatcher.match(uri);
switch(code)
{
case BOOKS_CODE:
//如果delete的是多条记录
result=bookDao.delBooks(selection, selectionArgs);
this.getContext().getContentResolver().notifyChange(uri, null);
return result;
case BOOK_CODE:
//如果删除是单条记录 首先要从URI地址中解析出ID号
long id=ContentUris.parseId(uri);
result=bookDao.delBookById(id);
this.getContext().getContentResolver().notifyChange(uri, null);
return result;
default: throw new IllegalArgumentException("URI地址不合法");
}
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
return 0;
}
//第一个参数是用户在访问ContentProvider时所提交的地址
@Override
public Uri insert(Uri uri, ContentValues values) {
//检查URI地址是否合法
int code=uriMatcher.match(uri);
Log.i("test", " insert uri="+uri+" code="+code);
switch(code)
{
case BOOKS_CODE:
long id= bookDao.insertBook(values);
//获得新记录的URI地址
Uri newUri=Uri.withAppendedPath(Uri.parse(TblBookinfoMetaData.BOOKS_URI), ""+id);
//通知数据观察者Observer数据库已经发生变更
this.getContext().getContentResolver().notifyChange(uri, null);
return newUri;
default: throw new IllegalArgumentException("URI地址不合法");
}
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
//检查URI地址是否合法
int code=uriMatcher.match(uri);
switch(code)
{
case BOOKS_CODE:
//如果查询的是多条记录
return bookDao.query(projection, selection, selectionArgs, sortOrder);
case BOOK_CODE:
//如果查询的是单条记录 首先要从URI地址中解析出ID号
long id=ContentUris.parseId(uri);
return bookDao.queryBookById(id);
default: throw new IllegalArgumentException("URI地址不合法");
}
}
}
数据类:
//book.db的元数据类
public class BookMetaData {
public static final String AUTHORITY="veryedu.cls229.lession12.MyProvider";//ContentProvider的标识
public static final String BOOK_DB="book.db";
public static final int VISION=1;
public static final String TBL_BOOK="bookinfo";
public static class TblBookinfoMetaData implements BaseColumns
{
//访问多本图书的uri地址 content://veryedu.cls229.lession12.MyProvider/book
public static final String BOOKS_URI="content://"+AUTHORITY+"/book";
//访问单本图书的uri地址 content://veryedu.cls229.lession12.MyProvider/book/11
public static final String BOOK_URI="content://"+AUTHORITY+"/book/";
//多条数据的数据类型
public static final String BOOK_DIR_TYPE="vnd.android.cursor.dir/vnd.mybooks.contenttype";
//单条数据的数据类型
public static final String BOOK_ITEM_TYPE="vnd.android.cursor.item/vnd.mybooks.contenttype";
public static final String TBL_BOOK="bookinfo";
public static final String BOOK_NAME="bookname";
public static final String BOOK_AUTHOR="author";
public static final String BOOK_PRICE="price";
}
}
数据库:SQLiteOpenHelper:
public class MySqliteDbHelper extends SQLiteOpenHelper{
private static MySqliteDbHelper instance=null;
//name 数据库名
//factory游标工厂
//version版本号
public MySqliteDbHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
public static MySqliteDbHelper getInstance(Context context)
{
if(instance==null)
instance=new MySqliteDbHelper(context,BookMetaData.BOOK_DB,null,BookMetaData.VISION);
return instance;
}
//这个方法会在数据库第一次访问时创建
//一般我们在这个方法中完成建库建表以及加入默认数据的操作
@Override
public void onCreate(SQLiteDatabase db) {
String createBookTab="create table "+BookMetaData.TBL_BOOK+"(_id integer primary key autoincrement," +
BookMetaData.TblBookinfoMetaData.BOOK_NAME +","
+" "+BookMetaData.TblBookinfoMetaData.BOOK_AUTHOR
+","+BookMetaData.TblBookinfoMetaData.BOOK_PRICE+")";
db.execSQL(createBookTab);
}
//这个方法是在有版本更新 新版本的版本号大于老版本的版本号时执行
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//把原来老的表删除 创建新的数据库 一般来说要先备份老的数据 再重新创建数据库
db.execSQL("drop table "+BookMetaData.TBL_BOOK);
onCreate(db);
}
}
DAO:
public class BookDao {
MySqliteDbHelper dbhelper=null;
String db_path="book.db";
Context context=null;
public BookDao(Context context)
{
this.context=context;
dbhelper=MySqliteDbHelper.getInstance(context);
}
public void closeDB()
{
if(dbhelper!=null)
{
dbhelper.close();
dbhelper=null;
}
}
public int updateBook(Book book)
{
return 0;
}
public Cursor queryAllBooksByCursor()
{
return null;
}
public void delBookById(String bookid)
{
SQLiteDatabase db=dbhelper.getWritableDatabase();
db.delete(BookMetaData.TblBookinfoMetaData.TBL_BOOK, "_id="+bookid, null);
}
public int delBookById(long bookid)
{
SQLiteDatabase db=dbhelper.getWritableDatabase();
return db.delete(BookMetaData.TblBookinfoMetaData.TBL_BOOK, "_id="+bookid, null);
}
public int delBooks(String whereClause, String[] whereArgs )
{
SQLiteDatabase db=dbhelper.getWritableDatabase();
return db.delete(TblBookinfoMetaData.TBL_BOOK, whereClause, whereArgs);
}
public List<Book> queryAllBooks()
{
List<Book> bookList=new ArrayList<Book>();
SQLiteDatabase db=dbhelper.getWritableDatabase();
Cursor c=db.query(BookMetaData.TblBookinfoMetaData.TBL_BOOK, null, null, null, null, null, null);
if(c.moveToFirst())
{
do{
Book b=new Book();
b.bookId=c.getInt(c.getColumnIndex("_id"));
b.bookname=c.getString(c.getColumnIndex("bookname"));
b.author=c.getString(c.getColumnIndex("author"));
b.price=c.getFloat(c.getColumnIndex("price"));
bookList.add(b);
}while(c.moveToNext());
}
c.close();
return bookList;
}
public Cursor query(String[] projection, String selection,
String[] selectionArgs, String sortOrder)
{
SQLiteDatabase db=dbhelper.getWritableDatabase();
Cursor cursor=db.query(TblBookinfoMetaData.TBL_BOOK, projection, selection, selectionArgs, null, null, sortOrder);
return cursor;
}
public Book queryBookById(String id)
{
return null;
}
public Cursor queryBookById(long id)
{
SQLiteDatabase db=dbhelper.getWritableDatabase();
Cursor c=db.query(TblBookinfoMetaData.TBL_BOOK, null, TblBookinfoMetaData._ID+"="+id, null, null, null, null);
return c;
}
public void insertBook(Book book)
{
SQLiteDatabase db=dbhelper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("bookname", book.bookname);
values.put("author", book.author);
values.put("price", book.price);
db.insert(BookMetaData.TblBookinfoMetaData.TBL_BOOK,"author", values);
}
public long insertBook(ContentValues values)
{
SQLiteDatabase db=dbhelper.getWritableDatabase();
return db.insert(BookMetaData.TblBookinfoMetaData.TBL_BOOK,"author", values);
}
}
实体类:
public class Book {
public int bookId;
public String bookname;
public String author;
public float price;
public String toString()
{
return "id:"+bookId+" 书名:"+bookname
+" 作者:"+author+" 价格:"+price;
}
}