SQLite数据库和自定义ListView的使用,sqlitelistview
使用SQLite的特点:
(1)轻量级
使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。
(2)独立性
SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。
(3)隔离性
SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。
(4)跨平台
SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如: Android 。
(5)多语言接口
SQLite 数据库支持多语言编程接口。
(6)安全性
SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。
在这个demo中设计到的知识点有:
1、创建数据库
2、将数据插入数据库中
3、将数据从数据库中删除
4、更新数据库中的数据
5、在数据库中进行查找
6、获取表中的所有数据
7、自定义ListView(自定义Adapter)
8、删除ListView中的item
1、创建数据库
SQLiteOpenHelper
这个类可以帮助我们对数据库进行创建和升级,SQLiteOpenHelper是一个抽象类,我们需要去创建一个类来去继承它,并在自己的类中重写方法OnCreate()和onUpdate(),然后使用者两个方法去创建、升级数据库的逻辑。
SQLiteOpenHelper中有两个非常重要的实例方法:getReadableDatabase()和getWritableDatabase(),这两个方法都可以创建或者打开一个现有的数据库(若不存在则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象。不同的是,当数据库不可进行写入时(磁盘已满),getReadableDatabase()方法返回的对象以只读的方式打开数据库,而getWritableDatabase()方法则会出现异常。
//实例化帮助类
MyDatabaseHelper myDatabaseHelper = new MyDatabaseHelper(this,"BookStore.db",null,1);
//创建或者打开一个现有的数据库
myDatabaseHelper.getWritableDatabase();
//关闭打开数据库
myDatabaseHelper.close();
2、将数据插入数据库中
//执行插入数据语句,将数据插入到数据库中
private void InsertBook(Book book){
MyDatabaseHelper myDatabaseHelper = new MyDatabaseHelper(this,"BookStore.db",null,1);
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name",book.getName());
values.put("author",book.getAuthor());
values.put("pages",book.getPages());
values.put("price",book.getPrice());
db.insert("Book",null,values);
}
3、将数据从数据库中删除
//删除
private void DeleteDatabase(Book book){
MyDatabaseHelper myDatabaseHelper = new MyDatabaseHelper(this,"BookStore.db",null,1);
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
db.delete("Book","name = ? and author = ?",new String[]{book.getName(),book.getAuthor()});
myDatabaseHelper.close();
}
4、更新数据库中的数据
private void UpdateDatabase(Book book,Float price){
MyDatabaseHelper myDatabaseHelper = new MyDatabaseHelper(this,"BookStore.db",null,1);
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("price",price);
db.update("Book",values,"name = ? and author = ?",new String[]{book.getName(),book.getAuthor()});
myDatabaseHelper.close();
}
5、在数据库中进行查找
private Book findBook(String name1){
Book book=null;
MyDatabaseHelper myDatabaseHelper = new MyDatabaseHelper(this,"BookStore.db",null,1);
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
Cursor cursor = db.query("Book",null,"name = ?",new String[]{name1},null,null,null);
while (cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex("name"));
String author = cursor.getString(cursor.getColumnIndex("author"));
int pages = cursor.getInt(cursor.getColumnIndex("pages"));
float price = cursor.getFloat(cursor.getColumnIndex("price"));
book = new Book(name,author,pages,price);
}
return book;
}
6、获取表中的所有数据
private List<Book> getAllBooks(){
List<Book> books = new ArrayList<Book>();
MyDatabaseHelper myDatabaseHelper = new MyDatabaseHelper(this,"BookStore.db",null,1);
SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
//查询Book表中所有的数据
Cursor cursor = db.query("Book",null,null,null,null,null,null);
while (cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex("name"));
String author = cursor.getString(cursor.getColumnIndex("author"));
int pages = cursor.getInt(cursor.getColumnIndex("pages"));
float price = cursor.getFloat(cursor.getColumnIndex("price"));
books.add(new Book(name,author,pages,price));
}
myDatabaseHelper.close();
return books;
}
7、自定义ListView(自定义Adapter)
public class BookAdapter extends ArrayAdapter<Book>{
private int mResource;
List<Book> books ;
public BookAdapter(Context context, int resource, List<Book> objects) {
super(context, resource, objects);
mResource = resource;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Book book = getItem(position);
View view;
ViewHolder viewHolder;
if (convertView == null){
view = LayoutInflater.from(getContext()).inflate(mResource,null);
viewHolder = new ViewHolder();
viewHolder.tv_name = (TextView) view.findViewById(R.id.tv_name);
viewHolder.tv_author = (TextView) view.findViewById(R.id.tv_author);
viewHolder.tv_pages = (TextView) view.findViewById(R.id.tv_pages);
viewHolder.tv_price = (TextView) view.findViewById(R.id.tv_price);
// viewHolder.btn_delete = (Button) view.findViewById(R.id.btn_delete);
view.setTag(viewHolder);
}
else{
view = convertView;
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.tv_name.setText(book.getName());
viewHolder.tv_author.setText(book.getAuthor());
viewHolder.tv_pages.setText(book.getPages().toString());
viewHolder.tv_price.setText(book.getPrice()+"");
return view;
}
private void showInfo(int position){
Book book = getItem(position);
new AlertDialog.Builder(getContext()).setTitle("详情")
.setMessage("书名:"+book.getName()+" 作者:"+book.getAuthor()+"\n页数:"+book.getPages()+" 价格:"+book.getPrice())
.setPositiveButton("确定", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.setNegativeButton("取消",null)
.show();
}
class ViewHolder{
TextView tv_name;
TextView tv_author;
TextView tv_pages;
TextView tv_price;
// Button btn_delete;
}
}
8、删除ListView中的item
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Book book = (Book) adapterView.getItemAtPosition(i);
showInfo(i);
}
private void showInfo(final int position){
final Book book = books.get(position);
new AlertDialog.Builder(this).setTitle("确认删除以下信息")
.setMessage("书名:"+book.getName()+" 作者:"+book.getAuthor()+"\n页数:"+book.getPages()+" 价格:"+book.getPrice())
.setPositiveButton("确定", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
books.remove(position);
bookAdapter.notifyDataSetChanged();
DeleteDatabase(book);
//db.delete("Book","name = ? and author = ?",new String[]{book.getName(),book.getAuthor()});
Toast.makeText(DeleteActivity.this, "删除成功", Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton("取消",null)
.show();
}
demo示例图
Demo下载