zoukankan      html  css  js  c++  java
  • Android 高手进阶教程(十三)之----Android 数据库SQLiteDatabase的使用!!

    Android 提供了三种数据存储方式,第一种是文件存储;第二种是SharedPreferences 存储;第三种就是数据库SQLiteDatabase 存储。

    文件存储我就不用多说了,而SharedPreferences 可以存取简单的数据(int,double,float.etc),它经常用于数据缓存,因为它读取存储简单。详细可以参见本系列。Android 高手进阶教程(七)之----Android 中Preferences的使用!

    今天我们将讲一下SQLiteDatabase 的使用而掌握SqliteDatabase ,将会我们接下来掌握ContentProvider 打下良好的基石

    为了让大家更好的掌握,我们手把手完成该节的Demo

    第一步:新建一个Android工程,命名为SQLiteDatabaseDemo.

    第二步:创建一个新的类BooksDB.java 这个类要继承于android.database.sqlite.SQLiteOpenHelper抽象类,我们要实现其中两个方法:onCreate(),onUpdate.具体代码如下:

    package com.android.tutor;  
    import android.content.ContentValues;  
    import android.content.Context;  
    import android.database.Cursor;  
    import android.database.sqlite.SQLiteDatabase;  
    import android.database.sqlite.SQLiteOpenHelper;  
    public class BooksDB extends SQLiteOpenHelper {  
          private final static String DATABASE_NAME = "BOOKS.db";  
          private final static int DATABASE_VERSION = 1;  
          private final static String TABLE_NAME = "books_table";  
          public final static String BOOK_ID = "book_id";  
          public final static String BOOK_NAME = "book_name";  
          public final static String BOOK_AUTHOR = "book_author";  
            
          public BooksDB(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 + " (" + BOOK_ID  
                + " INTEGER primary key autoincrement, " + BOOK_NAME + " text, "+  BOOK_AUTHOR +" 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 bookname,String author)  
          {  
            SQLiteDatabase db = this.getWritableDatabase();  
            /* ContentValues */  
            ContentValues cv = new ContentValues();  
            cv.put(BOOK_NAME, bookname);  
            cv.put(BOOK_AUTHOR, author);  
            long row = db.insert(TABLE_NAME, null, cv);  
            return row;  
          }  
         //删除操作  
          public void delete(int id)  
          {  
            SQLiteDatabase db = this.getWritableDatabase();  
            String where = BOOK_ID + " = ?";  
            String[] whereValue ={ Integer.toString(id) };  
            db.delete(TABLE_NAME, where, whereValue);  
          }  
          //修改操作  
          public void update(int id, String bookname,String author)  
          {  
            SQLiteDatabase db = this.getWritableDatabase();  
            String where = BOOK_ID + " = ?";  
            String[] whereValue = { Integer.toString(id) };  
            
            ContentValues cv = new ContentValues();  
            cv.put(BOOK_NAME, bookname);  
            cv.put(BOOK_AUTHOR, author);  
            db.update(TABLE_NAME, cv, where, whereValue);  
          }  
    }

    第三步:修改main.xml布局如下,由两个EditText和一个ListView组成,代码如下:

    <?xml version="1.0" encoding="utf-8"?>  
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
      android:orientation="vertical"  
      android:layout_width="fill_parent"  
      android:layout_height="fill_parent"  
      >  
          <EditText    
          android:id="@+id/bookname"   
          android:layout_width="fill_parent"   
          android:layout_height="wrap_content"   
          >  
          </EditText>  
          <EditText    
          android:id="@+id/author"   
          android:layout_width="fill_parent"   
          android:layout_height="wrap_content"   
          >  
          </EditText>  
          <ListView   
          android:id="@+id/bookslist"   
          android:layout_width="fill_parent"   
          android:layout_height="wrap_content"  
          >  
          </ListView>     
    </LinearLayout>

    第四步:修改SQLiteDatabaseDemo.java代码如下:

    package com.android.tutor;  
    import android.app.Activity;  
    import android.content.Context;  
    import android.database.Cursor;  
    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 SQLiteDatabaseDemo extends Activity implements AdapterView.OnItemClickListener {  
        private BooksDB  mBooksDB;  
        private Cursor   mCursor;  
        private EditText BookName;  
        private EditText BookAuthor;  
        private ListView BooksList;  
          
        private int BOOK_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.main);  
            setUpViews();  
        }  
          
        public void setUpViews(){  
            mBooksDB = new BooksDB(this);  
            mCursor  = mBooksDB.select();  
              
            BookName = (EditText)findViewById(R.id.bookname);  
            BookAuthor = (EditText)findViewById(R.id.author);  
            BooksList = (ListView)findViewById(R.id.bookslist);  
              
            BooksList.setAdapter(new BooksListAdapter(this, mCursor));  
            BooksList.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_DELETE, 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 bookname = BookName.getText().toString();  
            String author  = BookAuthor.getText().toString();  
            //书名和作者都不能为空,或者退出  
            if (bookname.equals("") || author.equals("")){  
                return;  
            }  
             mBooksDB.insert(bookname, author);  
             mCursor.requery();  
             BooksList.invalidateViews();  
             BookName.setText("");  
             BookAuthor.setText("");  
             Toast.makeText(this, "Add Successed!", Toast.LENGTH_SHORT).show();  
        }  
          
        public void delete(){  
            if (BOOK_ID == 0) {  
                return;  
            }  
            mBooksDB.delete(BOOK_ID);  
            mCursor.requery();  
            BooksList.invalidateViews();  
            BookName.setText("");  
            BookAuthor.setText("");  
            Toast.makeText(this, "Delete Successed!", Toast.LENGTH_SHORT).show();  
        }  
          
        public void update(){  
            String bookname = BookName.getText().toString();  
            String author  = BookAuthor.getText().toString();  
            //书名和作者都不能为空,或者退出  
            if (bookname.equals("") || author.equals("")){  
                return;  
            }  
            mBooksDB.update(BOOK_ID, bookname, author);  
            mCursor.requery();  
            BooksList.invalidateViews();  
            BookName.setText("");  
            BookAuthor.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);  
            BOOK_ID = mCursor.getInt(0);      
            BookName.setText(mCursor.getString(1));  
            BookAuthor.setText(mCursor.getString(2));  
              
        }  
          
        public class BooksListAdapter extends BaseAdapter{  
            private Context mContext;  
            private Cursor mCursor;  
            public BooksListAdapter(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;  
            }  
              
        }  
    }

    第五步:运行程序效果如下:

    第六步:查看我们所建的数据库。有两种方法:第一种用命令查看:adb shell ls data/data/com.android.tutor/databases。

    另一种方法是用DDMS查看,在data/data下面对应的应用程序的包名 下会有如下数据库,如图所示:

    岁月本长而忙者自促;天地本宽而卑者自隘;风花雪月本闲,而劳忧者自冗;天行健,君子以自强不息;地势坤,君子以厚德载物;宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒.不妄取,不妄予,不妄想,不妄求,与人方便,随遇而安
  • 相关阅读:
    LeetCode Count of Range Sum
    LeetCode 158. Read N Characters Given Read4 II
    LeetCode 157. Read N Characters Given Read4
    LeetCode 317. Shortest Distance from All Buildings
    LeetCode Smallest Rectangle Enclosing Black Pixels
    LeetCode 315. Count of Smaller Numbers After Self
    LeetCode 332. Reconstruct Itinerary
    LeetCode 310. Minimum Height Trees
    LeetCode 163. Missing Ranges
    LeetCode Verify Preorder Serialization of a Binary Tree
  • 原文地址:https://www.cnblogs.com/vvning/p/9429869.html
Copyright © 2011-2022 走看看