欢迎投稿

今日深度:

SQLite数据库和自定义ListView的使用,sqlitelistview

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下载


www.htsjk.Com true http://www.htsjk.com/SQLite/35076.html NewsArticle SQLite数据库和自定义ListView的使用,sqlitelistview 使用SQLite的特点: (1)轻量级 使用 SQLite  只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。 (2)独立...
相关文章
    暂无相关文章
评论暂时关闭