Android Sqlite学习

前言

最近修改的考务和培训系统将用户收藏的题目和考试错题通过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>

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值