SQLite資料庫和自定義ListView的使用
阿新 • • 發佈:2019-02-07
使用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中有兩個非常重要的例項方法:
//例項化幫助類 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示例圖