Android Sqlite学习

来源:互联网 发布:aes加密算法java 编辑:程序博客网 时间:2024/06/05 18:42

前言

最近修改的考务和培训系统将用户收藏的题目和考试错题通过Sqlite存储在手机客户端,趁着这个机会彻底实测了一把.

Android实现数据存储主要有三种方式:文件,SharedPreferences和数据库SqliteDatabase存储.

SQlite是什么? The following specification is defined By Baidu.com

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2015年已经有15个年头,SQLite也迎来了一个版本 SQLite 3已经发布。

Sqlite的操作与其它数据库SqlServer,MySql类似.
**

Step 1.

**
首先,定义自己的类继承Android提供的 SQLiteOpenHelper,需要重写父类提供的两个方法onCreate(),onUpgrade().
myDbHelper:

package com.elvis.tools;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class MyDbHelper extends SQLiteOpenHelper {    private final static String DATABASE_NAME = "BOOKS.db";    private final static int DATABSE_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 MyDbHelper(Context context)     {        super(context, DATABASE_NAME, null, DATABSE_VERSION);        // TODO Auto-generated constructor stub    }    //OnCreate()创建了一张数据表    @Override    public void onCreate(SQLiteDatabase db)     {        // TODO Auto-generated method stub        //String sql = "CRETE TABLE " + TABLE_NAME + " (" +BOOK_ID         //      + " INTEGER primary key autoincrement, " + BOOK_NAME + " text, " +        //      BOOK_AUTHOR + " text);";        String sql = "CREATE TABLE " + TABLE_NAME + " (" + BOOK_ID                + " INTEGER primary key autoincrement, " + BOOK_NAME + " text, "+                 BOOK_AUTHOR + " text);";            //  db.execSQL(sql);        db.execSQL(sql);    }    //保证table是最新创建的.    @Override    public void onUpgrade(SQLiteDatabase db, int arg1, int arg2)     {        // TODO Auto-generated method stub        String sql = "DROP TABLE IF EXISTS " + TABLE_NAME;        db.execSQL(sql);        onCreate(db);    }    //query    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.getReadableDatabase();        //插入操作必须要用到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;    }    //删除操作 (id代表  要删除的Book_ID)    public void delete(int id)    {        SQLiteDatabase db = this.getReadableDatabase();        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.getReadableDatabase();        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);    }}

MyDbHelper类定义了数据的增删改查操作.

Step2. MyActivity.java

在menu菜单中添加了三个子菜单,分别为 add, delete和update.分别为这三个子菜单添加了响应事件.注意要实现Menu类的onCreateOptionsMenu(Menu menu)和onOptionsItemSelected(MenuItem item)方法.(这是android面试宝典中的一道题目.)

采用了ListView,并为ListView中的Item添加了响应事件,必须要绑定Adapter.实现了AdapterView.OnItemClickListener()事件.

package com.elvis.sqliteandroid;import com.elvis.tools.MyDbHelper;import android.os.Bundle;import android.app.Activity;import android.content.Context;import android.database.Cursor;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 SqlActivity extends Activity implements AdapterView.OnItemClickListener{    private MyDbHelper 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;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_sql);        initView();    }    public void initView()    {        mBooksDB = new MyDbHelper(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);    }    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() {            // TODO Auto-generated method stub            return mCursor.getCount();        }        @Override        public Object getItem(int arg0) {            // TODO Auto-generated method stub            return null;        }        @Override        public long getItemId(int arg0) {            // TODO Auto-generated method stub            return 0;        }        @Override        public View getView(int position, View arg1, ViewGroup arg2) {            // TODO Auto-generated method stub            TextView mTextView = new TextView(mContext);            mCursor.moveToPosition(position);            mTextView.setText(mCursor.getString(1)+ "___" + mCursor.getString(2));            return mTextView;        }    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        //getMenuInflater().inflate(R.menu.sql, 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_UPDATE,0,"UPDATE");        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item)     {        // TODO Auto-generated method stub        super.onOptionsItemSelected(item);        switch(item.getItemId())        {        case MENU_ADD:            add();            break;        case MENU_DELETE:            delete();            break;        case MENU_UPDATE:            update();            break;        }        return true;    }    @SuppressWarnings("deprecation")    public void add()    {        String bookname = BookName.getText().toString();        String bookauthor = BookAuthor.getText().toString();        if(bookname.trim().length() == 0 || bookauthor.trim().length() == 0)        {            return ;        }        mBooksDB.insert(bookname, bookauthor);        mCursor.requery();        BooksList.invalidateViews();        BookName.setText("");        BookAuthor.setText("");        Toast.makeText(this, "Add Success!", Toast.LENGTH_SHORT).show();    }    //onItemSelected的时候,BOOK_ID进行了修改    public void delete()    {        if(BOOK_ID == 0)        {            return;        }        mBooksDB.delete(BOOK_ID);        mCursor.requery();        BooksList.invalidateViews();        BookName.setText("");        BookAuthor.setText("");        Toast.makeText(this, "Delete Success!", Toast.LENGTH_SHORT).show();    }    public void update()    {        String bookname = BookName.getText().toString();        String bookauthor = BookAuthor.getText().toString();        if(bookname.trim().length() == 0 || bookauthor.trim().length() == 0)        {            return ;        }        mBooksDB.update(BOOK_ID, bookname,bookauthor);        mCursor.requery();        BooksList.invalidateViews();        BookName.setText("");        BookAuthor.setText("");        Toast.makeText(this, "Delete Success!", Toast.LENGTH_SHORT).show();    }    @Override    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {        // TODO Auto-generated method stub        mCursor.moveToPosition(position);        BOOK_ID = mCursor.getInt(0);        BookName.setText(mCursor.getString(1));        BookAuthor.setText(mCursor.getString(2));    }}

Step3. 布局文件xx.xml.

<?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>

多动手,多实践,多测验!

0 0